UrlRewriteFilter--动态URL静态化

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://aumy2008.blogbus.com/logs/42495983.html

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

这样做就避免了url中出现?&之类的符号,而且页面伪静态化之后也增加了被搜索引擎找到的概率。

 

该项目主页:http://tuckey.org/urlrewrite/

 

 

使用方法:

1、下载http://tuckey.org/urlrewrite/#download,解压缩后将WEB-INF下的文件考到相应的web-inf/libweb-inf下。
2
、配置web.xml

    <filter>

       <filter-name>UrlRewriteFilter</filter-name>

       <filter-class>

           org.tuckey.web.filters.urlrewrite.UrlRewriteFilter

       </filter-class>

       <init-param>

           <param-name>logLevel</param-name>

           <param-value>WARN</param-value>

       </init-param>

    </filter>

    <filter-mapping>

       <filter-name>UrlRewriteFilter</filter-name>

       <url-pattern>/*</url-pattern>

    </filter-mapping>

根据自己的需要,将相应目录下的url转给UrlRewriteFilter来处理。
3
、配置urlwrite规则文件WEB-INF/urlrewrite.xml 

详见:http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/index.html

 

4、在Struts2中集成

web.xml里把FilterDispatcher加两个参数(REQUESTFORWARD

  <filter-mapping>

    <filter-name>struts2</filter-name>

    <url-pattern>/*</url-pattern>

    <dispatcher>REQUEST</dispatcher>

    <dispatcher>FORWARD</dispatcher>

  </filter-mapping>

 

5、配置过滤器

       一定要禁忌,过滤器的配置顺序也很重要!!!

当把UrlRewriteFilter放到字符转码过滤器前面以后就相当于字符转码过滤器无效

 

备注:按照Struts2APIfilter的顺序是
struts-cleanup filter
SiteMesh filter
FilterDispatcher

 

6、示例

第一个常用个规则就是站内的简单重写。
<rule>
  <from></from>
  <to type="forward></to>
</rule>
  <from></from>
写上你自己定义的访问地址,<to type="forward></to>就是实际的访问地址。比如我们实际的访问地址是:http://yousite.com/entity.htm ?category=user&page=2.而我们想把它重写为http://yousite.com/entity/uesr/page_2.html。这样看起来比我们实际的要好看的多。我们就应该这样的写: 
<rule>
  <from>^/(\w+)/(\w+)/page_(\d+)\.html$</from>
  <to type="forward">/$1.htm?category=$2&amp;page=$3</to>
</rule>
  
简单的介绍一下常用的正规表示式:
代码 说明
.
匹配除换行符以外的任意字符
\w
匹配字母或数字或下划线或汉字
\s
匹配任意的空白符
\d
匹配数字
\b
匹配单词的开始或结束
^
匹配字符串的开始
$
匹配字符串的结束

常用的&要用  &amp;来表示。$1,$2代表与你配置正规表达式>/(\w+)/(\w+)/相对应的参数。<to type="forward">默认的是 type="forward".
 
另一个常用的规则就是连接外部的网站。就要用到。<to type="redirect">
<rule>
     <from>^/rss/yahoo\.html$</from>
       <to type="redirect">    http://add.my.yahoo.com/rss? url=http://feed.feedsky.com/MySiteFeed
      </to>
</rule>

 

示例二

    <rule>

       <note>无参数匹配</note>

       <from>^/([_a-zA-Z]+[_0-9a-zA-Z-/]*[_0-9a-zA-Z]+)$</from>

       <to type="forward">/$1.jsp</to>

    </rule>

 

    <rule>

       <note>将所有.jsp文件映射为.html</note>

       <from>^/([_a-zA-Z]+[_0-9a-zA-Z-/]*[_0-9a-zA-Z]+).html$</from>

       <to type="forward">/$1.jsp</to>

    </rule>

 

 

供学习参考的帖子:

主题:在Java web服务器内使用url rewrite

url rewritestruts2整合

主题:Struts2小结

你可能感兴趣的:(jsp,Web,应用服务器,搜索引擎,SVN)