项目中用到urlrewrite来伪静态化url地址,故对urlrewrite进行了简单的研究应用。在此把基本配置和常见的问题记录下来,以备后用。
urlrewritefilter简介 :是一个用于改写url的web过滤器,类似于Apache的mod_rewrite,适用于任何web服务器(tomcat,jboss,jetty等),他是一个把url进行伪静态化的开源工具包,并不是真正的静态化。典型的应用就是把weburl静态化,以便于搜索引擎爬虫抓取你的页面。
引入urlrewrite的目的:
1):为了对搜索友好,因为搜索进行对动态url抓取没有对静态url高。
2):屏蔽内部url结构,使应用相对安全,提高网站的可移植性。
3):在一定成度上也对url地址有美化和从简的作用。
简单示例 :
http://www.xxx.net/user/profile.do?id=20001====>http://www.xxx.net/user/20001 http://www.xxx.net/forum/board.do?name=jav ====>http://www.xxx.net/forum/java http://www.xxx.net/forum/thread.do?id=29923 ====>http://www.xxx.net/thread/29923
urlrewritefilter基本配置步骤 :
1):下载urlrewrite包,并把他考到项目的WEB-INF/lib目录下。
注:如果项目中使用了maven,并搭建了nexus数据仓库,则可以直接通过nexus进行搜索,并选择你需要的版本,把xml配置复制到你工程的pom.xml中即可。
2):在WEB-INF目录下添加rewrite.xml文件。rewrite.xml的dtd头比较重要,如果dtd头中的版本号与实际urlrewrite包版本不匹配的话会报如下错误:
org.tuckey.web.filters.urlrewrite.Conf ERROR: Exception loading conf Connection timed out:connect java.net.ConnectException: Connection timed out: connect
3):在web.xml文件中添加urlrewritefilter过滤器:
<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>
4):在rewrite.xml文件中配置你自己的url转换规则,简单示例如下:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN" "http://tuckey.org/res/dtds/urlrewrite3.2.dtd"> <urlrewrite> <rule> <name>World Rule1</name> <note>注释1</note> <from>^/newbie</from> <to type="forward">/newbie.jsp</to> </rule> <rule> <name>World Rule2</name> <note>注释2</note> <from>^/self-service</from> <to type="forward">/self-service.jsp</to> </rule> </urlrewrite>
配置urlrewirte注意事项:
1):urlrewirte.xml文件的编码格式为utf-8,如果<note>节点中有中文,那么中文编码也必须是utf-8编码的。
2):配置web.xml的时候,urlrewritefilter过滤器必须配置在struts2的拦截器之前,否则urlrewritefilter过滤器有可能对某些url不起作用。
3):strtus2的filter-mapping一定要添加:<dispatcher>FORWARD</dispatcher>
4):在写rule的时,如果有多个参数时,中间的连接符号&应该是&
5):urlrewrite.xml标签的一些说明:
urlrewrite属性:有仅只有一个.
rule属性::至少一个
urlrewrite可能引起的错误:
1):connect java.net.ConnectException异常
org.tuckey.web.filters.urlrewrite.Conf ERROR: Exception loading conf Connection timed out:connect java.net.ConnectException: Connection timed out: connect
1-R:rewrite.xml配置文件的dtd头有问题,打开urlrewrite包,查看相应的dtd版本信息。
2):404错误:
2-R:strtus2的filter-mapping一定要添加:<dispatcher>FORWARD</dispatcher>,或者在urlrewritefilter过滤器的filter-mapping中添加相应属性,如下:
<filter> <filter-name>urlRewrite</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>urlRewrite</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping>
本文参考了网上很多朋友的相关文章,并结合自身的特点进行了简单的汇总,在此谢谢这些朋友的文章。
下面博客对urlrewrite进行了详细研究:
http://blog.csdn.net/lgg201/archive/2010/02/26/5329364.aspx