聊聊struts.xml配置文件-Struts(二)
上一篇写了一下struts怎么快速上手使用,下面是struts的配置文件struts.xml中一些配置的解释(●’◡’●)。
struts.xml是整个程序的工作流程的依据,该文件的根元素是<struts>,其中可以包含4个子元素,分别是:<include>、<constant>、<bean>、<package>
<include>元素
由于用struts开发一个大型的项目时,struts中的配置信息会越来越多,这样就会使配置文件的可读性和维护性变差,但使用了<include>就会解决这个问题,我们可以按照不同的功能或者模块将配置文件分割成多个配置文件。
1 | <struts> |
<constant>元素
<constant>元素用于配置一些常量信息,这些常量用于控制struts2的某些特性,相当于当他运行时,给你准备哪些功能。由于<constant>元素的常量值过多,我只列一些常用的,以下例子是<constant>元素使用的常用设置
1 | <struts> |
<bean>元素
struts2是一个可扩展的框架,核心组件都是可以配置的,当我们需要扩展或替换struts2的核心组件时,只需要提供自己的组件实现类,并部署到struts2的容器中即可。
例子:使用一个自定义的ObjectFactory替换struts2内置的ObjectFactory:
1 | <bean name="myFactory" type="com.opensymphony.xwork2.ObjectFactory" class="xiezhenyu.ObjectFactory" /> |
<package>元素
<package>元素提供了将多个Action组织为一个模块的方式,package的name在整个struts配置文件中必须是唯一的,并且一个package可以扩展自另一个package。此时改package会在本身配置的基础上加入扩展package的配置,但要注意父package必须在子package前配置。
1 | <!-- |
<package>子元素列表
子元素 | 功能 |
---|---|
default-action-ref | 配置默认的Action |
default-class-ref | 配置默认class |
default-interceptor-ref | 配置默认拦截器,对package范围内的所有Action有效 |
global-results | 配置全局结果集,对package范围内的所有Action有效 |
global-exception-mapping | 配置全局异常映射,对package范围内的所有Action有效 |
result-types | 配置定义返回结果类型 |
interceptors | 配置拦截器信息 |
action | 配置Action信息 |
<default-action-ref>
<default-action-ref>元素用于配置默认的Action,当一个Action请求在配置文件中找不到时,就会执行这个默认的Action,该元素只有一个name属性。
1 | <default-action-ref name="Error"></default-action-ref> |
<default-class-ref>
<default-class-ref>元素用户配置默认的类,在配置Action时,如果没有指定具体的class属性,系统就会使用<default-class-ref>元素中的配置。<default-class-ref>只有一个class属性。当使用<default-class-ref>元素指定了默认类后,Struts原来默认的类会被覆盖,而且默认的Action类必须包含execute()方法。
<default-interceptor-ref>
<default-interceptor-ref>元素用于配置默认类拦截器,如果package继承了“struts-default”,那么也会继承父类package的默认拦截器。
<global-result>
<global-result>元素用于配置package范围内的全局结果集。他的子元素是<result>。当一个package中多个Action都使用了一个或多个结果的时候,则将其配置在全局结果集中,增强代码的可读性和维护性。例如下面这个案列:当每个Action都返回了error的时候,全都使用这个全局结果去执行。
1 | <global-result> |
<global-exception-mapping>
<global-exception-mapping>元素用于配置全局异常映射,如果<action>元素内配置了自己的异常映射,则Action内的优先级高于此配置。他的子元素是<exception-mapping>。
1 | <global-exception-mapping> |
<result-type>
<result-type>元素用于配置自定义返回结果类型,该元素基本不用。
<interceptors>
<interceptors>元素用于配置拦截器的拦截器栈,他有两个子元素:<interceptor>和<interceptor-stack>,分别用来定义拦截器和拦截器栈。
<action>
<action>元素是比较重要的一个元素,也是我们开发中使用最多的一个元素。它有4个属性:
name:必选属性,Action的名字。
class:可选属性,Action处理类的名字。
method:可选属性,指定Action中的方法。如果没有配置该属性,所有请求都会被转发到execute()方法去处理。如果有多个请求需要分别交给不同的方法去处理,就可以使用该属性来指明。
converter:可选属性,指定Action使用的类型转换器。
method属性除了可以填固定的函数名外,还可以使用通配符的方法实现动态方法调用,使用它的前提是必须要配置<constant>元素和<global-allowed-methods>,使其能实现动态方法调用和适配所有的方法。
1
2
3
4
5
6
7
8
9
10
11
12<struts>
<!-- 让Struts支持动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="Struts" namespace="/" extends="struts-default">
<!-- 适配所有的通配符方法 -->
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="*User" class="xiezhenyu.UserAction" method="{1}User">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>如上代码所示,name属性值中的”*“就是通配符,表示所有以User结尾的亲求都会有这个Action处理;method属性值中的“{1}”是表达式,表示name属性中”*“的值,比如请求为loginUser,那么将传递给method属性,这是会调用Action中loginUser()方法。
<action>中还有以下几个子元素
<interceptor-ref>:用于配置拦截器
<exception-mapping>:用于配置异常映射
<result>:用于配置Action的结果映射,除了常规的结果映射外,也可以像method属性值一样使用表达式,实行动态结果。<result>有两个属性,name、type。name为Action类在处理完成返回的都是字符串类型的结果,这个结果作为逻辑视图存在,对应<result>元素的name属性值,然后找到与之对应的视图资源。type为指定结果的类型,其取值如下表所示。(我们只需要记住dispatcher、redirect和chain三个常用的即可,其它的略作了解)
type可取值 | 解释 |
---|---|
dispatcher | 转发,默认结果类型,对应视图为JSP界面 |
chain | 将Action和另一个Action链接起来 |
freemarker | 返回结果的对应视图为FreeMarker模板 |
HttpHeaderResult | 返回一个已配置好的HTTP头信息响应 |
redirect | 将用户重定向到一个配置好的URL |
redirectAction | 将用户重定向到一个已定义好的Action |
stream | 将原数据作为流传递会浏览器,一般用于下载 |
velocity | 返回结果的对应视图为Velocity模板 |
xslt | 呈现XML到浏览器,该XML可以通过XSL模板进行转换 |
plaintext | 返回普通文本内容 |
以上就是struts2配置文件的大部分内容。
原文作者: 谢振瑜
原文链接: https://Xiezhenyu98.github.io/2019/10/08/聊聊struts.xml配置文件-Struts(二)/
版权声明: 转载请注明出处(必须保留作者署名及链接)