1. 程式人生 > >案例一:禁止瀏覽器快取動態頁面

案例一:禁止瀏覽器快取動態頁面

禁止瀏覽器快取所有動態頁面的過濾器:

有 3 個 HTTP 響應頭欄位都可以禁止瀏覽器快取當前頁面,它們在 Servlet 中的示例程式碼如下:

  • response.setDateHeader("Expires",-1);
  • response.setHeader("Cache-Control","no-cache"); 
  • response.setHeader("Pragma","no-cache"); 

並不是所有的瀏覽器都能完全支援上面的三個響應頭,因此最好是同時使用上面的三個響應頭。

Expires資料頭:值為GMT時間值,為-1指瀏覽器不要快取頁面

Cache-Control響應頭有兩個常用值:

  • no-cache指瀏覽器不要快取當前頁面。
  • max-age:xxx指瀏覽器快取頁面xxx秒,例如"Cache-Control", "max-age=3600"

什麼資料要禁止瀏覽器快取? 

如果一些資料,實時性要求比較高, 那麼 這樣的資料就要通知瀏覽器不要快取。例如彩票網站、股票網站等等。

程式碼如下:

package blog.csdn.net.web.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 禁止快取filter
 * @author mChenys
 *
 */
public class NoCacheFilter implements Filter {

	public void init(FilterConfig filterConfig) throws ServletException {

	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 強轉request和response物件
		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		HttpServletResponse httpServletResponse = (HttpServletResponse) response;

		// 這三個頭 設定 瀏覽器 不要 快取
		httpServletResponse.setHeader("cache-control", "no-cache");
		httpServletResponse.setHeader("Pragma", "no-cache");
		httpServletResponse.setDateHeader("Expires", 0); // 設定 為 0 就表示 1970 0 點0 分0 秒

		// 放行
		chain.doFilter(httpServletRequest, httpServletResponse);
	}

	public void destroy() {

	}

}

註冊filter:

<filter>
    <filter-name>NoCacheFilter</filter-name>
    <filter-class>blog.csdn.net.web.filter.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>NoCacheFilter</filter-name>
    <!-- 這裡使用的 是 副檔名 匹配, 表示 訪問 jsp 頁面的 時候 ,這個 filter 執行 過濾  -->
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

 測試: