java實(shí)現(xiàn)URL重寫(xiě)的三種方法
[轉(zhuǎn)]java實(shí)現(xiàn)URL重寫(xiě)的三種方法2008-11-18 12:09URL重寫(xiě),其實(shí)就是把帶一大堆參數(shù)的url,變成一個(gè)看上去很規(guī)矩的url,主要目的是為了搜索引擎。舉例/viewthread.js
[轉(zhuǎn)]java實(shí)現(xiàn)URL重寫(xiě)的三種方法2008-11-18 12:09
URL重寫(xiě),其實(shí)就是把帶一大堆參數(shù)的url,變成一個(gè)看上去很規(guī)矩的url,主要目的是為了搜索引擎。
舉例
/viewthread.jsp?id=1234
/viewthread.jsp?id=1235
/viewthread.jsp?id=1236
重寫(xiě)后,可以用
/viewthread/1234.htm
/viewthread/1235.htm
/viewthread/1236.htm
我目前使用Tomcat Apache,嘗試過(guò)三種重寫(xiě)的方法
一、Tomcat的過(guò)濾器
最典型的就是用urlReweite的類(lèi)庫(kù)。如果有經(jīng)驗(yàn),自己寫(xiě)也不是很麻煩。也可以用現(xiàn)成的開(kāi)源的免費(fèi)的urlrewrite filter. http://tuckey.org/urlrewrite/下載
修改web.xml增加過(guò)濾器,然后配置個(gè)過(guò)濾的規(guī)則就可以了
web.xml修改部分
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
過(guò)濾規(guī)則
"http://tuckey.org/res/dtds/urlrewrite2.6.dtd">
二、使用Apache的mod
# 去掉這個(gè)前面的#,啟用它
LoadModule rewrite_module modules/mod_rewrite.so
# 其它的配置數(shù)據(jù)
RewriteEngine On
# 下面三行實(shí)現(xiàn)動(dòng)態(tài)解析
RewriteRule ^/viewthread/(d ).htm$ /viewthread.jsp?id=$1 [L,PT]
三、使用系統(tǒng)的404錯(cuò)誤進(jìn)行
也就是頁(yè)面沒(méi)找到的錯(cuò)誤
實(shí)例:
http://www.zuzwn.com/f29
會(huì)被自動(dòng)轉(zhuǎn)發(fā)到
http://www.zuzwn.com
因?yàn)橄到y(tǒng)并不存在f29,所以使用了404的錯(cuò)誤處理頁(yè)面來(lái)實(shí)現(xiàn)這個(gè)功能
頁(yè)面代碼如下
查看復(fù)制到剪切板打印
<@ page language="java" contentType="text/html; charset=GBK" isErrorPage="true" pageEncoding="GBK">
<
response.setStatus(HttpServletResponse.SC_OK);
String key = (String) request.getAttribute("javax.servlet.forward.servlet_path");
if (key != null) {
int index = key.lastIndexOf("/");
if (index != -1) {
key = key.substring(index 1);
if (key.startsWith("f") || key.startsWith("p")) {
try {
long id = Long.parseLong(key.substring(1));
String url = key.startsWith("f") ? "forumdisplay.jsp?fid=" : "viewthread.jsp?tid=";
>
<
return;
} catch (Exception ex) {}
}
>
<
return;
}
}
>
對(duì)不起,您請(qǐng)求的頁(yè)面沒(méi)有找到!
總結(jié)
第一種修改麻煩,但對(duì)于平穩(wěn)運(yùn)行的系統(tǒng),是個(gè)不錯(cuò)