动态的URL变成静态的URL可以UrlRewriteFilter来处理

近期学习了一个url定向的小框架urlrewritefilter,希望和大家分享。

1.简介     

     UrlRewriteFilter是一个用于改写URL的Web过滤器,类似于Apache的mod_rewrite。适用于任何Web应用服务器(如Resin,Orion,Tomcat等)。其典型应用就把动态URL静态化,便于搜索引擎爬虫抓取你的动态网页。

下载地址:(jar包和原代码都有)

http://tuckey.org/urlrewrite/#download

2.相关配置:首先要将下载的jar包导入到你的项目中,然后再web.xml中写入如下配置(主要就是一个过滤器的配置):

Xml代码   收藏代码
  1. <filter>    
  2.     <filter-name>UrlRewriteFilter</filter-name>    
  3.     <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>    
  4. </filter>    
  5. <filter-mapping>    
  6.     <filter-name>UrlRewriteFilter</filter-name>    
  7.     <url-pattern>/*</url-pattern>    
  8.     <!--一下两项可以不写-->  
  9.     <dispatcher>REQUEST</dispatcher>    
  10.     <dispatcher>FORWARD</dispatcher>    
  11. </filter-mapping>    

 3.在和web.xml对等的位置建另一个名为urlrewrite.xml的xml文件

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"  
  3.         "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">  
  4.   
  5. <urlrewrite>  
  6.     <!--主要就配置两项<rule>和<outbound-rule>里面具体的内容根据不同的逻辑编写不同的内容-->  
  7.     <rule>  
  8.         <from>/2th</from>  
  9.         <to type="redirect">%{context-path}/world.jsp</to>  
  10.     </rule>  
  11.       
  12.     <rule  <span class="attribute">match-type</span><span>=</span><span class="attribute-value">"regex"</span>>  
  13.         <from>([a-z]+)/([a-z]+).html</from>  
  14.         <to type="redirect">%{context-path}/$1.jsp?country=$2</to>  
  15.     </rule>  
  16.       
  17.     <outbound-rule>  
  18.         <from>world.jsp</from>  
  19.         <to>/2th</to>  
  20.     </outbound-rule>  
  21.       
  22. </urlrewrite>  
 

配置文件规则:

urlrewirte 配置文件必须有一个urlrewrite根元素和包含至少一个rule元素 。

一个rule元素必须包含一个from 和一个to 元素,也可以包含0个以上的condition 元素和0个以上set 元素。

一个rule元素拦截用户的请求,from元素 是请求的url,to 元素是经过重写后的url 输出,下面是类似java 的重写内部实现。

 

3. 元素参数说明

<urlrewrite>元素

 

参数取值描述
default-match-typeregex(默认)、wildcard所有的rule和condition  元素都会用到该匹配方法
decode-usingheader,utf8(默认)、null、iso-8859-1 等当url 需要解码时request.getCharacterEncoding() 将被用到,如果为空,则为utf-8 
use-query-stringfalse(默认)、true语句是否加到url的后面
use-contextfalse(默认)、true上下午路径是否要加到url 中

 

 

 

 

 

 

 

 

 

 

 

 

<rule>元素

参数取值描述
enabletrue(默认)、false是否应用该rule
match-typeregex(默认)、wildcard应用那种匹配规则

 例子:

Xml代码   收藏代码
  1. <!--请求输入: /world/usa/nyc   输出为  /world.jsp   -->    
  2. <!--应用java 的正则表达式-->    
  3. <rule match-type="regex">    
  4.        <from>^/world/([a-z]+)/([a-z]+)$</from>    
  5.        <to>/world.jsp</to>    
  6.     </rule>    
  7. <!--应用wildcard表达式,该表达式后面会介绍-->    
  8.  <rule match-type="wildcard">    
  9.        <from>/world/*/*</from>    
  10.        <to>/world.jsp</to>    
  11.     </rule>  
  

wildcard 表达式匹配方法

  用wildcard 可以取代正则表达式,要使用该表达式的时候记得要在rule 元素中 把match-type 设为 wildcard ,因为默认是使用正则表达式的。

实例:

