Struts2 零配置xml,已验证可用

该项目使用 Struts2,spring,myBatis 实现,总体感觉比springMvc,struts2有被淘汰的趋势,但更容易上手简化了配置,action配置上同springMvc不相上下,但是在项目启动时内存消耗,个人感觉要比springMvc好。
我的经验,springMvc对jdk版本好像要求比较高,启动慢,调试有点卡顿,但是ssm对应用服务器启动比较快,相对来说比较灵活。


<?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 配置 -->




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值