用拦截器解决页面JSP缓存问题

相信大家有过如此困扰吧?

客户端浏览器因为缓存的原因,有时候页面是旧的。 很恼火,我相信很多人的解决方案无非就是以下两种:

1.在jsp页面meta标记no-cache

2.request中设置header

但这样做是有弊端的。显而易见,不管是按方案1还是方案2,都需要在每一个JSP页面进行类似设置。 那有没有可以只用设置一次,就可以取消客户端页面缓存的呢? 当然有!

使用strust2栏截器,对页面所有访问的action进行拦截,并且设置response的header属性,就大功告成,具体代码:

拦截器的定义及全局调用(需引用默认拦截器)

	<interceptors>
		<interceptor name="changeUrlInterceptor" class="com.main.action.AddUrlTimeFlag"></interceptor>
			<interceptor-stack name="changeUrlInterceptorStack">
			<interceptor-ref name="changeUrlInterceptor"/>
			<interceptor-ref name="defaultStack"/>
		</interceptor-stack>
	</interceptors>
	<default-interceptor-ref name="changeUrlInterceptorStack"></default-interceptor-ref>


拦截器自定义实现类AddUrlTimeFlag.java

package com.main.action;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.StrutsStatics;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

/**去掉缓存的拦截器*/
public class AddUrlTimeFlag implements Interceptor{

	public void destroy() {}

	public void init() {}

	public String intercept(ActionInvocation arg0) throws Exception {
		System.out.println("进入栏截器");
		ActionContext actionContext = arg0.getInvocationContext();
		HttpServletResponse response =(HttpServletResponse)actionContext.get(StrutsStatics.HTTP_RESPONSE);
		response.setDateHeader("expires", -1);
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Pragma", "no-cache");
		return arg0.invoke();
	}

}


一般在项目里,我们常拿拦截器判断非正常登陆、权限分配等等,不过加入去掉缓存的几行代码也不碍事,是吧?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值