Struts+Hibernate+Spring+三个框架简介
Struts、Spring、Hibernate三大框架的原理和优点

Struts的原理和优点.Struts工作原理MVC即Model—View—Controller的缩写,是一种常用的设计模式。
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展.Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。
控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。
最后动作类把控制权传给后续的JSP 文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
模型:模型以一个或多个java bean的形式存在。
这些bean分为三类:Action Form、Action、JavaBean or EJB.Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。
深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式

深入浅出的理解框架(Struts2、Hibernate、Spring)与MVC设计模式现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate。
似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和找工作的必备基础。
然而,如果在面试的时候问这些程序员,你们为什么要学习这些框架?这些框架的本质到底是什么?似乎很少很少有人能够给我非常满意的答复。
因为他们都在为了学习而学习,为了工作而学习,而不是在真正去深入了解一个框架。
其实所有的人都应该思考这样的问题:为什么要学习框架?框架到底给我带来了什么?接下来,我们以登录作为一个最简单的例子,来看看不同的年代,我们是怎么写Web程序的。
在很多年前,我们这么写程序的很多年前,那是一个贫苦的年代,如果我们要使用Java在网页上做一些动态的交互功能。
很多人会告诉你一个技术,叫做JSP。
在我还对Java非常困惑的时候,就有人告诉我,JSP是个好东西,它可以在HTML代码里面写Java代码来完成逻辑。
[javascript] view plaincopy1.<%2. String name = request.getParameter("name");3. String password = request.getParameter("password");4.5. UserHandler userHandler =new UserHandler();6.if(userHandler.authenticate(name, password)) {7.%>8.<p>恭喜你,登录成功</p>9.<%10. } else {11.%>12.<p>对不起,登录失败</p>13.<%14. }15.%>作为一张JSP,它可以接收从别的JSP发送过来的登录请求,并进行处理。
三大框架

Hibernate常用的接口
1.Configuration接口 configuration对象用于加载解析配置文件启动Hibernate,然后创建 SessionFactory实例 2.SessionFactory接口 一个SessionFactory实例对应一个数据存储源,应用从 SessionFactory中获取Session实例 。SessionFactory有以下特点: 1.它是线程安全的,这意味着它的同一个实例可以被应用的多个线程 共享。 2.它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用 只访问一个数据库,只需要创建一个SessionFactory实例,在应用初 始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每 个数据库创建一个单独的SessionFactory实例。 之所以称SessionFactory是重量级的,因为它需要一个很大的缓存, 用来存放预定义的SQL语句及映射元数据等。用户还可以为 SessionFactory配置一个缓存插件,这个缓存插件被称为Hibernate的 二级缓存,该缓存用来存放被工作单位读过的数据,将来其他工作单 元可能会重用这些数据,因此这个缓存中的数据能被所有的工作单元 共享。一个工作单元通常对应一个数据库事务。
Hibernate配置文件的书写
Hibernate.cfg.xml
Hibernate映射文件的书写
基于Struts Hibernate Spring架构的软件开发

基于Struts Hibernate Spring架构的软件开发摘要:近年来,随着信息技术应用于各行各业,尤其是企业信息化建设的不断发展,构建了基于Web的技术系统之上。
对于当今复杂多变的市场环境,发展壮大信息技术需要考虑他的伸缩性强、扩展性好、重用性高和易维护、易管理的特点,使得Web技术发展成为现当代的热点。
Struts Hibernate Spring三大框架(SSH)主要应用于大型项目。
只有大项目才能体现出SSH的优势。
关键词:Struts Hibernate Spring 构架软件开发随着信息技术的发展需要,构建基于Web的应用系统的需求,从而使Struts Hibernate Spring结构结合,形成对Web的新应用。
1 Struts Hibernate Spring原理概述Struts就是一个MVC模式的框架,它就是将业务代码与视图代码分离,有效地优化系统结构,提高系统的扩展性,降低系统复杂度与维护难度。
Hibernate是一个对象关系数据库映射工具,通过Hibernate的使用,能够很好地解决面向对象编程语言与关系数据库一起使用可能带来的种种麻烦,使得程序设计人员可以减少对关系数据模型的依赖,致力于业务逻辑的开发。
Spring框架的使用将J2EE层次结构中的业务层分离为业务逻辑层和数据持久层,这样业务逻辑便交给Spring处理,而数据访问则交给Hibernate处理,使得层次结构更加清晰。
1.1 StrutsStruts在MVC模块中本原来就是负责将用户数据传入业务层,以及将业务层处理的结果返回给用户,此系统属于较简单Web应用,主要作用在于在用户视图中使用get,set方法来方便地获取关联对象。
1.2 SpringSpring Framework最主要的作用在于与Hibernate的无缝链接,虽然Spring 对Hibernate提供了90%以上的封装,使我们不必去关心Session 的建立,关闭,以及事务使我们能够专心的关注业务逻辑。
Struts2+Spring框架简介+Hibernate查询语言

