Struts2
JAVA基础学完,肯定是要面临三大框架的学习的,作为初学者,了解三大框架的原理,设计目的是首要任务,只有在把握了框架的设计目的以后,才能有针对性的取学习使用框架,这里从strue2框架开始,介绍三大框架,让新手能有一个总的了解跟思维导图。
1. 什么是Struts2?
- Sruts2 是一个非常优秀的MVC框架,基于Model2 设计模型
由传统Struts1和WebWork两个经典框架发展而来 - Strust2 核心功能
(1)允许POJO(Plain Old Java Objects)对象 作为Action
(2)Action的execute 方法不再与Servlet API耦合,更易测试
(3)支持更多视图技术(JSP、FreeMarker、Velocity)
(4)基于Spring AOP思想的拦截器机制,更易扩展
(5)更强大、更易用输入校验功能
2. 定位
SSH框架系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。
Struts2作为表现层的框架设计存在,Hibernate处于数据持久层,Spring处于业务逻辑层,担任连接Struts和Hibernate桥梁的角色。系统的整个层次关系可以一目了然。
3. 技术优势
Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于client/server HTTP交换协议,The Java Servlet API揭示了java Servlet只是Java API的一个很小子集,这样我们可以在业务逻辑部分使用功能强大的Java语言进行程序设计。
二是提供了对MVC的一个清晰的实现,这一实现包含了很多参与对所以请求进行处理的关键组件,如:拦截器、OGNL表达式语言、堆栈。
因为struts2有这样目标,并且有这样的优势,所以,这是我们学习struts2的理由,下面,我们在深入剖析一下struts的工作原理。
-
ActionServlet,前端控制器
1、根据相应的规则截取Http请求的URL
2、将Http请求分发到相应的Action处理 -
ActionForm,相当于实体
1、收集表单数据,将表单数据转换成相应的数据类型
-
Action,业务层控制器
1、 取得表单数据
2、调用业务逻辑
3、返回转向信息
4.深入理解Struts2的工作过程
- 工作流程图
-
工作原理图
(1) 客户端(Client)向Action发用一个请求(Request)
(2) Container通过web.xml映射请求,并获得控制器(Controller)的名字
(3) 容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter
(4) 控制器(Controller)通过ActionMapper获得Action的信息
(5) 控制器(Controller)调用ActionProxy
(6) ActionProxy读取struts.xml文件获取action和interceptor stack的信息。
(7) ActionProxy把request请求传递给ActionInvocation
(8) ActionInvocation依次调用action和interceptor
(9) 根据action的配置信息,产生result
(10) Result信息返回给ActionInvocation
(11) 产生一个HttpServletResponse响应
(12) 产生的响应行为发送给客服端。
StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调StrutsPrepareAndExecuteFilter,那么,他们之间真正的区别目的在哪里呢,作者特地去百度了下。- StrutsDispatch和StrutsPrepareAndExecuteFilter区别
FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器.!
StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的.!
这样的改革当然是有好处的.!
为什么这么说.? 应该知道如果我们自己定义过滤器的话, 是要放在strtus2的过滤器之前的, 如果放在struts2过滤器之后,你自己的过滤器对action的过滤作用就废了,不会有效!除非你是访问jsp/html!
那我现在有需求, 我必须使用Action的环境,而又想在执行action之前拿filter做一些事, 用FilterDispatcher是做不到的.!
那么StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器.!
给你打个比喻, 现在有病人要做手术, 现在struts2要做两件事, 搭病床(环境),执行手术.! 那么打麻药的工作呢.? 不可能要病人站着打吧, 所以必须有病床的环境,打完麻药之后再动手术.! 这个比喻非常形象了.!
5.Struts2的下载和安装
http://struts.apache.org/download.cgi 去下载Struts2 最新版
-
struts2目录结构
apps 该文件夹包含了基于struts2 的示例应用,这些示例应用对于学习者是非常有用的
docs 该文件夹下包含了struts2 相关文档,包括struts2 快速入门、struts2的文档以及API文档等
lib 该文件夹下包含了Struts2框架和核心类库,以及struts2第三方插件类库
src 该文件夹下包含了Struts2框架的全部源代码
开发时没必要将lib目录下jar文件全部复制到项目中 -
Struts运行必要jar包
struts2-core-2.3.1.1.jar:Struts 2框架的核心类库
xwork-core-2.3.1.1.jar:Command模式框架,WebWork和Struts2都基于xwork
ognl-3.0.3.jar:对象图导航语言(Object Graph Navigation Language),
struts2框架通过其读写对象的属性
freemarker-2.3.18.jar:Struts 2的UI标签的模板使用FreeMarker编写
commons-logging-1.1.x.jar:ASF出品的日志包,Struts 2框架使用这个日志
包来支持Log4J和JDK 1.4+的日志记录。
commons-fileupload-1.2.2.jar: 文件上传组件,2.1.6版本后需要加入此文件
commons-io-2.0.1.jar:传文件依赖的jar包
commons-lang-2.5.jar:对java.lang包的增强
开发中为了方便导入,可以使用app/struts2-blank.war 携带jar包
6、Struts2的执行流程图
一个请求进行提交到服务器,Tomcat进行加载配置文件进行执行Struts2过滤器的拦截,访问到对应的Action类下对应的执行方法.当方法执行完后(在没有异常的情况下)将会返回一个返回集,根据Struts2的配置文件指定跳转到对应的页面或是其他Action.下图是Struts2的执行流程图.
7丶Struts2的配置文件加载顺序
Struts2的核心过滤器主要负责请求分发,将获取到的请求进行转向指定的位置,过滤器是带有生命周期的对象,Struts2核心过滤器我们从web.xml中StrutsPrepareAndExecuteFilter的配置信息开始着手走。
1、在核心过滤器StrutsPrepareAndExecuteFilter类中找到init方法,并找到init.initDispatcher()方法,进入该方法下的 dispatcher.init()方法;我们可以看到Struts2在初始化的时候按顺序进行加载的文件的顺序:
init_DefaultProperties(); // [1]
init_TraditionalXmlConfigurations(); // [2]
init_LegacyStrutsProperties(); // [3]
init_CustomConfigurationProviders(); // [5]
init_FilterInitParameters() ; // [6]
init_AliasStandardObjects() ; // [7]
上诉代码执行对应的加载配置文件的顺序:
1.init_DefaultProperties(); // [1]加载org.apache.struts2.default.properties的配置文件,配置的是Struts2的所有常量;
2.init_TraditionalXmlConfigurations(); // [2]
加载Struts-default.xml/struts-plugin.xml/struts.xml文件
作用:配置了bean,interceptor,result等。
位置:在struts的core核心jar包.
3.init_LegacyStrutsProperties(); // [3]
加载用户自定义Struts.properties文件
struts2框架中所使用的插件的配置文件
4.init_CustomConfigurationProviders(); // [5]
加载用户配置的提供对象.
5.init_FilterInitParameters() ; // [6]
加载web.xml 文件
6.init_AliasStandardObjects() ; // [7]
加载标准对象
根据上面的配置文件我们可以得出Struts 2的配置文件加载顺序,如下:
1.default.properties
2.struts-defualt.xml
3.struts-plugin.xml
4.struts.xml //配置Action以及常量
5.struts.properties //配置常量
6.web.xml //配置核心过滤器以及常量
以上转自:
https://blog.csdn.net/u011958281/article/details/74685659