zoukankan      html  css  js  c++  java
  • JAVAEE之--------过滤器设置是否缓存(Filter)

    在网页中。每次的client訪问server。有部分不用反复请求。如有些图片,视频等就没有必要每次都请求,这样会让server增大工作量。为了防止这样。我们採用过滤器来设置client是都缓存。

    參考文章:点击打开链接

      HTTP1.1中启用Cache-Control 来控制页面的缓存与否。这里介绍几个经常使用的參数:

    • no-cache,浏览器和缓存server都不应该缓存页面信息;
    • public。浏览器和缓存server都能够缓存页面信息。
    • no-store。请求和响应的信息都不应该被存储在对方的磁盘系统中;
    • must-revalidate,对于客户机的每次请求,代理server必须想server验证缓存是否过时;

           Last-Modified仅仅页面的最后生成时间,GMT格式;

           Expires过时期限值。GMT格式,指浏览器或缓存server在该时间点后必须从真正的server中获取新的页面信息。

           上面两个值在JSP中设置值为字符型的GMT格式,无法生效,设置long类型才生效;

    以下是设置不缓存的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 {
    // 过滤器有非常多作用。这个用来设置client是否设置缓存的问题,我们这里採用response通知client设置不缓存
    			chain.doFilter(request, response);
    			HttpServletResponse res=(HttpServletResponse) response;
    			res.setHeader("expries", "-1");
    			res.setHeader("pragma", "no-cache");
    			res.setHeader("cache-control", "no-cache");
    			
    			/*上面的已经能够设置不缓存,可是还能够设置全面一点:
    					//不同意浏览器端或缓存server缓存当前页面信息。

    /* response.setHeader( "Pragma", "no-cache" ); response.setDateHeader("Expires", "-1"); response.addHeader( "Cache-Control", "no-cache" );//浏览器和缓存server都不应该缓存页面信息 response.addHeader( "Cache-Control", "no-store" );//请求和响应的信息都不应该被存储在对方的磁盘 response.addHeader( "Cache-Control", "must-revalidate" );*///于客户机的每次请求,代理server必须想server验证缓存是否过时。 } @Override public void init(FilterConfig arg0) throws ServletException { } }</span><span style="font-size:18px;"> </span>


    以下是设置缓存的过滤器文件

    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 {
    // 过滤器有非常多作用。这个用来设置client是否设置缓存的问题,我们这里採用response通知client设置缓存
    		//这里设置缓存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:浏览器和缓存server都能够缓存页面信息;
             		response.setHeader("Pragma", "Pragma"); //Pragma:设置页面是否缓存,为Pragma则缓存,no-cache则不缓存
    			 */
    	}
    
    	@Override
    	public void init(FilterConfig arg0) throws ServletException {
    
    	}
    
    }
    
    上面的filter文件生效须要在web.xml中配置,依据配置的路径来进行过滤。

  • 相关阅读:
    20201215王馨瑶 实验一《Python程序设计》实验报告
    20201215第十六周学习总结
    python笔记
    信导笔记
    成绩调节
    2020-2021-1 20201226 《信息安全专业导论》第十三周学习总结
    链表(补交)
    2020-2021-1 20201226 《信息安全专业导论》第十二周学习总结
    Wireshark 实践
    ssh
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7073946.html
Copyright © 2011-2022 走看看