struts2总结:
先说一下struts2的工作流程:
核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。
业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件
的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。
Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是
WebWork的升级版本。Struts 2框架按照模块来划分,可以分为Servlet Filters、Struts核心模
块、拦截器和用户实现部分。Struts 2框架结构图如图3.1所示。
一个请求在Struts 2框架中的处理大概分为以下几个步骤。
客户端提交一个(HttpServletRequest)请求,如上文在浏览器中输入 http://localhost:
8080/bookcode/ch2/Reg.action就是提交一个(HttpServletRequest)请求。
请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过
滤器(SiteMesh等)、 FilterDispatcher)。注意:这里是有顺序的,先ActionContext
CleanUp,再其他过滤器(Othter Filters、SiteMesh等),最后到FilterDispatcher。
FilterDispatcher是控制器的核心,就是MVC的Struts 2实现中控制层(Controller)的核心。
FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet
Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处
理交给ActionProxy。
ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的
Action类。例如,用户注册示例将找到UserReg类。
ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action
。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)
。
一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果
result。
说完struts2还应该说一下struts1的工作原理:
由ActionForm和JavaBean组成,其中ActionForm用于封装用户的请求参数,封装成ActionForm
对象,该对象被ActionServlet转发给Action,Action根据ActionFrom里面的请求参数处理用户
的请求。把我看到的和知道的整理出来。
对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象中,例如Action的映射信息存放在ActionMapping对象中。(struts的配置文件struts-config.xml:一个用户请求是通过ActionServlet来处理和转发的。那么,ActionServlet如何决定把用户请求转发给哪个Action对象呢?这就需要一些描述用户请求路径和Action映射关系的配置信息了。在Struts中,这些配置映射信息都存放在特定的XML文件struts-config.xml中。在该配置文件中,每一个Action的映射信息都通过一个<action>元素来配置。这些配置信息在系统启动的时候被读入内存,供Struts在运行期间使用。在内存中,每一个<Action>元素都对应一个org.apache.struts.aciton.ActionMapping的实例)
/**********************
用户通过客户端向服务器发出一个请求,而我们已经在web.xml配置了所有符合某某格式的请求都将由指定的Servlet来处理。比如说:只要是以.do结尾的请求(*.do)都由org.apache.struts.action.ActionServlet来对其进行处理。而ActionServlet和ActionMapping都已经在服务器启动的时候被加载到内存里面。
结合登录例子:
当用户登录时,地址栏的URL为:http://localhost:8080/struts_login/login.do
ActionServlet会拿到用户的请求,并且去分析这个URL,它会截下/login(不包含.do)这一部分,截来之后,它的目的是为了去struts-config.xml这个配置文件里面找<action>标签path属性的值等于所截部分的那个Action。找到之后,ActionServlet会把表单提交的数据给存放到ActionForm上,那ActionServlet又是怎么找到ActionForm的呢?因为Action标签里面有一个属性是name,它的值就是所要找的ActionForm的名字,这样ActionServlet会去上面的<form-beans>标签里面找<form-bean>(注意不是<form-beans>)标签里面的name属性的值是与Action标签里面的name的值相等的<form-bean>,然后根据<form-bean>里面type属性的值,也就是所指的对象new一个实例,再把表单上相应的数据set进去。同时把<action>标签里面的东西放到继承Action类的那个指定类(本例子用的是LoginAction)的public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
这个方法里面参数mapping里面去,放好之后,再去调用我们自己写的类(LoginAction),并把mapping,form,request,response作为参数传到execute方法里面去。
至于如何转向的问题:这是由Struts完成的,只要你的execute能返回一个ActionForward对象,并且里面包含有转向的信息,Struts就会根据参数(mapping.findForward("success")里面的"success")去找相应配置文件(struts-config.xml)里面的相应标签(<forward name="success" path="/login_success.jsp"></forward>),然后再由Struts框架决定转向谁。由于上面已经说过,整个转向的相关信息已经存放在mapping里面,所以mapping.findForward("success")能够找到相应的标签。
*/--这部是我自己增加的,其余都是出自《精通Struts基于MVC的Java.Web设计与开发》
当ActionServlet接收到一个客户请求时,将执行如下流程:
(1) 检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。
(2) 如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
(3) 根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。
(4) 如果ActionForm的validate()方法返回null返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。
(5) ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action。如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。
(6) Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。
(7) ActionForward对象指向的JSP组件生成动态网页,返回给客户。
对于以上流程的流程(4),如果ActionForm的validate()方法返回一个包含一个或多个ActionMessage的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含用户提交表单的JSP组件。在这种情况下,不会再创建Action对象并调用Action的execute()方法。
最后旧的谈一谈struts1与struts2的区别了:
首先:struts1是通过servlet启动的。
一、struts1要求Action类继承一个抽象基类,而不是接口。
struts2的action类可以实现一个action接口,也可以实现其他接口。
二、sturts1 action是单例模式,线程是不安全的。
struts2 action线程是安全的,action为每一个请求都生成了一个实例。
三、sturts1过去依赖serlet API,不容易测试。
struts2不依赖于容器,允许Action脱离容器单独被测试。
四、Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。
Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
五、Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).
六、Struts 1使用标准JSP机制把对象绑定到页面中来访问。
Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。
七、Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。
Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。
八、Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。
Struts2支持通过validate方法和XWork校验框架来进行校验。
九、Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
分享到:
相关推荐
下面是对 SSH 框架中 Struts2 部分的知识点总结: 一、Struts2 框架的特点 1. Struts2 是一个轻量级的 web 层框架,主要用于 MVC 模式的开发。 2. Struts2 的最大优点是将请求和展现分离开,提高了系统的灵活性...
总结来说,SSH面试题涵盖的内容广泛,包括MVC设计模式的理解,Struts1和Struts2的对比,SSH框架在项目中的作用,以及Struts实现国际化的方法等。这些知识点体现了Java Web开发中的核心技术和最佳实践。
总结,SSH2个人博客系统是一个集成了Struts2、Hibernate和Spring的综合案例,适合学习者深入了解Java Web开发流程,掌握MVC模式,ORM映射,以及如何在不同数据库环境下运行应用。通过实践这个项目,不仅可以提升技术...
这些信息会通过Struts2提交到服务器,然后Spring或Struts2的拦截器会处理这些请求,调用UserDao中的相关方法查询数据库,对比存储的用户信息。如果匹配成功,创建用户会话并保存用户信息,否则返回登录失败的响应。 ...
在实际项目中,我们还可能遇到一些具体问题,如国际化、权限控制、异常处理等。例如,使用Spring的ResourceBundleMessageSource处理多语言,确保资源文件路径正确;Struts2的Interceptor处理权限验证,确保逻辑正确...
当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知识能力。MVC,即模型(model)-视图(view)-控制器...SSH通常指的是Struts2做控制器(controller),spring管理各层的组件,hibernate负责持久化层。
总结来说,Java SSH SSO客户端实例是一个结合了Struts2、Spring和Hibernate框架,利用SSO技术为用户提供统一登录体验的项目。开发者通过这个实例可以学习到如何整合这些框架,以及如何实现和配置SSO服务,提升应用的...
这份“SSH面试总结”不仅涵盖了广泛的Java面试题目,还深入解析了SSH框架中的常见问题,为准备面试或提升技能的开发者提供了宝贵的资源。 **1. Action的生命周期及其验证方式** Action在Struts框架中扮演着核心...
总结来说,基于SSH的Web开发能够帮助开发者高效地构建复杂的应用程序,同时,Struts、Hibernate和Spring各司其职,共同提高了开发效率和代码质量。了解并熟练掌握SSH框架,对于任何Java EE开发者来说都是至关重要的...
名称“Struts”源自建筑和旧式飞机中使用的支撑结构,寓意其在构建Web应用中的支撑作用。 - **发展历程**: - **2000年**: Craig R. McClanahan贡献了他的JSP Model2架构Application Framework原始代码给Apache基金...
SSH框架指的是Spring、Struts2、Hibernate这三种技术的集成使用,它们共同构成了一个强大的企业级应用程序开发平台。 - **Spring**:提供了一种轻量级的IoC容器,用于管理Bean的生命周期,支持AOP编程。 - **Struts...
SSH框架整合是Java Web开发中常见的一种技术组合,它包括Struts、Spring和Hibernate三个核心组件。这些框架各自负责不同的职责,Struts处理表现层逻辑,Spring提供依赖注入和事务管理,Hibernate则负责持久层的数据...
通过对比Struts1与Struts2的工作流程,理解Hibernate中`get`和`load`方法的差异,以及掌握Java的基本数据类型和内置对象,能够帮助开发者更好地理解和应用Java Web开发技术。同时,了解Tomcat和WebSphere的基本概念...
总结来说,这篇论文详细探讨了基于J2EE架构的SSH组合框架,分析了其设计思想、技术特点以及在实际应用中的优势,为Java后端开发提供了有价值的理论指导和技术支持。通过SSH框架,开发者可以更加高效地构建可扩展、易...
本文详细介绍了基于SSH框架(Struts2 + Spring + Hibernate)设计与实现的一个网上商城购物系统的前台商品展示模块。该模块旨在通过网站展示商品信息,为用户提供便捷的购物体验。 #### 二、系统概述 本系统主要...
总结,基于JSP+SSH的图书管理系统充分利用了Java在网络编程和数据库连接上的优势,结合Struts框架,实现了高效、稳定的图书管理。通过需求分析、数据库设计、框架整合以及严格的测试,确保了系统的实用性和可靠性。
4. **SSM(Spring Boot)对比**:虽然项目标签中提及了Spring Boot,但SSH和Spring Boot是两种不同的架构方式。Spring Boot简化了Spring应用的初始搭建以及开发过程,它集成了许多默认配置,使得开发者可以快速创建...
此外,还会对比其他开发技术,如Python的Django或Flask框架,以凸显SSH在企业级开发中的优势。 4. **系统分析** 系统需求分析明确了博客系统的基本功能,包括用户注册、登录、发布博客、浏览他人博客、评论互动等...