您的位置:首页 > Web前端 > JavaScript

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

2013-01-26 16:42 309 查看
相信大家有过如此困扰吧?

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

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();
}

}


一般在项目里,我们常拿拦截器判断非正常登陆、权限分配等等,不过加入去掉缓存的几行代码也不碍事,是吧?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: