JAVAEE Filter 过滤器设置是否缓存实例详解

网友投稿 276 2023-07-17


JAVAEE Filter 过滤器设置是否缓存实例详解

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

页面的缓存与不缓存设置及html页面中meta的作用

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

no-cache,浏览器和缓存服务器都不应该缓存页面信息;

public,浏览器和缓存服务器都可以缓存页面信息;

no-store,请求和响应的信息都不应该被存储在对方的磁盘系统中;

must-revalidate,对于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时;

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 {

@Ovhttp://erride

public void destroy() {

}

@Override

public 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" );*///于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时;

}

@Override

public void init(FilterConfig arg0) throws ServletException {

}

}

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

package cn.hncu.filter;

import java.io.IOException;

import java.util.Date;

import javax.servlet.Filter;

import jhttp://avax.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 {

// 过滤器有很多作用,这个用来设置客户端是否设置缓存的问题,我们这里采用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则不缓存

*/

}

@Override

public void init(FilterConfig arg0) throws ServletException {

}

需要注意:上面的filter文件生效需要在web.xml中配置,根据配置的路径来进行过滤。

以上所述是给大家介绍的JAVAEE Filter 过滤器设置是否缓存实例详解的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详细分析Java中String、StringBuffer、StringBuilder类的性能
下一篇:详解JavaEE使用过滤器实现登录(用户自动登录 安全登录 取消自动登录黑用户禁止登录)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~