聊聊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(二)/
版权声明: 转载请注明出处(必须保留作者署名及链接)