在SSH项目中使用org.tuckey的urlrewritefilter-4.0.4包,部分代码如下:

    1.mvn依赖:

    <dependency>       
       <groupId>org.tuckey</groupId>
       <artifactId>urlrewritefilter</artifactId>
       <version>4.0.4</version>
    </dependency>

    2.web.xml配置:

  <filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>

  </filter>
  <filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>*.html</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>

    3.struts.xml配置

    <!--指定Struts2的 对象池创建工厂由spring负责创建 -->
    <constant name="struts.objectFactory" value="spring" />
    <!--匹配*.s2的请求都由struts处理 -->
    <constant name="struts.action.extension" value="s2" />
    <!--该属性设置Struts2是否支持动态方法调用,该属性的默认值为true。如果需要关闭动态方法调用,则可设置该为false -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
    <constant name="struts.devMode" value="false"/>
    <!-- struts配置文件改动后,是否重新加载 -->
    <constant name="struts.configuration.xml.reload" value="false"/>
    <!-- 设置在class被修改时是否热加载,,默认值为false(生产环境下使用),开发阶段最好打开(不会报500错误),发布时要设置为false -->
    <constant name="struts.convention.classes.reload" value="false" />
    <!-- 浏览器是否缓存静态内容。当应用处于开发阶段时,希望每次请求都获得服务器的最新响应,则可设置该属性为false -->
    <constant name="struts.serve.static.browserCache" value="false" />
    <!-- 是否每次HTTP请求到达时,系统都重新加载资源文件。默认值是false。在开发阶段设置为true会更有利于开发,但在产品发布阶段设置为false -->
    <constant name="struts.i18n.reload" value="false" />
    <!--解决乱码 -->
    <constant name="struts.i18n.encoding" value="utf-8"></constant>
    <!--文件上传临时保存文件夹 -->
    <constant name="struts.multipart.saveDir" value="D:\Java\"></constant>
    <!--文件上传大小限制   1G左右-->
    <constant name="struts.multipart.maxSize" value="1048576000" />
    <!-- Actin类名路径分割Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。然后将将每个分部的首字母转为小写,用’_’分割 -->
    <constant name="struts.convention.action.name.separator" value="_" />
    
    <package name="backPackage" namespace="/back" extends="struts-default">
        <!-- 注册自定义拦截器 -->
        <interceptors>
            <interceptor name="backPrivilege" class="backPrivilegeInterceptor" />
            <!-- 配制默许的拦截器到拦截器栈 -->
            <interceptor-stack name="backInterceptorStack">
                <interceptor-ref name="backPrivilege" />
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
        </interceptors>
        <!-- 配置默认的拦截器-->
        <default-interceptor-ref name="backInterceptorStack" /> 
        <!-- 定义全局Result -->
        <global-results>
            <result name="blogin">/WEB-INF/pages/back/user/login.jsp</result>
            <result name="noqx">/WEB-INF/pages/error/noqx.jsp</result>
            <result name="404">/WEB-INF/pages/error/404.jsp</result>
            <result name="500">/WEB-INF/pages/error/500.jsp</result>
        </global-results>
        <!-- 定义全局异常映射 -->
        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="500" />
        </global-exception-mappings>
        
        <!-- 后台列表页,默认ActionSupport类,返回"success" -->
        <action name="ui-*-*">
             <result>/WEB-INF/pages/back/{1}/{2}.jsp</result>
        </action>
    </package>

    4. urlrewrite.xml配置

   <!--后台首页 -->
   <rule>
     <from>/bindex.html</from>
     <to type="redirect">/back/index.html</to>
   </rule>
   <rule>
     <from>/back.html</from>
     <to type="redirect">/back/index.html</to>
   </rule>
   <rule>
     <from>/bb/back.html</from>
     <to type="redirect">/back/index.html</to>
   </rule>
   <rule>
     <from>/back/index.html</from>
     <to>/back/bi!index_bl.s2</to>
   </rule>

那么现在问题来了,当我访问/bindex.html和/back.html都是没有问题的,但是当我直接访问/back/index.html和/bb/back.html的时候就会报404错误,不知道问题出在什么地方?还请各位帮我看下,谢谢了。