urlrewrite基本原理
jsp页面地址--> 服务器filter过滤 --> 调用urlrewrite.xml映射规则 --> 服务器响应 --> 转换成伪地址
下载地址 :http://www.java2s.com/Code/JarDownload/urlrewritefilter/urlrewritefilter-4.0.4.jar.zip
urlrewrite顾名思义,就是对URL进行重写,用户得到的全部都是经过处理后的URL地址,这样做我觉得好处有三:
一:提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多二:美化URL,去除了那些比如*.do之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的URL
三:更有利于搜索引擎的收入,通过对URL的一些优化,可以使搜索引擎更好的识别与收录网站的信息
下载的urlrewrite.jar扔到需使用此功能项目的lib目录中去
其次,在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>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- </filter-mapping>
1.urlrewrite.xml是utf-8.所以如果你要在rule上加note标签为中文的话,也一定是要utf-8
2.UrlRewriteFilter 最好是配置在web.xml的前面filter上,不然有可能对有些url转变失去作用.
3.在写rule的时,如果有多个参数时,中间的连接符号&应该是&
2.UrlRewriteFilter 最好是配置在web.xml的前面filter上,不然有可能对有些url转变失去作用.
3.在写rule的时,如果有多个参数时,中间的连接符号&应该是&
配置好web.xml后将下载的urlrewritefilter-3.2.0中的urlrewrite.xml配置文件放在WEB-INF目录下,这样在使用urlrewritefilter时它便自动到该目录下读取相关的配置了
- <rule>
- <from>/zh_CN/NewsInfo/NEWS_([0-9]+)</from>
- <to>/zh_CN/NewsInfo/view.do?method=view&id=$1</to>
- </rule>
- <outbound-rule>
- <from>/zh_CN/NewsInfo.do/?method=view&id=([0-9]+)$</from>
- <to>/zh_CN/NewsInfo/NEWS_$1</to>
- </outbound-rule>
outbound-rule结点是服务器解析后的页面URL对外表现的形式,配置与上面的大体相同
- <c:url var="news_url" value="/zh_CN/Press/view.do?method=view&id=${cur.id}&msg=Press" />
- <li>· <a href="${news_url}" mce_href="${news_url}" target="_blank" title="${cur.titleSub}">${cur.title}</a></li>
经服务器解析后,最终显示在页面中的将变成:
- <li>· <a href="/项目名/zh_CN/NewsInfo/NEWS_9999" mce_href="项目名/zh_CN/NewsInfo/NEWS_9999" target="_blank" title="${cur.titleSub}">新闻标题</a></li>
需要转化的链接不能直接写在a标签中,需要写在c:url或其他服务器需要解析的变量中,这样才能对其重新显示;
<c:url 中不能将&换成&