要自動生成靜態頁面用Filter截獲jsp請求並先進行預處理自動生成Html是個不錯的主意一個很容易想到的方法是在Filter截獲Request後導向一個Servlet在這個Servlet中向本機發送一個http請求然後將響應寫入一個文件
URLConnection urlConn = URLConnectionopen(http://localhost/req);
注意要避免遞歸
另一個方法是不模擬http而是定制Response把服務器返回的JSP響應輸出到我們自己的Response中就可以將響應快速寫入Html文件然後再發送給客戶而且由於沒有http模擬請求直接讀取服務器響應速度非常快
截獲Response的關鍵便是實現一個WrappedResponse讓服務器將響應寫入我們的WrappedResponse中這類似於一個代理模式Servlet x已經提供了一個WrappedResponse類我們只需要復寫其中的一些關鍵方法即可
WrappedResponse實現了Response接口它需要一個Response作為構造函數的參數事實上這正是代理模式的應用WrappedResponse充當了代理角色它會將JSP/Servlet容器的某些方法調用進行預處理我們需要實現自己的方法
綜上用Filter實現HTML緩沖的步驟是
用Filter截獲請求如/ajsp?id=映射到對應的html文件名為/html/ajspid=htm
查找是否有/html/ajspid=htm如果有直接forward到此html結束
如果沒有實現一個WrappedResponse然後調用filterChain(request wrappedResponse)
將返回的WrappedResponse寫入文件/html/ajspid=htm然後返回響應給用戶
下一次用戶發送相同的請求時到第步就結束了
使用這個方法的好處是不用更改現有的ServletJSP頁限制是JSP頁面結果不能與Session相關需要登陸或用戶定制的頁面不能用這種方法緩沖
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20639.html