这段代码是有效的代码1:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException
{
((HttpServletResponse) response).setHeader("Cache-Control","no-cache");
((HttpServletResponse) response).setHeader("Pragma","no-cache");
((HttpServletResponse) response).setDateHeader ("Expires", -1);
filterChain.doFilter(request, response);
} 但写成这样就无效代码2:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException
{
filterChain.doFilter(request, response); ((HttpServletResponse) response).setHeader("Cache-Control","no-cache");
((HttpServletResponse) response).setHeader("Pragma","no-cache");
((HttpServletResponse) response).setDateHeader ("Expires", -1);
} 按照我的理解应该在“doFilter”之前处理request在“doFilter”之后处理response才符合逻辑。但实际上代码1是正确的,望专家解惑。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException
{
((HttpServletResponse) response).setHeader("Cache-Control","no-cache");
((HttpServletResponse) response).setHeader("Pragma","no-cache");
((HttpServletResponse) response).setDateHeader ("Expires", -1);
filterChain.doFilter(request, response);
} 但写成这样就无效代码2:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException
{
filterChain.doFilter(request, response); ((HttpServletResponse) response).setHeader("Cache-Control","no-cache");
((HttpServletResponse) response).setHeader("Pragma","no-cache");
((HttpServletResponse) response).setDateHeader ("Expires", -1);
} 按照我的理解应该在“doFilter”之前处理request在“doFilter”之后处理response才符合逻辑。但实际上代码1是正确的,望专家解惑。
你第2个response的都没接收到你的设置你就执行方法
而执行到下面的时候,response设置了,缺没有去执行方法((HttpServletResponse) response).set***();
这个是对 response属性进行设置
response 通过一系列操作
如果生成了什么已经成为一个结果了类似于可以理解为:已经输出到页面但实际没有
之后在设置
((HttpServletResponse) response).setHeader("Cache-Control","no-cache");
((HttpServletResponse) response).setHeader("Pragma","no-cache");
((HttpServletResponse) response).setDateHeader ("Expires", -1);
不能影响前面的response的结果
代码2将设置放在后面,response 输出流已经封装好了,当然再设置就无效了
我晕,doFilter表示都过滤完成啦,你在下面设置还有什么用
filterChain.doFilter(request, response);
调用之后,可能由于你调用了flushBuffer,或者返回页面太大了超过了Buffer的限制Tomcat已经开始将ResponseBuffer中的数据开始返回到客户端了,这样Response的头信息也已经发送回客户端了。所以在doFilter之后的setHeader已经无法再通知客户端了如果doFilter中输出内容很小,有可能成功的。