JAVAEE Filter 過濾器設(shè)置是否緩存實(shí)例詳解
在網(wǎng)頁中,每次的客戶端訪問服務(wù)器,有部分不用重復(fù)請(qǐng)求,如有些圖片,視頻等就沒有必要每次都請(qǐng)求,這樣會(huì)讓服務(wù)器增大工作量。為了防止這樣,我們采用過濾器來設(shè)置客戶端是都緩存。
頁面的緩存與不緩存設(shè)置及html頁面中meta的作用
HTTP1.1中啟用Cache-Control 來控制頁面的緩存與否,這里介紹幾個(gè)常用的參數(shù):
no-cache,瀏覽器和緩存服務(wù)器都不應(yīng)該緩存頁面信息;
public,瀏覽器和緩存服務(wù)器都可以緩存頁面信息;
no-store,請(qǐng)求和響應(yīng)的信息都不應(yīng)該被存儲(chǔ)在對(duì)方的磁盤系統(tǒng)中;
must-revalidate,對(duì)于客戶機(jī)的每次請(qǐng)求,代理服務(wù)器必須想服務(wù)器驗(yàn)證緩存是否過時(shí);
Last-Modified只頁面的最后生成時(shí)間,GMT格式;
Expires過時(shí)期限值,GMT格式,指瀏覽器或緩存服務(wù)器在該時(shí)間點(diǎn)后必須從真正的服務(wù)器中獲取新的頁面信息;
上面兩個(gè)值在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 { // 過濾器有很多作用,這個(gè)用來設(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è)置全面一點(diǎn): //不允許瀏覽器端或緩存服務(wù)器緩存當(dāng)前頁面信息。 /* response.setHeader( "Pragma", "no-cache" ); response.setDateHeader("Expires", "-1"); response.addHeader( "Cache-Control", "no-cache" );//瀏覽器和緩存服務(wù)器都不應(yīng)該緩存頁面信息 response.addHeader( "Cache-Control", "no-store" );//請(qǐng)求和響應(yīng)的信息都不應(yīng)該被存儲(chǔ)在對(duì)方的磁盤 response.addHeader( "Cache-Control", "must-revalidate" );*///于客戶機(jī)的每次請(qǐng)求,代理服務(wù)器必須想服務(wù)器驗(yàn)證緩存是否過時(shí); } @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 { // 過濾器有很多作用,這個(gè)用來設(shè)置客戶端是否設(shè)置緩存的問題,我們這里采用response通知客戶端設(shè)置緩存 //這里設(shè)置緩存1天,以實(shí)現(xiàn)讓圖片、視頻類的資源(在過濾器當(dāng)中配置相應(yīng)的攔截路徑)要求客戶瀏覽器緩存1天) //攔截路徑在web.xml中配置 chain.doFilter(request, response);//先進(jìn)行請(qǐng)求,返回也會(huì)從過這里,返回進(jìn)行攔截 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:頁面的最后生成時(shí)間 response.setDateHeader("Expires",date.getTime()+60*60*24); //Expires:過時(shí)期限值 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ù)配置的路徑來進(jìn)行過濾。
以上所述是小編給大家介紹的JAVAEE Filter 過濾器設(shè)置是否緩存實(shí)例詳解的相關(guān)知識(shí),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
java.nio.file.WatchService?實(shí)時(shí)監(jiān)控文件變化的示例代碼
在?Java?語言中,從?JDK7?開始,新增了java.nio.file.WatchService類,用來實(shí)時(shí)監(jiān)控文件的變化,這篇文章主要介紹了java.nio.file.WatchService?實(shí)時(shí)監(jiān)控文件變化,需要的朋友可以參考下2022-05-05JDK12的新特性之CompactNumberFormat詳解
這篇文章主要介紹了JDK12的新特性之CompactNumberFormat,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Java實(shí)現(xiàn)Excel表單控件的添加與刪除
本文通過Java代碼示例介紹如何在Excel表格中添加表單控件,包括文本框、單選按鈕、復(fù)選框、組合框、微調(diào)按鈕等,以及如何刪除Excel中的指定表單控件,需要的可以參考一下2022-05-05解決Spring Boot 在localhost域奇怪的404問題(Mac book pro)
這篇文章主要介紹了解決Spring Boot 在localhost域奇怪的404問題(Mac book pro),需要的朋友可以參考下2017-09-09解析SpringBoot中@Autowire注解的實(shí)現(xiàn)原理
在開發(fā)Java項(xiàng)目時(shí),依賴注入是一種常見的實(shí)現(xiàn)方式,SpringBoot框架通過@Autowired注解來實(shí)現(xiàn)依賴注入的功能,本文將介紹SpringBoot中 Autowired注解實(shí)現(xiàn)的原理2023-06-06Java數(shù)據(jù)結(jié)構(gòu)與算法之棧(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)與算法之棧,棧是先進(jìn)后出的數(shù)據(jù)的結(jié)構(gòu),本文通過文字說明與實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),需要的朋友跟著小編一起學(xué)習(xí)吧2017-04-04