出自Gavin King的手笔,目前最流行的开源ORM框架,其灵巧的设计,优秀的 性能,还有丰富的文档,都是其迅速风靡全球的重要因素。
Entity EJB
Entity EJB实质上也是一种ORM技术,这是一种备受争议的组件技术,很多人 说它非常优秀,也有人说它一钱不值。事实上,EJB为J2EE的蓬勃发展赢得了 极高的声誉,EJB作为一种重量级、高花费的ORM技术上,具有不可比拟的优势。 但由于其必须运行在EJB容器内,而且学习曲线陡峭,开发周期、成本相对较 高,因而限制EJB的广泛使用。
添加自动注解配置(自动扫描@Service,@Repository等注解)
<context:component-scan base-package="test,a"/>
<context:annotation-config/> 该配置将隐式地向Spring容器注册4个 BeanPostProcessor
<bean id="hello" class="test.HelloWorld" abstract="false“ lazy-init="default" autowire="default" dependencycheck="default"> <property name="helloWorld"> <value type="ng.String">Hello World From IOC</value> </property> </bean>
Struts,Hibernate,Spring三框架的优缺点

上面回贴情绪有点激动,希望谅解,我不是因为有人批评Hibernate而感到不快,而是因为帖子里面的观点实在让我觉得荒谬。不管觉得Hibernate好也吧,不好也吧,我唯一觉得遗憾的是,在中文论坛里面找不到一个对Hibernate的真正高水平的评价。在TSS上有一个关于Hibernate的hot thread,跟了几百贴,其中包括Hibernate作者Gavin和LiDO JDO的CTO,对于JDO和Hibernate有过一些激烈的争论,我曾经耐心的看了一遍,仍然没有发现针对Hibernate真正有力的攻击,那些所谓的攻击无非针对Hibernate没有一个GUI的配置工具,没有商业公司支持,没有标准化等等这些站不住脚的理由。
6. 支持I18N
一、转到展示层时,需要配置forward,每一次转到展
示层,相信大多数都是直接转到jsp,而涉及到转向,需要配置forward,如果有十个展示层的jsp,需要配置十次struts,而且还不包括有时候目录、文件变更,需要重新修改forward,注意,每次修改配置之后,要求重新部署整个项目,而tomcate这样的服务器,还必须重新启动服务器,如果业务变更复杂频繁的系统,这样的操作简单不可想象。现在就是这样,几十上百个人同时在线使用我们的系统,大家可以想象一下,我的烦恼有多大。
使用Hibernate来提高上面架构的开发效率的架构:
3) Session Bean <-> DAO <-> Hibernate <-> DB
就上面3个架构来分析:
1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。
四、EB和Hibernate学习难度在哪里?
SSH框架简介

SSH框架简介SSH 即是Struts + Spring + Hibernate 3个开源框架。
一、Struts是一个MVC框架,通过配置文件很好的实现了模型与视图的分离,Struts应用包括3个组件:控制器组件(ActionServ let和自定义Action);模型组件(普通接口和Jav aBean);视图组件(ActionForm和Struts标签);Struts 的MVC设计模式可以使我们的逻辑变得很清晰。
Struts的工作流程:在web应用启动时就会加载初始化ActionServ let,ActionServ let从struts-conf ig.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServ let接收到一个客户请求时,将执行如下流程.-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的v alidate()方法;-(4)如果ActionForm的v alidate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;-(5)ActionServ let根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;-(6)Action的execute()方法返回一个ActionForward对象,ActionServ let在把客户请求转发给ActionForward对象指向的JSP组件;-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;二、Spring是一个轻量级框架,提供依赖注入容器,AOP实现,DAO/ORM支持,Web集成等功能。
Java框架介绍:Spring和Hibernate

