Struts2核心工作流程

来源:互联网 发布:日本旅游花费 知乎 编辑:程序博客网 时间:2024/06/05 05:00

一.Struts2是什么?
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.

二.常见WEB层框架
Struts2
Struts1
Webwork
SpringMVC

三.使用Struts2的优点
1.提高效率
2.struts2框架将web中很多功能都封装了,我们之前很多需要自己来完成的事情,struts2就帮我们代劳了.
3.优秀的架构,可扩展性,aop,mvc思想

四.Struts2能做什么?
1.处理乱码
2.接受参数
3.转发|重定向(常用)
4.校验
5.异常处理机制
6.标签

五.struts2与struts1
struts1和struts2 架构是不同的.甚至可以说是完全不同的框架.
struts2标签库(相比struts1的标签库,struts2是大大加强了,对数据的操作功能很强大)

六.搭建Struts2框架
1.官网下载Struts2开发包
https://struts.apache.org/ (好像最近访问不了)

2.解压后的目录结构
这里写图片描述

apps:该文件夹用于存放官方提供的Struts2示例程序,这些程序可以作为学习者的学习资料,可以提供很好的参照.各示例都为war文件,可以通过zip方式进行解压.
docs:该文件夹用于存放官方提供的Struts2文档,包括Struts2的快速入门,Struts2的文档,以及API文档等内容.
lib:该文件夹用于存放身Struts2的核心类库,以及Struts2的第三方插件类库.
src:该文件夹用于存放该版本Struts2框架对应的源代码.

3.创建一个web工程引入相关的jar包
这里写图片描述
可以使用apps中的例子中的jar包
这里写图片描述

4.书写Action类
这里写图片描述

5.配置struts2主配置文件
这里写图片描述

6.配置过滤器
这里写图片描述

7.访问测试
测试结果

七.Struts2架构
Struts2架构图

这里写图片描述

上面绿色部分属于开发人员需要自己书写的代码部分.

简单介绍Struts2架构图的工作流程:
1、客户端初始化一个指向Servlet容器(例如Tomcat,如:http:localhost:8080/struts2/hello.action)的请求;

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);

3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

5、ActionProxy通过Configuration Manager询问框架的配置文件(struts.xml),找到需要调用的Action类;

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。

FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。

八.Struts2配置文件加载顺序
这里写图片描述
对应产生文件依次如下:

init_DefaultProperties(); // [1]----  org/apache/struts2/default.propertiesinit_TraditionalXmlConfigurations(); // [2] --- struts-default.xml,struts-plugin.xml,struts.xmlinit_LegacyStrutsProperties(); // [3] --- 自定义struts.propertiesinit_CustomConfigurationProviders(); // [5]  ----- 自定义配置提供init_FilterInitParameters() ; // [6] ----- web.xmlinit_AliasStandardObjects() ; // [7] ---- Bean加载
0 0
原创粉丝点击