大部分搜索引擎都會優先考慮收錄靜態的HTML頁面,而不是動態的*.jsp、*.php頁面。但實際上絕大部分網站都是動態的,不可能全部是靜態的HTML頁面,因此互聯網上大部分網站都會考慮偽靜態——就是將*.jsp、*.php這種動態URL偽裝成靜態的HTML頁面。
預備知識,掌握Filter的使用。我就假設你們都知道Filter的使用方法了。
方法非常簡單:通過Filter攔截所有發向*.html請求,然后按某種規則將請求forward到實際的*.jsp頁面即可。下面要使用的URL Rewrite開源項目就是為這種思路提供了實現。
如何利用URL Rewrite實現網站偽靜態:
1、登錄http://code.google.com/p/urlrewritefilter/downloads/list站點下載Url Rewrite的最新版本。我下的是urlrewritefilter-4.0.3.jar
2、將下載得到的urlrewritefilter-4.0.3.jar放在你構建的項目WEB-INF下的lib文件夾中
3、在web.xml文件中配置啟用URL Rewrite Filter,在web.xml文件中增加如下配置片段(該片段放在所有的servlet標簽的以前)
<!--配置Url Rewrite的Filter -->
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<!--配置Url Rewrite的Filter攔截所有請求-->
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
上面的配置片段指定使用URL Rewrite Filter 攔截所有的用戶請求。
4、在你項目的WEB-INF路徑下增加urlrewrite.xml文件,該文件定義了偽靜態映射規則,這份偽靜態規則是基於正則表達式的。
文件內容如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite>
<rule>
<from>/userinf-(\w*).html</from>
<to type="redirect">%{context-path}/userinf.jsp?username=$1</to>
</rule>
</urlrewrite>
上面的規則文件中只定義了一個簡單的規則:所有發向/user-(\w*).html的請求都將被redirect到userinf.jsp頁面,並將(\w*)正則表達式所匹配的內容作為username參數值。根據這個偽靜態規則,我們為這個應用提供一個userinf.jsp頁面(該頁面只是我們的一個測試頁面,用戶可以自己定義自己的頁面)。代碼如下:
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<%
String user = request.getParameter("username");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><%=user%>的個人信息</title>
</head>
<body>
<%
out.println("現在時間是: "+new java.util.Date() +"<br />");
out.println("用戶名: "+user);
%>
</body>
</html>
一切准備就緒后,重啟tomcat,然后在瀏覽器地址欄輸入userinf-xxxx.html的請求地址,例如:我構建的項目名稱叫做webDemo那么我就可以輸入:http://localhost:8080/webDemo/userinf-test.html,就可以得到如下結果:
