解决浏览器缓存问题-过滤器方式

来源:互联网 发布:gta5pc男角色捏脸数据 编辑:程序博客网 时间:2024/06/08 19:26
解决浏览器缓存问题-过滤器方式
一、浏览器缓存机制:

二、具体代码实现:
a、xml部分:
<!-- 浏览器缓存解决方案过滤器 --><filter><filter-name>EmsCacheCleanFilter</filter-name><filter-class>com.snt.crm.web.filter.EmsCacheCleanFilter</filter-class></filter><filter-mapping><filter-name>EmsCacheCleanFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
b、filter过滤器部分:
package com.snt.crm.web.filter;import java.io.IOException;import java.io.PrintWriter;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.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.snt.crm.common.utils.DateUtil;/** * @description: 专门用于解决浏览器访问的缓存问题 * @category 存在302问题 * @date 2016年8月8日 下午2:09:02 */public class EmsCacheCleanFilter implements Filter{private static Logger log = LoggerFactory.getLogger(EmsCacheCleanFilter.class);private static final String STATIC_TAIL = "__xxxx_t=";public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest)request;HttpServletResponse resp = (HttpServletResponse)response;//1.获取request请求的url访问路径String reqeustURL = req.getRequestURL().toString();String queryStr = req.getQueryString();//2.通过给静态资源添加时间戳,去避免缓存问题//当访问的静态资源是以*.js,*.css,*.html结尾时才给其加上时间戳if(reqeustURL != null){if(checkURL(reqeustURL)){String newURL = null;//日期类型时间戳//String date = DateUtil.date2String(new Date(), "yyyyMMdd");//毫秒值风格时间戳String date = new Date().getTime()+"";//如果?后面有参数if(StringUtils.isNotBlank(queryStr) && queryStr.trim().indexOf(STATIC_TAIL)==-1){newURL = reqeustURL + "?" + queryStr + "&" + STATIC_TAIL + date;newURL = newURL.replaceAll("\\n\\r","");resp.setHeader("content-type", "text/application;charset=UTF-8");resp.sendRedirect(newURL);//request.getRequestDispatcher(newURL).forward(request, response);//return;}//如果?后面没有参数if(StringUtils.isBlank(queryStr)){newURL = reqeustURL + "?" + STATIC_TAIL + date;newURL = newURL.replaceAll("\\n\\r","");resp.setHeader("content-type", "text/application;charset=UTF-8");resp.sendRedirect(newURL);//request.getRequestDispatcher(newURL).forward(request, response);}}try {//只要请求url不为空放行chain.doFilter(request, response);} catch (Exception e) {log.info("[http请求出现异常,检查网络是否正常,或者再尝试一次!]--[zengwei]-[exception:]"+e);}}}/** * @description:判断url中是否包含这些后缀名 * @param url 访问的url路径 * @return */public Boolean checkURL(String url){String[] checks = {".js",".css",".html"};for (int i = 0; i < checks.length; i++) {if(url.endsWith(checks[i])){return true;}}return false;} /** * @description:解决302问题未解决) * @param * @param response */public void fixResponse(HttpServletResponse response){response.setCharacterEncoding("UTF-8");response.setHeader("content-type", "text/application;charset=UTF-8");response.setStatus(200);try {PrintWriter out = response.getWriter();out.write("<html lang='zh-CN'>"+ "<head><meta http-equiv='content-type' content='text/html;charset=UTF-8'/></head></html>");} catch (IOException e) {log.info("[浏览器或系统出现异常,请重新访问]-[zengwei]");}}public void init(FilterConfig fConfig) throws ServletException {}public void destroy() {}}


学习Java的同学注意了!!! 
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:543120397 我们一起学Java!

0 0
原创粉丝点击