最近在看《研磨Struts 2》,做了些笔记,写在了blog上:http://www.cnblogs.com/simon-chan/p/3735993.html
也搬运到这边,虽然有点水,也希望能帮到人,自己有些不懂的,希望大家看了也能帮忙解释一下。
之前看书,笔记都是记录在云笔记上(因为实在太水,不好意思写blog)。现在感觉还是应该写在blog上,写得比较水,而且有一些不懂的地方也希望大家可以帮忙看看。之后再慢慢把以前的笔记整理上来。里面有什么不对的,希望大家可以帮忙指正。
最近在看《研磨Struts 2》,看完了架构和运行流程,下面写一写自己的理解。
Struts 2的架构
Struts 2的架构如下图(图从官网找的):
1. 橙色是Servlet Filters,过滤链,所有的请求都要经过Filter链的处理。
2. 浅蓝色是Struts Core,Struts 2的核心部分,Struts 2中已经做好的功能,在实际开发中不需要动它们。
3. 浅绿色是Interceptors,Struts 2的拦截器。Struts 2提供了很多默认的拦截器,可以完成日常开发的绝大部分工作;也可以自定义拦截器用来满足具体业务的需求。
4. 浅黄色是User Created,由开发人员创建的,包括struts.xml、Action、Template。
Struts 2的运行流程
以在Tomcat下一个简单例子为例:
1. 用户在页面上填写所要求的参数数据后,触发请求事件提交请求。Tomcat服务器会接收到这个请求,并通过URL的web上下文来选择处理这个请求Web应用。(这一块的内部流程是怎样的还不清楚,等以后有接触到再补充,如果各位有了解的麻烦解释一下,先谢谢了)
2. Web容器读取对应web工程的web.xml,在这个文件中会配置哪些格式的url(如*.action等)是由Struts 2处理的。Struts 2是使用一个过滤器作为控制器的,在web.xml中会配置好对应的Filter信息,根据这个信息就可以找到实际的类FilterDispatcher。
3. Web容器会获取FilterDispatcher这个类的实例,然后回调doFilter方法,进行真正的处理。这相当于前进到Struts 2架构图(即上文的彩图)上的第一步。 (注:FilterDispatcher作为前端控制器,是整个Struts 2的调度中心)
4. FilterDispatcher将请求转发给ActionMapper。ActionMapper负责识别当前的请求是否需要Struts 2做出处理。这相当于前进到Struts 2架构图上的第二步。
5. ActionMapper告诉FilterDispatcher,需要处理这个请求,FilterDispatcher会停止过滤链以后的部分,所以通常情况下:FilterDispatcher应该出现在过滤链的最后。然后建立一个ActionProxy对象,这个对象作为Action与xwork之间的中间层,会代理Action的运行过程。这相当于前进到Struts 2架构图的第三步。
6. ActionProxy对象刚被创建时,并不知道要运行哪个Action,它只有FilterDispatcher传过来的请求的URL,它将向ConfigurationManager询问要运行哪个Action。而ConfigurationManager是负责读取并管理struts.xml的,可以简单地理解为ConfigurationManager是struts.xml在内存中的映像。在服务器启动时,ConfigurationManager会一次性把struts.xml中所有信息读到内存,并缓存起来,以保证ActionProxy拿着URL来询问时可以直接匹配、查找并回答要运行哪个Action了。这就相当于前进到Struts 2架构图的第四步和第五步了。
7. ActionProxy知道要运行哪个Action、相关的拦截器以及所有可能使用到的result信息后,就建立ActionInvocation对象,用来描述Action运行的整个过程。这相当于前进到Struts 2架构图的第六步了。(注意:Action运行绝不仅仅只是运行Action的execute方法这么简单,还包括其他部分,完整的调用过程由ActionInvocation对象负责)
8. 拦截器在execute方法运行前会把参数赋值到Action属性上。拦截器的运行被分成两部分,一部分在Action之前运行,一部分在Result之后运行,而且顺序是刚好反过来的(即Action前是A、B、C,Result后就是C、B、A)。总之,ActionInvocation对象执行的时候比较复杂,会做很多事:
a. 按拦截器的引用顺序依次执行各个拦截器的前置部分,这相当于前进到Struts 2机构图上的第七步。
b. 执行Action的execute方法,这相当于前进到Struts 2架构图上的第八步。
c. 根据execute方法返回的结果,即Result,在struts.xml中匹配选择下一个页面,这相当于前进到Struts 2架构图上的第九步。
d. 找到页面后,由于现在的页面一般都是模板页面,在页面上,可以通过Struts 2自带的标签库来访问需要的数据,并生成最终页面,这相当于前进到Struts 2架构图上的第十步。
e. 按拦截器的引用顺序的倒序依次执行各个拦截器的后置部分,这相当于前进到Struts 2架构图上的第十一步。
9. ActionInvocation对象执行完毕后,实际上就已经得到响应对象了,也就是HttpServletResponse对象,最后按与过滤器配置定义相反的顺序依次经过过滤器,向用户展示响应的结果。这相当于前进到Struts 2架构图上的第十二步(最后一步)。得到了最终完整的系统架构图。如下图(标记了步骤的序号):
不大明白的地方
在上面的架构图中,在第十步到达Template后,有个箭头是到Tag Subsystem,再到ActionMapper,这里书上没有说具体做了什么,希望大家能帮忙解释一下,谢谢了!
- 大小: 64.7 KB
- 大小: 85.3 KB
分享到:
相关推荐
- **MVC 架构**:Struts2 采用经典的 MVC 架构,分为模型(Model)、视图(View) 和控制器(Controller) 三个部分。 - **模型**:主要负责处理业务逻辑和数据访问,常用 JavaBean 或 EJB 实现。 - **视图**:负责向...
Struts2是一个强大的Java web应用程序开发框架,它遵循Model-View-Controller (MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用。本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与...
学习Struts2第三天笔记
总的来说,张龙圣思园的Struts2学习笔记是全面了解和掌握Struts2框架的宝贵资源,无论你是初学者还是有经验的开发者,都能从中受益。它会帮助你深入理解Struts2的工作原理,掌握其核心特性和最佳实践,从而提升你的...
13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...
本课程笔记主要涵盖了Struts2的基础概念、核心功能及其工作流程。 首先,Struts2的处理流程是通过一系列的组件协作完成的,包括Filter Dispatcher(过滤器调度器)、Action、Interceptor(拦截器)和Result。当用户...
- **基于 Model2 设计模型**: Struts2 基于 Model2 架构模式,将业务逻辑、展示逻辑和控制逻辑分离,提高了代码的可维护性和可扩展性。 - **发展演变**: Struts2 结合了传统 Struts1 和 WebWork 两个经典框架的优点...
- **Struts2.x**:融合了Struts1.x和WebWork的优点,采用了拦截器架构,使得Action更加灵活,可以是普通的POJO(Plain Old Java Object),并且支持依赖注入,易于集成Spring等框架。 ### Struts2.x的集成与配置 ...
Struts2是一个流行的Java web框架,...以上就是"马士兵Struts2笔记2013"中涉及的主要知识点,这些内容涵盖了Struts2的基础配置、数据处理、验证、调试以及与视图层的交互等方面,对于理解和掌握Struts2框架非常有帮助。
这些库提供了Struts2框架运行所需的所有类和接口。 - **操作方法**:可以通过手动下载并放置在项目的lib目录下,或者通过构建工具如Maven自动下载和管理。 ##### 2. 复制配置文件struts.xml到项目中 Struts2的...
Struts2是一个强大的MVC...总的来说,Struts2的Namespace、标签和Action机制为Web应用提供了灵活的结构和路由控制,便于开发和维护。理解并熟练掌握这些核心概念,能帮助开发者更高效地构建基于Struts2的Java Web应用。
本笔记主要涵盖了Struts2的基础知识,包括但不限于配置、Action、拦截器、结果类型以及异常处理等内容。 1. **Struts2框架简介** Struts2是Apache软件基金会的一个开源项目,它是Struts1的升级版,弥补了Struts1在...
Struts2是一个强大的MVC(Model-View-Controller)框架,它在Java Web开发中广泛使用,提供了丰富的功能和灵活性。下面将详细讲解Struts2的一些核心知识点。 **一.Struts2核心文件:struts.xml配置** Struts2的...
这个"struts2框架2016版资料day01"涵盖了Struts2的基础知识,包括框架的基本架构、核心概念和初步配置。传智播客作为知名的IT教育机构,其课程内容通常严谨且实用,适合初学者快速入门。 1. **Struts2框架概述**:...
本笔记主要涵盖的是黑马程序员2016年推出的Struts2教程的前3天内容,虽然没有提供源代码,但依然能为我们提供丰富的理论知识和实践指导。 一、Struts2框架概述 Struts2是Apache软件基金会的开源项目,它是Struts1的...
学习Struts2第四天笔记
### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...
本笔记将深入探讨Struts2的核心概念、执行流程、类型转换、输入验证和国际化等方面。 **一、Struts2框架基础** Struts2是Apache软件基金会的一个开源项目,它是基于拦截器的MVC框架,继承了WebWork框架的优点。...
Struts2是一个开源的Web应用程序框架,基于MVC(Model-View-Controller)架构模式。它为Java Web开发者提供了一个强大的平台来构建高度可扩展的应用程序。Struts2的核心组件包括Action、Interceptor、Result等。 ##...
`struts2`的jar文件是框架运行的基础,包含核心控制器、拦截器、结果类型和其他必要的组件。这些jar文件提供了处理请求、响应以及与其他组件交互的能力。 2. **.struts2.xml配置文件** - **全局配置**:在`struts...