<?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>
<constant name="struts.devMode" value="false"/>
<constant name="struts.i18n.reload" value="false"/>
<constant name="struts.configuration.xml.reload" value="false"/>
<constant name="struts.convention.classes.reload" value="false" />
<constant name="struts.ui.theme" value="simple"/>
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- struts对象配置可以访问spring对象管理容器 -->
<constant name="struts.objectFactory" value="spring" />
<!-- 在JSP页面使用静态对象访问时需要打开 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<!-- 拦截带后缀action,do的访问 -->
<constant name="struts.action.extension" value="action,do"/>
<!--user!login方式为true,user_login通配符为false,零配置使用false会有问题 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<!--struts.convention零配置 -->
<constant name="struts.convention.action.mapallmatches" value="true"/>
<!-- 扫描以Controller为后缀名的类,值只有一个 -->
<constant name="struts.convention.action.suffix" value="Action"/>
<constant name="struts.convention.action.name.lowercase" value="true"/>
<!-- action跳转后视图默认所有的结果页面都存储在/WEB-INF/content 可以自定义存放位置 /WEB-INF/pages -->
<constant name="struts.convention.result.path" value="/"/>
<!-- 默认是default,要使用零配置需要配置成convention-default或者继承它 -->
<constant name="struts.convention.default.parent.package" value="crud-default" />
<!-- 指定搜寻包的路径 -->
<constant name="struts.convention.package.locators" value="controller,action" />
<!--按以上3个配置,比如为HelloWorldController。按照配置,映射的url为hello_world.jsp -->
<!-- <constant name="struts.convention.action.name.separator" value="_"/> -->
<!-- 指定搜寻包的根路径 -->
<!-- <constant name="struts.convention.package.locators.basePackage" value="com.base" /> -->
<!-- 先找jsp,否则依次查找 -->
<!-- <constant name="struts.convention.relative.result.types" value="dispatcher,freemarker,velocity"/> -->
<!-- 用于CRUD Action的parent package,继承了零配置类 -->
<package name="crud-param-default" extends="convention-default">
<!-- 基于paramsPrepareParamsStack,增加store interceptor保证actionMessage在redirect后不会丢失 -->
<interceptors>
<interceptor-stack name="crudStack">
<interceptor-ref name="store">
<param name="operationMode">AUTOMATIC</param>
</interceptor-ref>
<!-- 顾名思义,这里的paramsPrepareParamsStack调用interceptor顺序是先params然后prepare最后再params,
而defaultStack是直接prepare然后params
若Action实现Preparable接口,则Action方法需实现prepare()方法
-->
<interceptor-ref name="paramsPrepareParamsStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="crudStack" />
</package>
<package name="crud-default" extends="crud-param-default">
<!-- 访问记录加入拦截 -->
<interceptors>
<interceptor name="myRoles" class="com.builder.filter.CheckPermissions" />
<interceptor-stack name="checkUserLogin_stack">
<!-- 应用默认拦截器堆栈 一定要有 -->
<interceptor-ref name="defaultStack" />
<!-- 应用自定义拦截器 -->
<interceptor-ref name="myRoles" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="checkUserLogin_stack"/>
<global-results>
<result name="sysLogin" type="redirectAction">login</result>
</global-results>
</package>
<package name="json-filter" extends="json-default">
<!-- 访问记录加入拦截 -->
<interceptors>
<interceptor name="myRoles" class="com.builder.filter.CheckPermissions" />
<interceptor-stack name="checkUserLogin_stack">
<!-- 应用默认拦截器堆栈 一定要有 -->
<interceptor-ref name="defaultStack" />
<!-- 应用自定义拦截器 -->
<interceptor-ref name="myRoles" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="checkUserLogin_stack"/>
<global-results>
<result name="sysLogin" type="redirectAction">login</result>
</global-results>
</package>
<!--
下载附件
<action name="downLoadFile" class="downLoadFileAction">
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="inputName">inputStream</param>
使用经过转码的文件名作为下载文件名,downloadFileName属性对应action类中的方法 getDownloadFileName()
<param name="contentDisposition">
attachment;filename="${downloadFileName}"
</param>
<param name="bufferSize">1048576</param>
</result>
</action>
Actions in jar files
<constant name="struts.convention.action.includeJars" value=".*?/myjar1.*?jar(!/)?,.*?/myjar2*?jar(!/)?"
Automatic configuration reloading
<constant name="struts.devMode" value="true"/>
<constant name="struts.convention.classes.reload" value="true" />
JBoss
<constant name="struts.convention.exclude.parentClassLoader" value="true" />
<constant name="struts.convention.action.fileProtocols" value="jar,vfsfile,vfszip" />
Jetty (embedded)
<constant name="struts.convention.exclude.parentClassLoader" value="false" />
<constant name="struts.convention.action.fileProtocols" value="jar,code-source" />
Overwriting plugin classes
<bean type="org.apache.struts2.convention.ActionConfigBuilder" name="convention" class="org.apache.struts2.convention.PackageBasedActionConfigBuilder"/>
<constant name="struts.convention.actionConfigBuilder" value="convention"/>
<bean type="org.apache.struts2.convention.ActionNameBuilder" name="convention" class="org.apache.struts2.convention.SEOActionNameBuilder"/>
<constant name="struts.convention.actionNameBuilder" value="convention"/>
<bean type="org.apache.struts2.convention.ResultMapBuilder" name="convention" class="org.apache.struts2.convention.DefaultResultMapBuilder"/>
<constant name="struts.convention.resultMapBuilder" value="convention"/>
<bean type="org.apache.struts2.convention.InterceptorMapBuilder" name="convention" class="org.apache.struts2.convention.DefaultInterceptorMapBuilder"/>
<constant name="struts.convention.interceptorMapBuilder" value="convention"/>
<bean type="org.apache.struts2.convention.ConventionsService" name="convention" class="org.apache.struts2.convention.ConventionsServiceImpl"/>
<constant name="struts.convention.conventionsService" value="convention"/>
-->
</struts>
相关包参照 struts2采用convention-plugin实现零配置 http://struts.apache.org/2.1.6/docs/convention-plugin.html
注意:
在 web.xml 中需要配置<init-param> action 包根路径
<!-- struts2 配置 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.base.action,com.builder.action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- struts2 配置 -->