最近做了一个项目,因为有大量的新闻页面,为了提高对搜索引擎的收录支持,所以使用了UrlRewrite
现在把做项目之前对UrlRewrite的相关学习做了一下整理,现在发上来做个记录
一:还是先把UrlRewrite下载下来吧
下载地址:下载UrlRewrite 。我下载的是urlrewritefilter-2.6.zip,最新的是urlrewritefilter-3.2.0.zip,不过这个还是测试版。
二:解压之后共有两个文件,一个是配置文件:urlrewrite.xml,另一个是jar包,新建工程,把jar包扔进去,配置文件放到WEB-INF下。
三:在web.xml中加入如下代码:
<!-- UrlRewrite start -->
<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>
<!-- UrlRewrite start -->
四:关于urlrewrite.xml的讲解
首先把我写的代码贴出来吧
<urlrewrite>
<!-- first -->
<rule>
<from>/news/([A-Za-z0-9]+)_([A-Za-z0-9]+).html$</from>
<to type="forward">/news/newslist.jsp?tid=$1&uname=$2</to>
</rule>
<!-- second -->
<rule>
<from>/news/singlenews.html</from>
<to type="forward">/news/singlenews.jsp</to>
</rule>
<!-- third -->
<rule>
<from>/testurl/([A-Za-z0-9]+)_([A-Za-z0-9]+).html$</from>
<to type="forward">/servlet/URLServlet?tid=$1&uname=$2</to>
</rule>
</urlrewrite>
rule是定义URL的伪装规则
每个rule下都包含一对标签<from />和<to />
以我写的第二个rule为例,当用户访问的路径(from中定义的)是/news/singlenews.html时,
实际上访问的是下面to映射的地址:/news/singlenews.jsp
当访问的地址带参数的时候,如第一种rule
当用户访问的路径是/news/123_hello.html的时候
实际上访问的是to中定义的/news/newslist.jsp?tid=123&uname=hello
当访问Servlet的时候,如第三种rule
用户访问的路径是/testurl/123_hello.html
实际上访问的是to中定义的/servlet/URLServlet?tid=123&uname=hello
PS:from中的访问规则通常需要用正则表达式,但是不会用的很复杂。
注意:跳转的时候,就不要写实际路径了,跳转路径要按照映射的规则写
以上面为例:想要跳转到/news/newslist.jsp?tid=123&uname=hello
需要这样写:response.sendRedirect("/news/"+123+"_"+hello+".html");
(总结完)
PS:PS:新近补充,urlrewrite在resin下部署不能出现任何的同名!~比如首页映射的是index.html,新闻的映射为news/index.html,虽然路径不同,但是在resin下仍然会出现无法找到或者抛出异常,通过测试,在tomcat下不存在这个问题。同时在resin下可能会对输入输出流有一点点影响。因为过滤的是全部url,在项目实施过程中出现了验证码无法生成的问题。同样的,在tomcat下无不良影响。
PS.PS:语文不好,不怎么会写总结,凑合着看吧