urlrewrite与struts2结合使用配置

来源:互联网 发布:ipad点菜软件免费 编辑:程序博客网 时间:2024/06/06 04:51

本文侧重在urlrewrite与struts2的结合配置时需要注意的地方,重点不在urlrewrite规则的具体配置。

如果对urlrewrite的配置想进行更深入的了解解,请查看下面链接

Java-UrlRewrite中文官方文档


下面直接进入配置说明:

1、web.xml

在配置过滤器的时候,注意配置顺序,Struts2的过滤器要配置在UrlRewriteFilter过滤器后面。

什么时候配置以下三个 ?

<dispatcher>REQUEST</dispatcher>  默认配置,即不进行任何配置是使用的方式,过滤所有的非转发请求。
<dispatcher>FORWARD</dispatcher> 对FORWARD转发的请求进行过滤,比如在代码中有使用FORWARD转发时会进行二次过滤(因为第一次请求也会被过滤)。
<dispatcher>INCLUDE</dispatcher> 与FORWARD非常类似,惟一的不同在于:利用include将HTTP请求转送给其他Servlet后,被调用的Servlet虽然可以处理这个HTTP请求,但是最后的主导权仍然是在原来的Servlet。


所以如果你需要对经过FORWARD转发后的请求URL(例如要对经过Struts2转发后的URL进行包装,Struts2是通过FORWARD将请求参数转发到具体JSP文件的)与直接请求的URL进行处理,就仿照下面配置。

<!-- URL重定向 --><filter>      <filter-name>UrlRewriteFilter</filter-name>      <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>  </filter><init-param><param-name>logLevel</param-name><param-value>sysout:DEBUG</param-value></init-param><filter-mapping>      <filter-name>UrlRewriteFilter</filter-name>  <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher><dispatcher>INCLUDE</dispatcher></filter-mapping>


因为UrlReWrite默认转发方式为FORWARD,所以要想让你的Struts2过滤器拦截到UrlReWrite转发的请求,必须在filter-mapping加上<dispatcher>FORWARD</dispatcher>

例如以下配置:
<!-- STRUTS2 配置 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>*.do</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher><dispatcher>INCLUDE</dispatcher></filter-mapping>

注意:如果你有自己的权限验证filter,要想验证转发的URL是否拥有访问权限,也必须在filter-mapping加上<dispatcher>FORWARD</dispatcher>,否则你的filter将不对这进行拦截。


2、urlrewrite.xml


如果你不对urlrewrite的配置文件路径进行配置,其默认路径在WEB-INF下,与web.xml同目录

以下是一个简单示例,使用了wildcard与正则表达式进行配置,需要了解更详细具体配置方法请参考文章顶端的链接。


<?xml version="1.0" encoding="utf-8"?>  <!DOCTYPE urlrewrite      PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"      "http://tuckey.org/res/dtds/urlrewrite3.0.dtd"><urlrewrite><!-- /user/blog/main.html - /blog/blog_main.htm?user.user_name=user --><rule match-type="wildcard"><from>/*/blog/main.html*</from><to type="forward">/blog/blog_main.htm?user.user_name=$1</to></rule><!-- blog --><outbound-rule><from>/([a-zA-Z]+)/blog/blog_main.htm</from><to>/$1/blog/main.html</to></outbound-rule></urlrewrite>

如果还有什么配置上的疑问可以进行留言评论哦 ~