UrlRewriteFilter

UrlRewriteFilter是一个改写URL的Java Web过滤器,可见将动态URL静态化。适用于任何Java Web服务器(Resin,Jetty,JBoss,Tomcat,Orion等)。与其功能类似的还有Apache的mod_rewrite。

将动态URL转化为伪静态URL的好处主要有三个:

  • 便于搜索引擎收录。
  • 屏蔽url结构和参数信息,更安全。
  • 可以将冗杂的URL改写得简而美。

官网地址:http://tuckey.org/urlrewrite/

官方文档:http://tuckey.org/urlrewrite/#documentation

 

简单使用示例

1.引入jar包

A.直接将下载Jar文件并加入项目Web-INF/lib目录。

http://urlrewritefilter.googlecode.com/files/urlrewritefilter-4.0.3.jar

B.使用mavne管理依赖

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

 

2.配置WEB-INF/web.xml,加入过滤器

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    <!--<init-param>
        <param-name>confReloadCheckInterval</param-name>
        <param-value>60</param-value>
    </init-param>
    <init-param>
        <param-name>confPath</param-name>
        <param-value>/WEB-INF/urlrewrite.xml</param-value>
    </init-param>-->
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <!--<dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>-->
</filter-mapping>

 

3.在WEB-INF目录中加入重写规则的配置文件urlrewrite.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite
    PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
    "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite>
    <rule>
       <note>.../book/1234 instead of .../book.jsp?id=1234</note>
       <from>/book/([0-9]+)$</from>
       <to>/book.jsp?id=$1</to>
    </rule>
    <rule match-type="wildcard">  <!--match-type默认为regex-->
       <from>/blog/archive/**</from>
       <to type="redirect">/roller/history/$1</to><!--type默认为forward--> 
    </rule>
</urlrewrite>

根元素为urlrewrite;至少有一个rule元素;每个rule元素有且只有一对from和to元素;rule元素中可以有任意个condition/run/set元素,包含condition元素时所有条件都满足才会映射url和执行set。

每个rule的转换过程伪代码:

Pattern.compile(<from> element);
pattern.matcher(request url);
matcher.replaceAll(<to> element);
if ( <condition> elements match && matcher.find() ) {
    handle <set> elements (if any)
    execute <run> elements (if any)
    perform <to> element (if any)
}

 

更多详细配置

http://cdn.rawgit.com/paultuckey/urlrewritefilter/master/src/doc/manual/4.0/index.html#filterparams

 

posted @ 2015-11-22 23:22  XRacoon  阅读(2267)  评论(0编辑  收藏  举报