在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错误,不知道问题出在什么地方?还请各位帮我看下,谢谢了。
转载于:https://blog.51cto.com/dslzc921029/1742142