偽靜態 偽靜態是相對真實靜態來講的,通常我們為了增強搜索引擎的友好面,都將文章內容生成靜態頁面,但是有的朋友為了實時的顯示一些信息。或者還想運用動態腳本解決一些問題。不能用靜態的方式來展示網站內容。但是這就損失了對搜索引擎的友好面。怎麼樣在兩者之間找個中間方法呢,這就產生了偽靜態技術。就是展示出來的 ...
偽靜態
偽靜態是相對真實靜態來講的,通常我們為了增強搜索引擎的友好面,都將文章內容生成靜態頁面,但是有的朋友為了實時的顯示一些信息。或者還想運用動態腳本解決一些問題。不能用靜態的方式來展示網站內容。但是這就損失了對搜索引擎的友好面。怎麼樣在兩者之間找個中間方法呢,這就產生了偽靜態技術。就是展示出來的是以html一類的靜態頁面形式,但其實是用JSP一類的動態腳本來處理的。
偽靜態不足之處
- 網站承受能力低:由於偽靜態是用正則判斷而不是真實地址,分別顯示哪個頁面的責任也由直接指定轉由CPU來判斷了,所以CPU占有量的上升
- 網頁打開慢:偽靜態需要讀取資料庫,還有將網址重寫額度過程
- 需要伺服器的支持:不是所有的伺服器都支持偽靜態的
不過偽靜態不大量使用還是可以接受的
Struts偽靜態的配置
第一步:需要下載偽靜態的jar包 urlrewritefilter-4.0.3.jar 官方網站:http://tuckey.org/urlrewrite/ 下載jar包放在你的lib目錄下
第二步:官網上說的很明白,在你的web.xml中添加以下的filter,過濾所有的請求
<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> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping>
解釋一下這個filter中的一些標簽含義
首先可以瞭解一下
RequestDispatcher
RequestDispatcher提供兩個方法forward和include
都表示要跳轉到其他資源,不同的是,如果使用forward跳轉則後面的response輸出則不會執行,而用include來跳轉,則include的servlet執行完後,再返回到原來的servlet執行response的輸出(如果有)
<dispatcher>元素
這個元素有四個可能的值:即REQUEST,FORWARD,INCLUDE和ERROR。可以在一個<filter-mapping>元素中加入任意數目的<dispatcher>如果沒有指定任何< dispatcher >元素,預設值是REQUEST。
請求是以(/*)的,表示所有的起高球,並且是通過request dispatcher的forward方法傳遞過來或者直接從客戶端傳遞過來的,則必須經過這個過濾器。
所以需要加上那三個dispatcher很重要,可以避免一些不必要的錯誤
第三步:在你的WEB-INF目錄下創建一個 urlrewrite.xml的文件 與web.xml同級,內容就是對請求過來的經行過濾,改變其尾碼為html
<?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"> <urlrewrite> <rule> <from>/([a-zA-Z0-9]*).html</from> <to type="forward">$1.do</to> </rule> </urlrewrite>
有些地方說需要加上他的另一半,<outbound-rule>,我感覺有這一個<rule>就夠 了 ,(.html)前面是正則表達式為了匹配你的請求地址
意思就是你在瀏覽器地址欄上輸入的地址(.html )會經過這裡轉變為(.do)的形式去執行的你的action ,還有的你的請求地址也帶有的html也會轉變為do,例如你的網頁中的<a>標簽里的地址
偽靜態可以根據自己的需求更改其中的一些內容,以適用於你的項目中
【版本聲明】本文為博主原創文章,轉載請註明出處