读书人

URLRewriter兑现伪静态

发布时间: 2012-09-14 11:53:44 作者: rapoo

URLRewriter实现伪静态

URLREwriter组件

下载地址:http://www.chx99.cn/file/URLRewriter.rar

?

实现url重写的步骤:

首先,通过上述的网址将URLREwriter组件下载到本地,放到项目下的/WEB-INF/lib目录下

再从网上找到如下的配置文件urlrewrite.xml,如下:(放在/WEB-INF目录下)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
??????? "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">

<!--

??? Configuration file for UrlRewriteFilter
??? http://tuckey.org/urlrewrite/

-->
<urlrewrite>

??? <rule>
??????? <note>
??????????? The rule means that requests to /test/status/ will be redirected to /rewrite-status
??????????? the url will be rewritten.
??????? </note>
??????? <from>/test/status/</from>
??????? <to type="redirect">%{context-path}/rewrite-status</to>
??? </rule>


??? <outbound-rule>
??????? <note>
??????????? The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
??????????? the url /rewrite-status will be rewritten to /test/status/.

??????????? The above rule and this outbound-rule means that end users should never see the
??????????? url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks
??????????? in your pages.
??????? </note>
??????? <from>/rewrite-status</from>
??????? <to>/test/status/</to>
??? </outbound-rule>


??? <!--

??? INSTALLATION

??????? in your web.xml add...

??????? <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>

???? EXAMPLES

???? Redirect one url
??????? <rule>
??????????? <from>/some/old/page.html</from>
??????????? <to type="redirect">/very/new/page.html</to>
??????? </rule>

??? Redirect a directory
??????? <rule>
??????????? <from>/some/olddir/(.*)</from>
??????????? <to type="redirect">/very/newdir/$1</to>
??????? </rule>

??? Clean a url
??????? <rule>
??????????? <from>/products/([0-9]+)</from>
??????????? <to>/products/index.jsp?product_id=$1</to>
??????? </rule>
??? eg, /products/1234 will be passed on to /products/index.jsp?product_id=1234 without the user noticing.

??? Browser detection
??????? <rule>
??????????? <condition name="user-agent">Mozilla/[1-4]</condition>
??????????? <from>/some/page.html</from>
??????????? <to>/some/page-for-old-browsers.html</to>
??????? </rule>
??? eg, will pass the request for /some/page.html on to /some/page-for-old-browsers.html only for older
??? browsers whose user agent srtings match Mozilla/1, Mozilla/2, Mozilla/3 or Mozilla/4.

??? -->

</urlrewrite>

接下类就可以进行伪静态的实现了:

在上述的配置文件中加入下面代码:(缩减版)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
??????? "http://tuckey.org/res/dtds/urlrewrite2.6.dtd">

<!--

??? Configuration file for UrlRewriteFilter
??? http://tuckey.org/urlrewrite/

-->
<urlrewrite>

??? <rule>
??????? <note>
??????????? The rule means that requests to /test/status/ will be redirected to /rewrite-status
??????????? the url will be rewritten.
??????? </note>
??????? <from>/test/status/</from>
??????? <to type="redirect">%{context-path}/rewrite-status</to>
??? </rule>
???
??????? <rule>
??????????? <from>/student.html/([a-z]+)</from>
??????????? <to>/student.do?cmd=$1</to>
??????? </rule>
??????? <rule>
??????????? <from>/student2.html/([a-z]+)_([0-9]+)</from>
??????????? <to>/student.do?cmd=$1&id=$2</to>
??????? </rule>

????????
??? <outbound-rule>
??????? <note>
??????????? The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
??????????? the url /rewrite-status will be rewritten to /test/status/.

??????????? The above rule and this outbound-rule means that end users should never see the
??????????? url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks
??????????? in your pages.
??????? </note>
??????? <from>/rewrite-status</from>
??????? <to>/test/status/</to>
??? </outbound-rule>

</urlrewrite>

?

最后在你的项目中就可以将路径写成伪静态的样子,如:

<a href="student.html/list">查看学生列表</a>

通过urlrewrite.xml的解析

<rule>
??????????? <from>/student.html/([a-z]+)</from>
??????????? <to>/student.do?cmd=$1</to>

? </rule>

就将该路径转化为:

student.do?cmd=list????? (这是真实的请求路径)

?

?

又如:

<a href="student2.html/loadedit_2">查看学生列表</a>

通过urlrewrite.xml的解析

<rule>
??????????? <from>/student2.html/([a-z]+)_([0-9]+)</from>
??????????? <to>/student.do?cmd=$1&id=$2</to>
?</rule>

就将该路径转化为:

student.do?cmd=loadedit&id=2????? (这是真实的请求路径)

?

?

由于伪路径经常带有“/”,会将页面路径嵌套,所以建议使用绝对路径

在jsp页面上写上:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

则上面的路径可以写成:

<a href="<%=basePath%>student2.html/loadedit_2">查看学生列表</a>

?

?

?

来自:http://blog.sina.com.cn/s/blog_6145ed810100dvs2.html

读书人网 >软件架构设计

热点推荐