JAVAEE之--------過濾器設定是否緩衝(Filter)

來源:互聯網
上載者:User

JAVAEE之--------過濾器設定是否緩衝(Filter)

在網頁中,每次的Client Access Server,有部分不用重複請求,如有些圖片,視頻等就沒有必要每次都請求,這樣會讓伺服器增大工作量。為了防止這樣,我們採用過濾器來設定用戶端是都緩衝。

HTTP1.1中啟用Cache-Control 來控制頁面的緩衝與否,這裡介紹幾個常用的參數:

  • no-cache,瀏覽器和快取服務器都不應該快取頁面面資訊;
  • public,瀏覽器和快取服務器都可以快取頁面面資訊;
  • no-store,請求和響應的資訊都不應該被儲存在對方的磁碟系統中;
  • must-revalidate,對於客戶機的每次請求,Proxy 伺服器必須想伺服器驗證緩衝是否過時;

    Last-Modified只頁面的最後產生時間,GMT格式;

    Expires過時期限值,GMT格式,指瀏覽器或快取服務器在該時間點後必須從真正的伺服器中擷取新的頁面資訊;

    上面兩個值在JSP中設定值為字元型的GMT格式,無法生效,設定long類型才生效;

    下面是設定不緩衝的filter代碼:

     

    package cn.hncu.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;public class CacheFilter implements Filter {@Overridepublic void destroy() {}
    @Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// 過濾器有很多作用,這個用來設定用戶端是否設定緩衝的問題,我們這裡採用response通知用戶端設定不緩衝chain.doFilter(request, response);HttpServletResponse res=(HttpServletResponse) response;res.setHeader("expries", "-1");res.setHeader("pragma", "no-cache");res.setHeader("cache-control", "no-cache");/*上面的已經可以設定不緩衝,但是還可以設定全面一點://不允許瀏覽器端或快取服務器緩衝當前頁面資訊。      /* response.setHeader( "Pragma", "no-cache" );            response.setDateHeader("Expires", "-1");            response.addHeader( "Cache-Control", "no-cache" );//瀏覽器和快取服務器都不應該快取頁面面資訊         response.addHeader( "Cache-Control", "no-store" );//請求和響應的資訊都不應該被儲存在對方的磁碟                 response.addHeader( "Cache-Control", "must-revalidate" );*///於客戶機的每次請求,Proxy 伺服器必須想伺服器驗證緩衝是否過時;}@Overridepublic void init(FilterConfig arg0) throws ServletException {}}

     

     

    下面是設定緩衝的過濾器檔案

     

    package cn.hncu.filter;import java.io.IOException;import java.util.Date;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.HttpServletResponse;public class CacheFilter2 implements Filter {@Overridepublic void destroy() {}@Override
    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// 過濾器有很多作用,這個用來設定用戶端是否設定緩衝的問題,我們這裡採用response通知用戶端設定緩衝//這裡設定緩衝1天,以實現讓圖片、視頻類的資源(在過濾器當中配置相應的攔截路徑)要求客戶瀏覽器緩衝1天)//攔截路徑在web.xml中配置chain.doFilter(request, response);//先進行請求,返回也會從過這裡,返回進行攔截HttpServletResponse res=(HttpServletResponse) response;Date d =new Date();Long time=d.getTime()+60*60*24;//res.setHeader("expries", ""+time);//這樣就設定緩衝一天res.setDateHeader("expries", time);//和上面一句一樣 /* *  Date date = new Date();             response.setDateHeader("Last-Modified",date.getTime()); //Last-Modified:頁面的最後產生時間          response.setDateHeader("Expires",date.getTime()+60*60*24); //Expires:過時期限值         response.setHeader("Cache-Control", "public"); //Cache-Control來控制頁面的緩衝與否,public:瀏覽器和快取服務器都可以快取頁面面資訊;         response.setHeader("Pragma", "Pragma"); //Pragma:設定頁面是否緩衝,為Pragma則緩衝,no-cache則不緩衝 */}
    @Overridepublic void init(FilterConfig arg0) throws ServletException {}}
    上面的filter檔案生效需要在web.xml中配置,根據配置的路徑來進行過濾。

     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.