今天為了讓jsp上面的js檔案能使用SVN的版號做版本控制,
又為了讓同事能不用變更之前放在jsp裡面的script path,
所以想到了可以透過filter來將jsp輸出前把script path加上SVN的版號,
這樣就可以模擬出使用者每次都能讀到最新變更的Javascript
以下是簡單置換內容的Filter Sample
星期三, 5月 30, 2012
星期四, 3月 15, 2012
[Java] 實作Filter
Filter顧名思義就是過濾器,在JSP/Servlet中,Filter的功用就是在擔任Request與Response的過濾功能,當使用者的request發出至某資源時,您可以先對request作一些前置處理,例如進行身份驗證、過濾不安全的請求、監視統計請求的來源與出處等等,Filter的功能是雙向的,您也可以對JSP/Servlet的response進行過濾或進行某些處理,例如對輸出先進行壓縮、對XML的呈現進行轉換等等。
總而言之,Filter可以擔任瀏覽器與JSP/Servlet之間的一個中介處理者,一些request的前置處理動作又一些response的後置處理,都可以交由這個中介處理者來完成,當然Filter可以達到的功能,我們也可以直接撰寫在JSP/Servlet中,但如果有很多JSP/Servlet都需要相同的處理,例如某些網頁都需要統一的身份驗證方式時,與其在每一個網頁中都撰寫驗證的程式碼,我們不如直接撰寫Filter,讓它來統一進行處理。
最近在測試Web Cache的行為,發現寫在Filter裡面的header最後能在回應標頭看到你所設定的結果。 如果在一般JSP的頁面加上Meta的Tags或使用response.setHeader的方式,在回應標頭都無法看到你所設定的結果。 但二者的快取效果都是一樣的。
注意url-pattern設定成/*.jsp是錯誤的。
JSP Servlet Filter-1
總而言之,Filter可以擔任瀏覽器與JSP/Servlet之間的一個中介處理者,一些request的前置處理動作又一些response的後置處理,都可以交由這個中介處理者來完成,當然Filter可以達到的功能,我們也可以直接撰寫在JSP/Servlet中,但如果有很多JSP/Servlet都需要相同的處理,例如某些網頁都需要統一的身份驗證方式時,與其在每一個網頁中都撰寫驗證的程式碼,我們不如直接撰寫Filter,讓它來統一進行處理。
最近在測試Web Cache的行為,發現寫在Filter裡面的header最後能在回應標頭看到你所設定的結果。 如果在一般JSP的頁面加上Meta的Tags或使用response.setHeader的方式,在回應標頭都無法看到你所設定的結果。 但二者的快取效果都是一樣的。
@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//HttpServletRequest hsresq = (HttpServletRequest) request;
HttpServletResponse hsresp = (HttpServletResponse)response;
//current request server url(Don't include host and sitename)
//String currentURL = hsresq.getServletPath();
hsresp.setHeader("Pragma","no-cache");
hsresp.setHeader("Cache-Control","no-cache,no-store,must-revalidate");
//prevents caching at the proxy server
hsresp.setDateHeader("Expires", 0);
chain.doFilter(request, response);
}
在web.xml設定只對jsp的頁面進行filter,注意url-pattern設定成/*.jsp是錯誤的。
<filter>
<filter-name>JSPNoCacheFilter</filter-name>
<filter-class>filter.JSPNoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>JSPNoCacheFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
Reference:JSP Servlet Filter-1
訂閱:
意見 (Atom)