Java框架介绍:Spring和Hibernate 引言:在当前的软件开发中,使用框架已经成为标配。
一个优秀的框架可以极大地提高开发效率并减少开发成本。
Java语言也有许多流行的框架,其中最常见的两个框架是Spring和Hibernate。
本文将详细介绍这两个框架,并对它们的步骤和功能进行阐述。
一、Spring框架:1. Spring框架简介- Spring是一个开源的JavaEE框架,提供了一种轻量级的容器模式,用于管理Java应用程序的组件和对象。
- Spring的目标是简化企业级应用开发,提高可维护性和可测试性。
2. Spring的核心功能- 控制反转(IoC):通过对象的依赖注入,将对象的创建和管理交由Spring 容器完成。
- 面向切面编程(AOP):通过配置和动态代理,对多个对象的共同功能进行封装和复用。
- 事务管理:提供对数据库事务的支持,保证数据的一致性和完整性。
- MVC框架:提供Web应用开发的支持,实现了MVC设计模式。
3. 使用Spring的步骤- 引入Spring的依赖:在项目的配置文件中引入Spring的相关依赖,可以使用Maven或Gradle等工具进行管理。
- 配置Spring的配置文件:创建一个XML或注解配置文件,定义Bean和其他Spring组件的配置。
- 编写业务逻辑代码:在Java类中编写业务逻辑代码,将需要由Spring管理的对象注入到类中。
- 获取Spring容器:通过配置文件或注解获取Spring容器,并从容器中获取需要的Bean对象。
- 使用Spring对象:在业务逻辑中使用Spring容器中的对象,调用方法来完成业务操作。
二、Hibernate框架:1. Hibernate框架简介- Hibernate是一个开源的对象关系映射(ORM)框架,用于简化Java应用程序与关系型数据库的交互。
- Hibernate通过将Java对象映射到数据库表,实现了对象导向的数据库操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts是一个为开发基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Java Servlet和JSP构建Web应用的一项非常有用的技术。
由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,因而吸引了众多的开发人员的关注。
首先事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts使用Action来接受浏览器表单提交的事件,这里使用了Command 模式,每个继承Action的子类都必须实现一个方法execute。
struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用Struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。
Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。
Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。
Struts框架可分为以下四个主要部分: 1、模型(Model),本质上来说在Struts中Model是一个Action类(这个会在后面详细讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的配置信息的。
2、视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用她们我们可以快速建立应用系统的界面。
3、控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类。
4、一堆用来做XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBean的属性的,此外Struts还利用XML来描述在国际化应用中的用户提示信息的(这样一来就实现了应用系统的多语言支持)。
Hibernate Hibernate是一个免费的开源Java包,它使得与关系数据库打交道变得十分轻松,就像您的数据库中包含每天使用的普通Java对象一样,同时不必考虑如何把它们从神秘的数据库表中取出(或放回到数据库表中)。
它解放了您,使您可以专注于应用程序的对象和功能,而不必担心如何保存它们或稍后如何找到它们。
大多数应用程序都需要处理数据。
Java应用程序运行时,往往把数据封装为相互连接的对象网络,但是当程序结束时,这些对象就会消失在一团逻辑中,所以需要有一些保存它们的方法。
有时候,甚至在编写应用程序之前,数据就已经存在了,所以需要有读入它们和将其表示为对象的方法。
手动编写代码来执行这些任务不仅单调乏味、易于出错,而且会占用整个应用程序的很大一部分开发工作量。
优秀的面向对象开发人员厌倦了这种重复性的劳动,他们开始采用通常的“积极”偷懒做法,即,创建工具,使整个过程自动化。
对于关系数据库来说,这种努力的最大成果就是对象/关系映射(ORM)工具。
这类工具有很多,从昂贵的商业产品到内置于J2EE中的EJB标准。
然而,在很多情况下,这些工具具有自身的复杂性,使得开发人员必须学习使用它们的详细规则,并修改组成应用程序的类以满足映射系统的需要。
由于这些工具为应付更加严格和复杂的企业需求而不断发展,于是在比较简单和常见的场景中,使用它们所面临的复杂性反而盖过了所能获得的好处。
这引起了一场革命,促进了轻量级解决方案的出现,而Hibernate就是这样的一个例子。
Hibernate的工作方式 Hibernate不会对您造成妨碍,也不会强迫您修改对象的行为方式。
它们不需要实现任何不可思议的接口以便能够持续存在。
惟一需要做的就是创建一份XML“映射文档”,告诉Hibernate您希望能够保存在数据库中的类,以及它们如何关联到该数据库中的表和列,然后就可以要求它以对象的形式获取数据,或者把对象保存为数据。
与其他解决方案相比,它几乎已经很完美了。
由于本文只是一篇介绍性的文章,所以不会引入构建和使用Hibernate映射文档的具体例子(我在《Hibernate: A Developer's Notebook》一书的头几章中已经介绍了一个例子)。
此外,在网上和Hibernate的在线文档中,还可以找到一些不错的例子,请参见下面的“其他信息”部分。
它实际上相当直观。
应用程序对象中的属性以一种简单而自然的方式与正确的数据库结构相关联。
运行时,Hibernate读取映射文档,然后动态构建Java类,以便管理数据库与Java之间的转换。
在Hibernate中有一个简单而直观的API,用于对数据库所表示的对象执行查询。
要修改这些对象,(一般情况下)只需在程序中与它们进行交互,然后告诉Hibernate保存修改即可。
类似地,创建新对象也很简单;只需以常规方式创建它们,然后告诉Hibernate有关它们的信息,这样就能在数据库中保存它们。
Hibernate API学习起来很简单,而且它与程序流的交互相当自然。
在适当的位置调用它,就可以达成目的。
它带来了很多自动化和代码节省方面的好处,所以花一点时间学习它是值得的。
而且还可以获得另一个好处,即代码不用关心要使用的数据库种类(否则的话甚至必须知道)。
我所在的公司就曾有过在开发过程后期被迫更换数据库厂商的经历。
这会造成巨大的灾难,但是借助于Hibernate,只需要简单地修改Hibernate配置文件即可。
这里的讨论假定您已经通过创建Hibernate映射文档,建立了一个关系数据库,并且拥有要映射的Java类。
有一个Hibernate“工具集”可在编译时使用,以支持不同的工作流。
例如,如果您已经拥有Java类和映射文档,Hibernate可以为您创建(或更新)必需的数据库表。
或者,仅仅从映射文档开始,Hibernate也能够生成数据类。
或者,它可以反向设计您的数据库和类,从而拟定映射文档。
还有一些用于Eclipse的alpha 插件,它们可以在IDE中提供智能的编辑支持以及对这些工具的图形访问。
如果您使用的是Hibernate 2环境,这些工具鲜有提供,但是存在可用的第三方工具。
使用Hibernate的场合 既然Hibernate看起来如此灵活好用,为什么还要使用其他的工具呢?下面有一些场景,可以帮助您做出判断(或许通过提供一些比较和上下文,可以有助于鉴别非常适用Hibernate的场合)。
如果应用对于数据存储的需要十分简单——例如,您只想管理一组用户优先选择——您根本不需要数据库,更不用说一个优秀的对象-关系映射系统了(即使它也如Hibernate这般易于使用)!从Java 1.4开始,有一个标准的Java Preferences API可以很好地发挥这个作用。
(在ONJava文章中可以找到有关Preferences API的更多信息。
) 对于熟悉使用关系数据库和了解如何执行完美的SQL查询与企业数据库交互的人来说,Hibernate似乎有些碍手碍脚,这就像带有动力和自动排挡的快艇车会使注重性能的赛车驾驶员不耐烦一样。
如果您属于这种人,如果您所在的项目团队拥有一个强大的DBA,或者有一些存储过程要处理,您可能想研究一下iBATIS。
Hibernate的创建者本身就把iBATIS当作是另一种有趣的选择。
我对它很有兴趣,因为我们曾为一个电子商务站点开发了一个类似的系统(其功能更为强大),而且从那时到现在,我们已经在其他环境中使用过它,尽管在发现Hibernate之后,在新项目中我们通常更喜欢使用Hibernate。
您可以认为,以SQL为中心的解决方案(比如iBATIS)是“反向的”对象/关系映射工具,而Hibernate是一个更为传统的ORM。
当然,还有其他的外部原因会导致采用另外的方法。
比如,在一个企业环境中,必须使用成熟的EJB架构(或者其他的一些非普通对象映射系统)。
可以为提供自己的数据存储工具的平台量身定做代码,比如Mac OS X's Core Data。
使用的可能是像XML DTD这样的存储规范,而它根本不涉及关系数据库。
但是,如果您使用的是富对象模型,而且想要灵活、轻松且高效地保存它(无论您是否正要开始或已经决定使用关系数据库,只要这是一个选择——而且存在可用的优秀免费数据库,比如MySQL,或可嵌入Java的HSQLDB,它就应该始终是一个选择),那么Hibernate很可能就是您理想的选择。
您可能会惊讶于节省的时间之多,以及您将会多么地喜欢使用它。
springSpring是一个开源框架,它由Rod Johnson创建。
它是为了解决企业应用开发的复杂性而创建的。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。
从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring 中受益。
" 目的:解决企业应用开发的复杂性" 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能" 范围:任何Java应用简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
■ 轻量——从大小与开销两方面而言Spring都是轻量的。
完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。
并且Spring所需的处理开销也是微不足道的。
此外,Spring是非侵入式的:典型地,Spring 应用中的对象不依赖于Spring的特定类。
■ 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。
当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。
你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
■ 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。
应用对象只实现它们应该做的——完成业务逻辑——仅此而已。
它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
■ 容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。