`
文鸯
  • 浏览: 305678 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Struts处理请求全过程

阅读更多

在用Struts开发的Web应用中,我们主要编写Action类来处理到来的请求,但请求到达Action之前,Struts为我们做了很多工作。
Struts使用ActionServlet统一处理所有到来的请求,每到来一个请求,它都要做很多事情,执行我们编写的Action只是其中之一,Struts处理请求的过程如下:

 

1. 选择模块
根据请求URL和应用的所有模块名(这个模块名的集合在ActionServlet的初始化时放到ServletContext里),分析出请求对应的模块名。
根据这个模块名,从ServletContext里拿到对应的模块(ModuleConfig对象),放到request作用域里。
根据这个模块里的MessageResources配置信息,从ServletContext里拿到对应的MessageResources对象,放到request作用域里。

 

2. 获得模块对应的RequestProcessor
从ServletContext里拿模块对应的RequestProcessor,如果没拿到(说明模块第一次被访问),根据模块里Controller的配置信息创建一个RequestProcessor,放到ServletContext里。

 

3. 处理multipart请求
如果请求是POST的,并且其contentType属性值为multipart/form-data,将请求包装成MultipartRequestWrapper。

 

4. 处理请求路径
将请求的URI掐头去尾,也就是将URI中的模块名和后缀名两部分去掉。如果路径为null,处理请求结束。

 

5. 处理Locale
如果Struts配置文件里controller元素的locale属性没有指定为false(默认为true),并且session里没有Locale的话,就从request里拿到Locale,放到session里。

 

6. 处理内容类型
获得Struts配置文件里controller元素的contentType属性值(默认为text/html),将response的内容类型设置为该值。

 

7. 处理no-cache headers
如果Struts配置文件里controller元素的nocache属性指定为true(默认为false),设置response的相关header属性。

 

8. 预处理
默认的,Struts在这一步没做任何事情,如果需要,可以继承RequestProcessor,重写这一步,实现条件性的确定是否继续执行后面的步骤。

 

9. 处理缓存信息
在session里找名字为Globals.MESSAGE_KEY和Globals.ERROR_KEY的ActionMessages,如果有并且已经被访问过,就从session里删除它们。

 

10. 处理ActionMapping
根据请求的路径,从模块里找ActionMapping(对应于Struts配置文件里的action元素),如果没有完全匹配路径的,就找模糊匹配的。
如果没找到,就找第一个指定unknown属性为true的。
找到后放到request里,没找到就向response发送错误信息。

 

11. 处理角色权限
针对上面拿到的ActionMapping,如果它设置了roles属性值,检查请求者是否属于这些角色。

 

12. 处理ActionForm
针对上面拿到的ActionMapping,根据它的name属性,查找对应的form-bean元素。
根据它的attribute和scope属性,在request或session里查找ActionForm,如果找到,还要对照刚才找到的form-bean元素,检查它们的类型是否匹配。
如果没找到ActionForm或检查类型不匹配,就根据form-bean元素创建新的ActionForm。
根据scope属性,把ActionForm放到request或session里。

 

13. 填充ActionForm
用请求参数填充对应的ActionForm属性。

 

14. 验证ActionForm
实际上就是调用ActionForm的validate()方法,如果validate()方法返回的ActionErrors不为空,表示没有通过验证,请求将转向到ActionMapping的input属性指定的路径。
如果出现下面的情况之一将跳过这一步:
ActionForm为null;
ActionMapping的validate属性指定为false;
当前请求由点击“取消”按钮(即<html:cancel>)产生。

 

15. 处理Forward
如果ActionMapping设置了forward属性值,请求将转向该属性指定的路径。

 

16. 处理include
如果ActionMapping设置了include属性值,请求将包含该属性指定的路径。

 

17. 获得Action对象
Action对象是ActionMapping的type属性指定类的实例。如果Action对象以前被访问过,可以直接获得该对象;如果没有被访问过,则创建新的Action对象。

 

18. 执行Action的execute()方法
这个execute()方法就是使用Struts的程序员最熟悉的那个方法。

 

19. 处理ActionForward
上面的execute()方法返回一个ActionForward对象,将请求转发或重定向到ActionForward的path属性指定的路径。

分享到:
评论

相关推荐

    集成spring struts hibernate全过程

    Struts则是经典的MVC(Model-View-Controller)框架,处理用户请求和业务逻辑;Hibernate则是一个强大的对象关系映射(ORM)工具,用于简化数据库操作。下面我们将深入探讨这三个框架的集成过程及其关键技术点。 ...

    struts2demo全注解

    在"struts2demo全注解"这个主题中,我们将深入探讨Struts2如何通过注解实现Action类的配置,以及如何封装请求参数到Map对象中。 在传统的Struts2配置中,我们通常会在`struts.xml`配置文件中定义Action、结果类型、...

    maven整合struts2全注解

    全注解配置Struts2不仅简化了开发过程,还提高了代码的可读性和可维护性。它允许开发者更专注于业务逻辑,而不是繁琐的配置。在实际项目中,我们还可以利用Struts2的注解进行更复杂的配置,如拦截器、类型转换器、...

    Struts书籍 Struts_In_Action_中文版

    这部分总结了构建登录应用的全过程,帮助读者巩固所学知识。 #### 四、配置Struts组件 **4.1 三个XML文件和一个属性文件** **4.1.1 家族的其他人员** 这部分可能介绍了除了上述提到的几个配置文件之外,还有哪些...

    struts2全套资料

    2. **Interceptor拦截器**:拦截器是Struts2的核心组件,允许开发者插入自定义的逻辑来处理请求,如日志、权限检查、事务管理等,而不影响Action的主体代码。 3. **Tiles**:Struts2可以与Tiles框架集成,实现页面...

    struts 帮助文档 全了

    3. **Action类**:在Struts中,Action类是处理用户请求的核心,每个Action对应一个特定的用户操作。它们处理请求,更新模型,并根据业务逻辑决定重定向到哪个视图。 4. **ActionForm**(Struts 1)/ **...

    Struts2.5.13 jar包(最全)

    1. **Action类**:它是业务逻辑的载体,处理用户请求并返回结果。开发者需要创建Action类,继承自Struts2提供的抽象Action类或实现Action接口,然后定义相应的execute方法。 2. **配置文件**:主要包括struts.xml或...

    Struts 在行动 (最新中文版)

    Struts的主要目标是简化开发过程,通过将业务逻辑、表示层和数据访问层分离,使开发者能够更专注于各自领域的实现。 本书首先会介绍Struts的基本概念,包括MVC设计模式以及Struts如何实现这一模式。接着,书中将...

    Struts 1 学习资料

    这样做是为了在请求处理过程中绑定用户输入的数据。 接着,我们创建`Action`类,它需要继承自`Action`接口,并重写`execute`方法。在`execute`方法中,我们处理业务逻辑,如数据验证、业务服务调用等。Action的配置...

    Struts2漏洞检查工具2018版.zip

    Struts2的核心是Action类,它负责处理HTTP请求,并通过配置文件或注解来决定如何转发请求到相应的业务逻辑。 Struts2框架的流行源于其强大的功能和丰富的插件系统,如拦截器、结果类型、动态方法调用等,这些都使得...

    struts2.2.3.zip

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它极大地简化了在Java EE平台上构建动态Web应用的过程。Struts2.2.3是Struts2框架的一个早期版本,虽然现在已经有了更新的版本,但...

    spring+hibernate+struts2整合全套扎包

    它的Action类是业务逻辑的入口,FilterDispatcher是核心拦截器,负责处理请求。Struts2还支持丰富的插件和拦截器机制,可以方便地扩展和定制功能。 整合Spring、Hibernate和Struts2,首先需要在Struts2配置中指定...

    Struts2权威指南(全).pdf

    6. **异常处理**:Struts2提供了全局的异常处理机制,可以捕获和处理Action执行过程中的异常,并根据异常类型转向不同的错误页面。 7. **插件架构**:Struts2的插件架构使其能够轻松地扩展功能,如Struts2-dojo-...

    达内struts2全套学习资料(包括练习和笔记有详尽的代码)

    Struts2是Java Web开发中一个非常重要的框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了一种结构化的解决方案,简化了Web应用的开发过程。达内的Struts2全套学习资料旨在帮助初学者快速掌握这一...

    Struts2执行原理

    总的来说,Struts2的执行原理是通过过滤器链、ActionMapper、ActionProxy、ActionInvocation以及拦截器等组件协作,实现了从接收到HTTP请求到生成响应的全过程,提供了一套灵活且可扩展的MVC框架。

    struts 全套jar包

    Struts 2是其第二代产品,提供了一种结构化的、基于Action的编程模型,它整合了多种优秀框架,如FreeMarker模板引擎、Tiles框架以及i18n国际化支持等,极大地简化了Web应用开发过程。 在描述中提到的"struts-2.3....

    Struts2Demo2

    Struts2的核心是Action类,它是处理用户请求并执行业务逻辑的中心组件。每个Action类对应一个URL,当用户通过浏览器发送请求时,Struts2框架会根据配置文件将请求映射到相应的Action。 在Struts2Demo2中,你可能会...

    Struts中文api

    本资源是Struts1.x的全中文API开发文档,对于正在学习或已经使用Struts1的开发者来说,是一份非常宝贵的参考资料。 API文档是开发者理解并熟练运用任何框架的基础,Struts1.x中文API文档详细解释了框架中的各个类、...

    struts编程思想初探

    - **Controller**:主要由Struts框架提供的`ActionServlet`和`Action`类组成,用于处理用户的请求并调用相应的模型。 #### 第三章 Struts体系结构 ##### 3.1 Framework概念 框架(Framework)是一套预先定义好的...

Global site tag (gtag.js) - Google Analytics