JAVAEE Filter 過濾器設(shè)置是否緩存實例詳解
在網(wǎng)頁中,每次的客戶端訪問服務(wù)器,有部分不用重復(fù)請求,如有些圖片,視頻等就沒有必要每次都請求,這樣會讓服務(wù)器增大工作量。為了防止這樣,我們采用過濾器來設(shè)置客戶端是都緩存。
頁面的緩存與不緩存設(shè)置及html頁面中meta的作用
HTTP1.1中啟用Cache-Control 來控制頁面的緩存與否,這里介紹幾個常用的參數(shù):
no-cache,瀏覽器和緩存服務(wù)器都不應(yīng)該緩存頁面信息;
public,瀏覽器和緩存服務(wù)器都可以緩存頁面信息;
no-store,請求和響應(yīng)的信息都不應(yīng)該被存儲在對方的磁盤系統(tǒng)中;
must-revalidate,對于客戶機的每次請求,代理服務(wù)器必須想服務(wù)器驗證緩存是否過時;
Last-Modified只頁面的最后生成時間,GMT格式;
Expires過時期限值,GMT格式,指瀏覽器或緩存服務(wù)器在該時間點后必須從真正的服務(wù)器中獲取新的頁面信息;
上面兩個值在JSP中設(shè)置值為字符型的GMT格式,無法生效,設(shè)置long類型才生效;
下面是設(shè)置不緩存的filter代碼:
<span style="font-size:24px;">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 {
@Override
public void destroy() {
}</span>
<span style="font-size:24px;">
@Override
public void doFilter(ServletRequest request , ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 過濾器有很多作用,這個用來設(shè)置客戶端是否設(shè)置緩存的問題,我們這里采用response通知客戶端設(shè)置不緩存
chain.doFilter(request, response);
HttpServletResponse res=(HttpServletResponse) response;
res.setHeader("expries", "-1");
res.setHeader("pragma", "no-cache");
res.setHeader("cache-control", "no-cache");
/*上面的已經(jīng)可以設(shè)置不緩存,但是還可以設(shè)置全面一點:
//不允許瀏覽器端或緩存服務(wù)器緩存當前頁面信息。
/* response.setHeader( "Pragma", "no-cache" );
response.setDateHeader("Expires", "-1");
response.addHeader( "Cache-Control", "no-cache" );//瀏覽器和緩存服務(wù)器都不應(yīng)該緩存頁面信息
response.addHeader( "Cache-Control", "no-store" );//請求和響應(yīng)的信息都不應(yīng)該被存儲在對方的磁盤 response.addHeader( "Cache-Control", "must-revalidate" );*///于客戶機的每次請求,代理服務(wù)器必須想服務(wù)器驗證緩存是否過時;
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}</span><span style="font-size:18px;">
</span>
下面是設(shè)置緩存的過濾器文件
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 {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request , ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 過濾器有很多作用,這個用來設(shè)置客戶端是否設(shè)置緩存的問題,我們這里采用response通知客戶端設(shè)置緩存
//這里設(shè)置緩存1天,以實現(xiàn)讓圖片、視頻類的資源(在過濾器當中配置相應(yīng)的攔截路徑)要求客戶瀏覽器緩存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);//這樣就設(shè)置緩存一天
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:瀏覽器和緩存服務(wù)器都可以緩存頁面信息;
response.setHeader("Pragma", "Pragma"); //Pragma:設(shè)置頁面是否緩存,為Pragma則緩存,no-cache則不緩存
*/
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
需要注意:上面的filter文件生效需要在web.xml中配置,根據(jù)配置的路徑來進行過濾。
以上所述是小編給大家介紹的JAVAEE Filter 過濾器設(shè)置是否緩存實例詳解的相關(guān)知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Java使用正則表達式去除小數(shù)點后面多余的0功能示例
這篇文章主要介紹了Java使用正則表達式去除小數(shù)點后面多余的0功能,結(jié)合具體實例形式分析了java字符串正則替換相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
Springboot集成Quartz實現(xiàn)定時任務(wù)代碼實例
這篇文章主要介紹了Springboot集成Quartz實現(xiàn)定時任務(wù)代碼實例,任務(wù)是有可能并發(fā)執(zhí)行的,若Scheduler直接使用Job,就會存在對同一個Job實例并發(fā)訪問的問題,而JobDetail?&?Job方式,Scheduler都會根據(jù)JobDetail創(chuàng)建一個新的Job實例,這樣就可以規(guī)避并發(fā)訪問問題2023-09-09
SpringBoot如何啟動自動加載自定義模塊yml文件(PropertySourceFactory)
這篇文章主要介紹了SpringBoot如何啟動自動加載自定義模塊yml文件(PropertySourceFactory),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
吊打Java面試官!整理了一周的Spring面試大全(附答案)
這篇文章主要介紹了Spring面試資料(附答案)建議收藏留存,學Java的小伙伴都知道Spring是面試的必問環(huán)節(jié),看完了一天就可掌握數(shù)據(jù)結(jié)構(gòu)和算法的面試題,快來看看吧2021-08-08
Spring?Boot項目部署命令java?-jar的各種參數(shù)及作用詳解
這篇文章主要介紹了Spring?Boot項目部署命令java?-jar的各種參數(shù)及作用的相關(guān)資料,包括設(shè)置內(nèi)存大小、垃圾回收器、線程棧大小、系統(tǒng)屬性等,還介紹了SpringBoot專用參數(shù),如修改端口、指定配置文件等,需要的朋友可以參考下2025-04-04

