struts.xml是Struts 2的核心配置文件,它主要负责管理应用中的Action映射,以及该Action包含的Result定义等。
下面我们先来看下struts.xml最简化的一个基本配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<action name="Action名称" class="Action类路径" method="方法名">
<result name="逻辑视图名称" type="结果类型">
<param name="参数名称">参数值</param>
</result>
</action>
</struts>
附注:
struts2加载配置文件的顺序:
struts-default.xml(struts2-core-2.x.x.x.jar中) -> struts-plugin.xml(各插件中) -> struts.xml(自定义)
注意:如果在多个配置中配置同一信息,则后一个配置中的配置会覆盖前面的配置。
下面对struts.xml文件中常用的元素标签进行简要的介绍:
<struts>标签
该标签是struts.xml文件的根标签,它包含以下子元素:<package>、<constant>、<include>、<bean>。如下详解:
一、 <package>标签
该标签使用包机制来解决同名action的兼容问题,该标签支持多继承,例如<package name=”test” extends=”struts-default, jfreechart-default”>相当于将<package name=”struts-default”/>下的所有的配置信息都进行了继承,这可以大大减少代码量,所以通常该标签都会继承自struts-default.xml中的struts-default包,加载系统默认的配置信息。
它包含以下子元素:<action>、<default-action-ref>、<default-class-ref>、<default-interceptor-ref>、<global-exception-mappings>、<global-results>、<interceptors>、<result-types>。
标签属性 |
是否必需 | 功能描述 |
name | 是 | 包名,作为其它包应用本包的标记 |
extends | 否 | 设置本包继承其它包,必须继承struts-defalut.xml包 |
namespace | 否 | 设置包的命名空间,更重要的是解决Action重名问题 |
abstact | 否 | 设置为抽象包 |
附注:
namespace属性详解:
<package name="wwfy" extends="struts-default">
<action name="login" class="wwfy.action.LoginAction">
<result>/success.jsp</result>
</action>
</package>
该包未指定命名空间,则采用默认的命名空间””(相当于namespace=””).
则此配置下的Action的URL为
http://localhost:8080/projectName/login.action
如果在指定路径下搜索不到action资源,就会到默认命名空间下搜索,效果同根命名空间。
eg:我们访问:
http://localhost:8080/projectName/test/login.action
,在/test的命名空间中搜索不到login的action资源,就会直接到默认命名空间中搜索。
<package name="wwfy" extends="struts-default" namespace="/user">
<action name="login" class="wwfy.action.LoginAction">
<result>/success.jsp</result>
</action>
</package>
则此配置下的Action的URL为
http://localhost:8080/projectName/user/login.action
<package name="wwfy" extends="struts-default" namespace="/">
<action name="login" class="wwfy.action.LoginAction">
<result>/success.jsp</result>
</action>
</package>
该包的命名空间为根命名空间,此时所有根路径下的Action请求都会去这个包中查找对应的资源信息。
则此配置下所有
http://localhost:8080/projectName/*.action
都会到设置为根命名空间的包中寻找资源。
说明:
namespace的搜索顺序:
自定义命名空间 -> 根命名空间 -> 默认命名空间
1. <action>标签
该标签用于配置action映射,以确定如何处理客户端请求。
它包含以下的子元素:<result>、<param>、<interceptor-ref>、<exception-mapping>。
标签属性 | 是否必须 | 功能描述 | 默认值 |
name | 是 | 请求的Action名称 | |
class | 否 | Action处理类对应具体路径 | ActionSupport |
method | 否 | 指定Action中的方法名 | execute |
converter | 否 | 指定Action使用的类型转换器 |
附注:
通配符的使用:
*表示通用的内容,{0}表示所有通配符*所表示的内容,{i}表示第i个通配符*所表示的内容。示例如下:
public class TestAction {
public String test1(){
return "result1";
}
public String test2(){
return "result2";
}
public String test3(){
return "result3";
}
}
struts.xml中配置为:
<package name="wwfy" extends="struts-default">
<action name="test*" class="wwfy.action.TestAction">
<result name="result{1}">/result{1}.jsp</result>
</action>
</package>
我们访问:
http://localhost:8080/projectName/test1.action
跳转到result1.jsp
http://localhost:8080/projectName/test2.action
跳转到result2.jsp
http://localhost:8080/projectName/test3.action
跳转到result3.jsp
1.1 <result>标签
该标签用于设置结果视图。
标签属性 | 是否必须 | 功能描述 | 默认值 |
name | 否 | 对应Action返回逻辑视图名称 | success |
type | 否 | 返回结果类型 |
dispatcher |
附注:
type属性的几个主要值:
<result type="redirect">/index.jsp?username=${username}</resul>
(2)redirectAction:重定向Action <result type="redirectAction"> //重定向某个命名空间下的action
<param name="actionName">xxx</param>
<param name="namespace">/test</param>
</result>
(3)plainText:用于显示实际视图资源的代码 <result type="plainText">
<param name="location">/index.jsp</param> //该参数指定了该逻辑视图对应的实际资源
<param name="charSet">UTF-8</param> //该参数指定了采用的编码方案
</result>
2. <interceptors>标签
通过该标签可以向Struts2框架中注册拦截器或者拦截器栈,一般多用于自定义拦截器或拦截器栈的注册
<1-- 同一包内最多只能出现一次 -->
<interceptors>
<interceptor name="拦截器名" class="拦截器类"/>
<interceptor-stack name="拦截器栈名">
<interceptor-ref name="拦截器名"/>
</interceptor-stack>
</interceptors>
3. <default-interceptor-ref>标签
该标签用来设置整个包范围内所有Action所要应用的默认拦截器信息,即该拦截器作用于该包的所有action。
<default-interceptor-ref name="mydefault" class="拦截器类"/>
<!-- 调用struts-default中的默认拦截器 -->
<default-interceptor-ref name="defaultStack"/>
注意:当为某个Action单独添加拦截器功能后,<default-interceptor-ref>中所指定的拦截器将不再对这个Action起作用.
3.1 <interceptor-ref>标签
通过该标签可以为其所在的Action添加拦截器功能。
<interceptor-ref name="拦截器名"/>
4. <global-results> 标签
该标签用来标识包范围内的全局结果集,即用于共享结果集。示例如下:
<package name="userPackage" namespace="/user" extends="struts-default">
<!-- 全局result配置,当返回的视图是input或error时,自动跳转到指定该视图 -->
<global-results>
<result name="error">/error.jsp</result>
<result name="noSession">/login.jsp</result>
</global-results>
<!-- 当action中配置有与全局结果视图相同的result时,action中的result视图覆盖全局result视图。 -->
<action name="login" class="action.UserAction" method="login">
<result name="success">/index.jsp</result>
<result name="error">/loginError.jsp</result>
</action>
<!-- 注意:<global-results>标签必须配置在所有<action>标签前面,否则编译出错Unable to load configuration -- >
</package>
测试访问:
http://localhost:8080/projectName/user/login.action/
测试结果:
跳转到loginError.jsp视图。
<package name="xxx" extends="struts-default">
<global-results>
<result name="message">/login.jsp</result>
</global-results>
</package>
<package name="xxxx" namespace="test" extends="xxx">
<action name="login" class="action.LoginAction" method="login">
</action>
</package>
访问:
http://localhost:8080/projectName/test/login.action/
5. <default-action-ref>标签
该标签用于配置当系统找不到指定action时调用的默认action。默认情况下,系统找不到指定action会抛出404异常。示例如下:
<package name="userPackage" namespace="/user" extends="struts-default">
<!-- 在查找不到指定的action时跳转到该默认action -->
<default-action-ref name="unKnown"/>
<!-- 默认action的跳转视图,使用default-action-ref标签来指向它 -->
<action name="unKnown">
<result>/unKnownAction.jsp</result>
</action>
<!-- 注意:<default-action-ref>标签必须配置在所有<action>标签前面,否则编译出错Unable to load configuration -- >
</package>
测试访问:
http://localhost:8080/projectName/user/login.action
//login.action并未定义声明。
测试结果:
跳转到了unKnowAction.jsp界面
6. <default-class-ref>标签
该标签用于配置当没有为某个action指定具体的class时,调用该标签指定的默认类。
<package name="userPackage" namespace="/user" extends="struts-default">
<!-- 默认类关联 -->
<default-class-ref class="action.UserAction"/>
<!-- 未配置类action -->
<action name="login" method="login">
<result name="success">/index.jsp</result>
</action>
</package>
测试访问:http://localhost:8080/projectName/user/login.action
测试结果:跳转到了index.jsp视图。
7. <global-exception-mappings>标签
该标签用于配置全局(包范围)的异常视图映射。它只有一个子元素:<exception-mapping>,通常需要两个搭配使用。
7.1 <exception-mapping>标签
该标签用于配置action范围的异常视图映射。
<package name="default" extends="struts-default">
<global-exception-mappings>
<exception-mapping result="sqlexception" exception="java.sql.SQLException"/>
<exception-mapping result="unknown" exception="java.lang.Exception" />
<exception-mapping result="error" exception="java.lang.RuntimeException"/>
</global-exception-mappings>
<action name="unknown">
<result>/unKnown.jso</result>
</action>
<action name="sqlexception">
<result>/sqlException.jso</result>
</action>
</package>
8. <result-types>标签
该标签用于定义结果类型所对应的实现方式。以下是struts-default默认配置的结果类型:
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>
二、<constant>标签
该标签用来配置常量。
<!--该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开-->
<constant name="struts.action.extension" value="do,action" />
<!-- 指定Web应用的默认编码集,默认是"ISO8859-1"相当于调用 HttpServletRequest的setCharacterEncoding方法 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭,因为我们希望每次请求都获得服务器的最新响应-->
<constant name="struts.serve.static.browserCache " value="false" />
<!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 该属性设置Struts 2应用是否使用开发模式。开发模式下使用,这样可以打印出更详细的错误信息 -->
<constant name="struts.devMode" value="true" />
<!-- 默认的视图主题 -->
<constant name="struts.ui.theme" value="simple" />
<!-- 该属性指定Struts2中的action由Spring容器创建 -->
<constant name="struts.objectFactory" value="spring" />
<!-- 该属性设置Struts2是否支持动态方法调用,该属性的默认值是true -->
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<!-- 该属性设置Struts2是否允许在Action名中使用斜线,该属性的默认值是false -->
<constant name="struts.enable.SlashesInActionNames" value="true" />
<!-- 该属性指定是否允许在Struts2标签中使用表达式语法,该属性的默认值是true。 -->
<constant name="struts.tag.altSyntax" value="true" />
<!-- 该属性指定Struts 2框架默认加载的配置文件,如果需要指定默认加载多个配置文件,则多个配置文件的文件名之间以英文逗号(,)隔开。该属性的默认值为struts- default.xml,struts-plugin.xml,struts.xml-->
<constant name="struts.configuration.files" value="struts- default.xml,struts-plugin.xml,struts.xml" />
<!--上传文件的大小限制,默认的情况下struts2是不接收的也就是说struts2不接收超过他默认大小限制的文件
注:上传文件的大小不是单文件的大小而是上传文件总数的大小-->
<constant name="struts.multipart.maxSize" value="10701096"/>
<!--设置上传的临时文件保存目录,默认值是javax.servlet.context.tempdir -->
<constant name="struts.multipart.saveDir" value="d:/"></constant>
<!--该属性指定处理multipart/form-data的MIME类型(文件上传)请求的框架,该属性支持cos、pell和jakarta等属性值,即分别对应使用cos的文件上传框架、pell上传及common-fileupload文件上传框架。该属性的默认值为jakarta. -->
<constant name="struts.multipart.parser" value="jakarta"></constant>
附注:
struts2加载常量的搜索顺序:
struts-default.xml –> struts-plugin.xml –> struts.xml –> struts.properties –> web.xml
注意:如果在多个配置中定义了同一常量,则后一个配置中的常量值会覆盖前面配置的常量值。
三、<include>标签
该标签主要用来将一个struts.xml配置文件分割成多个配置文件,方便阅读和管理。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="user.xml"/>
<include file="goods.xml"/>
</struts>
四、<bean>标签