/big/url/*  匹配 /big/url/abc.html 不匹配 /big/url/abc/dir/ or /big/url/abc/

/big/url/**  匹配/big/url/abc.html/big/url/abc/dir/ 和  /big/url/abc/

 

实例:

/my/big/url/* 匹配 /my/big/url/abc.html 和$1 将被设为 abc.html



动态的URL变成静态的URL可以UrlRewriteFilter来处理

分类: STRUTS   398人阅读  评论(1)  收藏  举报

UrlRewriteFilter的介绍:
    UrlRewriteFilter是一个用于改写URL的Web过滤器,类似于Apache的mod_rewrite。适用于任何Web应用服务器(如 Resin,Orion,Tomcat等)。其典型应用就把动态URL静态化,便于搜索引擎爬虫抓取你的动态网页。 
   为什么要使动态的URL变成伪静态的URL:
   1:为了对搜索的友好,因为有些搜索不能抓取动态页面或是对动态抓取的页面没有静态页面高.
   2:屏蔽内部的url结构.
   3:美化url.
   UrlRewriteFilter使用:
     1.下载http://tuckey.org/urlrewrite/#download目前稳定的版本是2.6,最新版3.1,推荐使用2.6版.解压缩后将文件考到相应的web-inf/lib和web-inf下.
     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>/*</url-pattern> 
</filter-mapping>


     根据自己的需要,将相应目录下的url转给UrlRewriteFilter来处理。 
   3、配置urlwrite规则文件WEB-INF/urlrewrite.xml 
  http://www.5a520.cn/book/116 会直接forward 到 http://www.5a520.cn/book.php?id-116 结果都是"创世传奇之魔族风云 _玄幻小说_小说520网"这个标题.
  http://www.5a520.cn/bookxuanhuan/3  会直接forward 到 http://www.5a520.cn/cata.php?id=bookxuanhuan&index=3 结果都是"玄幻小说_小说520网"这个标题.
配置如下: 
 

<rule>
        <from>/book/([0-9]+)$</from>
        <to>/book.php?id=$1</to>
    </rule>

 <rule>
        <from>/book([a-z]+)$</from>
        <to>/cata.php?id=book$1</to>
 </rule>

 <rule>
        <from>/book([a-z]+)/([0-9]+)$</from>
        <to>/cata.php?id=book$1&amp;index=$2</to>
 </rule>


   注意:
   1.urlrewrite.xml是utf-8.所以如果你要在rule上加note标签为中文的话,也一定是要utf-8
   2.UrlRewriteFilter 最好是配置在web.xml的前面filter上,不然有可能对有些url转变失去作用.
   3.在写rule的时,如果有多个参数时,中间的连接符号&应该是&amp;

  下面对 urlrewrite.xml标签的一些说明:
  urlrewrite属性:有仅只有一个.
  rule属性::至少一个.

<name> 属性(可选) 
    <rule>
    <name>World Rule</name>
    <from>^/world/([a-z]+)/([a-z]+)$</from>
    <to>/world.jsp?country=$1&amp;city=$2</to>
    </rule>
  <note>属性(可选)
    <rule>
    <name>World Rule</name>
    <note>
        Cleanly redirect world requests to JSP,
        a country and city must be specified.
        </note>
    <from>^/world/([a-z]+)/([a-z]+)$</from>
    <to>/world.jsp?country=$1&amp;city=$2</to>
    </rule>

    <condition>属性(可选) 
    可以对时间,方法,来源,端口,类型等进行设置,如
    <condition name="user-agent" operator="notequal">Mozilla/[1-4]</condition> 客户端游览器不是Mozilla14版本以下可以访问.
   

<condition type="user-in-role" operator="notequal">bigboss</condition> 是bigboss不能访问.
    <condition name="host" operator="notequal">www.example.com</condition> 主机是www.example.com不能访问
    <condition type="method" next="or">PROPFIND</condition> 下个rule是PROPFIND可以访问
    <condition type="method">PUT</condition> 是put类型

    type属性:
    最主要就是 forward (default):在客户端URL是不转向的 redirect 在客户端URL是转向的,所以一般采用 forward
 set属性:这个有点像apache中的rewrite强大之处了.除了下面的设置client,还可以设置cookie,content-   type,charset,header,request 
   

<rule>
    <condition name="user-agent">Mozilla/3/.0 (compatible; AvantGo .*)</from>
    <from>.*</from>
    <set name="client">AvantGo</set>
    </rule>
    <rule>
    <condition name="user-agent">UP/.Browser/3.*SC03 .* </from>
    <from>.*</from>
    <set name="client">Samsung SCH-6100</set>
    </rule>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值