第一:struts2
官方地址:http://struts.apache.org
Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。
Servlet的几个重要对象
HttpServletRequest.
HttpServletResponse.
HttpSession.
ServletContext--> Application
HttpSession.invalidate()可以结束一个会话。
Enterprise Java Bean(EJB)组件是基于标准分布式对象技术。
XML文件常用作各种软件应用的配置文件。基于Struts框架中有两个重要的配置文件
Web.xml以及stuts-config.xml
WEB服务器用于处理HTTP请求,应用服务器可以提供和WEB应用相关的服务,如EJB容器就是一种处理业务逻辑和事物的应用服务器。
请求转发:Servlet类使用javax.servlet.RequestDispatcher.forword()方法来转发HTTP请求。
JAVA中常常使用大的对象比如request, response, system等获取一些接口的实例化对象。
重定向的源组件和目标组件之间不共用同一个HttpServletRequest对象,因此不能共享request范围内的共享数据。
Servlet类使用javax.servlet.RequestDispatcher.include()方法包含其他组件。
RequestDispatcher rd; rd = req.getRequestDispatcher("/header.jsp"); rd.include(req, res); rd = req.getRequestDispatcher("/main.jsp"); rd.include(req, res); rd = req.getRequestDispatcher("/footer.jsp"); rd.include(req, res); |
Struts实质上是MVC框架的一种应用,M是由实现业务逻辑的JavaBean或者EJB组件组成,控制器由ActionServlet和Action来实现,视图由一组JSP文件构成。
通常Struts框架中的ActionForm Bean也被划分到视图模块中。Struts框架把用户输入的表单数据保存在ActionForm Bean中,把它传递给控制器。JSP文件使用Struts读取修改后的ActionForm Bean的信息。
模型表示程序的状态和业务逻辑,对应大型应用,业务逻辑通常由JAVABEAN或者EJB组件来实现。
ActionServlet 继承了javax.servlet.http.HttpServlet类,负责接收HTTP请求,根据配置文件struts-config.xml,把请求发给Action对象,ActionServlet会创建不存在Action对象。
(ActionForward Action.execute();)
Action类负责调用模型的方法,更新模型的状态,并帮组控制应用程序的流程。对于小型的应用,Action类本身也可以完成一些实际的业务逻辑。
对大型的应用,Action充当用户请求和业务逻辑处理之间的Adaptor,目的是将请求与业务逻辑分开。业务逻辑有Java Bean或者EJB来完成。
在struts-config.xml中,每一个Action映射信息都通过一个<action>元素来配置,在内存中,每个<action>元素都对应一个org.apache.struts.action.ActionMapping类的实例。
Struts流程
当ActionServlet接收到一个客户请求时
1.检索与请求匹配的ActionMapping实例。
2.创建补存在的ActionForm对象,把客户提交的表单数据保存到ActionForm中。
3.按需使用ActionForm的validate()方法进行表单验证。
4.如果validate()方法返回Null或者一个没有ActionMessage的ActionErrors对象则表单测试OK。
5.ActionServlet根据ActionMapping的信息决定将请求传给下一个Action。创建不存在的Action实例,调用它的execute方法。
6. ActionForward Action.execute(),此对象指向JSP组件生成动态网页,返回给客户。
7.ActionForward对象指向的JSP组件生成动态网页,返回给客户。
第二:spring
官方地址:spring: http://www.springsource.org
Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IOC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。
第三、Hibernate
官方地址:http://www.hibernate.org
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
Struts 是一个很好的MVC框架,主要技术是Servlet和Jsp。Struts的MVC设计模式可以使我们的逻辑变得很清晰,让我们写的程序层次分明。
Spring 提供了管理业务对象的一致方法,并鼓励注入对接口编程而不是对类编程的良好习惯,使我们的产品在最大程度上解耦。
Hibernate 是用来持久化数据的,提供了完全面向对象的数据库操作。Hibernate对JDBC进行了非常轻量级的封装,它使得与关系型数据库打交道变得非常轻松。
以下是SSH架构图:
Struts负责Web层:
ActionFormBean接收网页中表单提交的数据,然后通过Action进行处理,再Forward到对应的网页,在Struts-config.xml中定义了<action-mapping>,ActionServlet会加载进来。
Spring负责业务层管理,即Service:
Service为Action提供统一的调用接口,封装持久层的DAO,并集成Hibernate,Spring可对JavaBean和事物进行统一管理。
Hibernate负责持久层,完成数据库的CRUD操作:
Hibernate有一组hbm.xml文件和PO,是与数据库中的表相对应的,然后定义DAO,这些是与数据库打交道的类。
在Struts+Spring+Hibernate系统中,对象之间的调用流程如下:Struts——>Spring——>Hibernate
JSP——>Action——>Service——>DAO——>Hibernate
附注:
最后再说一下spring中的AOP和IOC的关系,总是容易混淆,没有深入的理解
IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。简单来说就是不需要NEW一个对象了。
AOP:面向切面,是一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在一段程序之前或者之后做一些事。
Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。
不过AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便