Struts2就是一个web层框架,并且是使用MVC设计模式实现的的一个框架,之前使用的是Serlvet+JSP来开发web项目,现在用Struts2框架来替代他,那Struts2到底有哪些优点呢?那就需要我们自己来研究它了.
请求 ———– Servlet ————– JSP serlvet+JSP
请求 ———– Action ————– JSP Struts
1.工作原理
请求在struts2框架中的处理流程大概可以分为以下几步:
- 客户端初始化一个指向servlet容器(例如Tomcat)的请求
- 该请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
- 然后FilterDispather(StrutsPrepareAndExecuteFilter)被调用,询问ActionMapper来决定这个请是否需要调用某个Action。
- 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy.
- ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 ,这里,我们一般是从struts.xml配置中读取。
- ActionProxy创建一个ActionInvocation的实例
- ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
- 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
在上述过程中所有的对象(Action,Results,Interceptors等)都是通过ObjectFactory来创建的。
2.配置文件
配置文件的名称 | 位置 | 主要内容 | 说明 |
---|---|---|---|
default.properties | struts2-core-2.3.15.3.jar/org/apache/struts2/default.properties | 一些参数配置 | 程序员不能直接修改的 |
struts-default.xml | struts2-core-2.3.15.3.jar/struts-default.xml | 一些参数配置 | 程序员不能直接修改的 |
struts.xml | 应用的classpath中 | struts的配置文件 | 程序员使用的 |
struts.properties | 应用的classpath中 | struts的参数配置文件 | 程序员使用的 |
web.xml | WEB-INF/web.xml | 应用的配置文件 | 给过滤器配置参数 |
以上配置文件在应用被启动的时候就完成了加载;而且有加载的顺序要求。后面的配置会覆盖掉前面配置文件中相同的信息。
2.1 default.properties
参数名称 | 参数的默认值 | 说明 |
---|---|---|
struts.i18n.encoding | UTF-8 | 框架使用的默认编码 |
struts.action.extension | action | 进入框架核心的uri的后缀。多个值用逗号分隔 |
struts.serve.static.browserCache | true | 告诉客户端要不要缓存静态的资源 |
struts.configuration.xml.reload | 被注释掉了:建议true | 每当xml配置文件被修改后,不需要重新加载应用就能够使配置生效。适合开发阶段 |
struts.devMode | false | 是否是开发模式。开发阶段应该设置为true |
如何修改他们的默认值呢?
struts.xml:通过该文件来进行修改1
2<!--通过constant元素覆盖掉之前配置文件参数的默认值-->
<constant name="struts.devMode" value="true" />
2.2 struts-default.xml
这个文件定义了action返回结果类型,struts的拦截器,以及一些其他默认配置。
2.3 struts.xml
- 作用:希望程序员能够按照分包的思想管理你的动作配置
属性:
- name:必须要的,给包取一个名字。唯一。
- extends:当前包需要继承的父包的名称。框架希望程序员能够用面向对象的方式管理你的包。子包能够继承父包中的所有配置。自己写的包一般情况下要继承一个name=struts-default的包(它在struts-default.xml中)
- abstract:把包声明成抽象包。没有任何
子元素的package就可以声明为抽象的包。 - namespace:名称空间。默认值是””(空字符串)。名称空间+动作名称:构成了动作的访问路径。
2.4 struts.properties
这个文件是struts2框架的全局属性文件,也是自动加载的文件。该文件包含了系列的key-value对。该文件完全可以配置在struts.xml文件中,使用constant元素。下面是这个文件中一些常见的配置项及说明。
1 | ### 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration |
2.5 web.xml
配置struts2的核心过滤器和spring的加载器。
这里针对struts2相关配置作介绍。
1 | <!-- Struts2核心过滤器 --> |