学习笔记之Struts2—工作原理图
本文以Struts2的官方工作原理图作为主线讲解(参考部分书籍与视频)

1.初始概念
struts2是web.xml进行配置的一个过滤器,当web项目启动的时候,这个过滤器就会生效。
2.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>zzh</display-name> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
在这个web.xml里面配置了一个名为Struts2的过滤器,过滤的路径(<url-pattern>)为*,它代表所有的东西。当用户请求时,都会经过这个过滤器,但是他只过滤与自己相关的请求,比如后缀为.action之类的,但是如果是一个.html或者.jsp,便不会处理,直接放行.
3.控制器的名称
在这个web.xml中名称为StrutsPrepareAndExecuteFilter。而在Struts工作原理图中是FilterDispatcher。这主要是版本2.1.2之前与之后的不同所致。
4.(1)解析Struts工作原理图
首先用户是通过HttpServletRequest用户请求发送过来,接着经历一系列的核心过滤器,比如ActionContextCleanUp过滤器,他不是必选的,主要用于与其他的框架(SiteMesh)进行集成。然后到FilterDispatcher,它是Struts2的一个调度中心,不过到了版本2.1.3开始,就被StrutsPrepareAndExecuteFilter取代。其主要原因是,好比我们想写一个过滤器,便会把它放在Struts过滤器的顶端。但是。当我们需要在Struts拦截之后再去写过滤器,也就是说在执行action(ActinoInvocation)之前去写过滤器,通过FilterDispatcher是做不到的。而在最新的版本StrutsPrepareAndExecuteFilter就可以做到执行Action之前添加我们自己的过滤器,它分为两种,一种是Prepare的Filter,一种是Execute的Filter。可以在准备和执行之间把自己的Filter添加进去。
当用户请求经过一系列的过滤器后,控制器调用ActionMapper,只有后缀是.action的才会到达这里。查找当前请求有没有一个指定的action,如果有则返回一个收集了Action详细信息的ActionMapping对象。StrutsPrepareAndExecuteFilter控制器接收到之后将控制权委派给ActionProxy,ActionProxy代理负责调用管理器(ConfigurationManager)去读struts.xml的配置信息来找到具体的Action类,然后再通过ActionProxy创建ActionInvocation对象。
4.(2)解析Struts工作原理图
ActionInvocation被创建之后,他在调用Action之前会依次调用所有配置的拦截器,当ActionInvocation的invoke()方法被调用时,开始执行Action配置的第一个拦截器,ActionInvocation负责跟踪执行过程的状态,并把控制权通过Intercept()方法交给合适的的拦截器。拦截器的执行过程就是递归调用invoke()实现的,在调用完所有拦截器后执行Action。接着ActionInvocation负责查找Action执行返回的结果字符串(如success,input)对应的Result。然后执行这个Result。通常情况下Result都会调用一些Template(模板)如(jsp)来呈现页面。最后,拦截器会再次被执行,顺序与Action执行之前相反,然后通过HttpServletResponse返回给web.xml中的那些过滤器。
5.小结
实际上,ActionInvocation的处理过程就是Struts2处理请求的过程.如果你觉得对你有帮助的话,请麻烦点赞或关注我,谢谢观看!
学习笔记之Struts2—工作原理图的更多相关文章
- struts2学习笔记2 -struts2的开发步骤和工作原理
struts2的开发步骤: 1.先定义一个能发送请求的页面,可以是链接,也可以是表单(form) 2.开发action类,struts2对action并没有过多的要求,只要求: a 推荐实现actio ...
- Struts2学习笔记一:工作流程与核心文件
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6807539.html 1:客户端发出请求到web服务器 2:请求经过一系列filter,最终到达Struts ...
- 【学习笔记】Struts2 类型转换
为什么需要类型转换 在基于HTTP协议的Web应用中 客户端请求的所有内容(表单中提交的内容等)都以文本编码的方式传输到服务器端但服务器端的编程语言(如Java)有着丰富的数据类型 如 int boo ...
- 学习笔记之Struts2—浅析接收参数
最近自己通过视频与相关书籍的学习,对action里面接收参数做一些总结与自己的理解. 0.0.接收参数的(主要)方法 使用Action的属性接收参数 使用DomainModel接收参数 使用Mod ...
- MFC学习笔记1---准备工作
什么是MFC MFC,全称Microsoft Foundation Classes,微软基础类库,顾名思义,是微软的攻城狮们将一些常用的基础的Windows API 函数用C++的形式封装成类,简化程 ...
- 【学习笔记】Struts2之配置处理结果
Action只是Struts2控制器的一部分,所以它不能直接生成对浏览者的响应.Action只负责生成响应的视图组件,通常是JSP页面,而Action会为JSP页面提供显示数据. Ac ...
- 【学习笔记】Struts2之一个Action包含多个控制处理逻辑
一.使用Action的动态方法调用 如果一个页面包含多个按钮,系统分别提交给Action的不同方法处理.此时可以采用DMI(Dynamic Method Invocation,动态方法调用)来 ...
- 【学习笔记】Struts2之配置文件struts.xml
在默认情况下,Struts2只自动加载类加载路径下的struts.xml.default-struts.xml和struts-plugin.xml三类文件.但是随着应用规模的增大,系统中Action数 ...
- 【学习笔记】Struts2 应用开发步骤
1.在web.xml文件中定义核心Filter来拦截用户请求. <!-- 定义Struts 2的核心Filter --> <filter> <filter-name> ...
随机推荐
- linux下mysql的root密码忘记----解决方案
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下 ...
- System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") 显示24小时制;System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")显示12小时制
this.Label6.Text = "当前时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") ...
- directshow 虚拟摄像头 实例 代码解读
directshow 虚拟摄像头 实例 代码解读 本文只介绍这个源码的大致构成以及怎么修改,因为其他的我也不会啊哈哈哈,我就是用QQ调用虚拟摄像头读取我自己的视频或者图片播放给别人让别人以为这就是实时 ...
- i++的原子性问题
一.什么是原子性 简单的可以理解为:操作是不可再分割的,比如: int i=0; 但是i++的操作是可以再分的,比如: i++ //分解后 i=i+i 上面的代码在多线程环境下取值是有问题的,比如: ...
- Coursera连接不上(视频无法播放),修改hosts文件
视频问题 如果Coursera网站连接不上,或者视频加载不出来.可以通过如下方式进行配置: 一.找到hosts文件 Windows 系统, hosts文件位于: [C:\Windows\Syste ...
- WCF配置Tcp协议
注意点: 1,<serviceMetadata httpGetEnabled="false"/> 2, <services> ...
- unity在安卓中横屏闪退
竖屏没问题,横屏闪退 配置文件的AndoridManifest.xml横竖屏设置要和UNITY设置的一致,否则就会强退 UNITY横竖屏设置
- iOS判断字母、数字串
以下为NSString类的扩展方法,分别是判断字符串是否只是包含字母.是否只包含数字.是否只包含字母和数字: //字母 - (BOOL)cdm_isOnlyLetters { NSCharacterS ...
- 第十一条理解objc_masgSend的作用
Objetive-C最基本的的东西就是它的消息机制.Objective-C运行时的最基本的东西就是 objc_msgSend, 它就是负责发送一个消息给对象的C函数. 当你写下面这样的代码时: ...
- SpringBoot与Shiro的整合(单体式项目)
1.包结构 2.jar包,配置文件,类 2.1pom.xml文件配置 <?xml version="1.0" encoding="UTF-8"?> ...