ShallowEtagHeaderFilter 清疚 2022-05-15 13:56 96阅读 0赞 ShallowEtagHeaderFilter是Spring提供的支持ETag的一个servlet Filter。他是一个纯粹的Filter,所以可以很容易与web框架集成。 ShallowEtagHeaderFilter将创建一些很弱的(shallow)Etag() The ShallowEtagHeaderFilter filter creates so-called shallow ETags (和 deep ETags相对立)。这个Filter会将JSP等的内容缓存,生成MD5的key,然后在response中作为Etage的header返回给客户端。下次客户端对相同的资源(或者说相同的url)发出请求时,客户端会将之前生成的key作为If-None-Match的值发送到server端。 Filter会客户端传来的值和服务器上的做比较,如果相同,则返回304(关于304, 请见对Http304的理解);否则,将发送新的内容到客户端。 使用方法如下: 首先将这个filter引入到系统中,和其他的,如loginFilter类似,只要在配置文件(通常为web.xml)中加入如下代码即可: <filter> <filter-name>etagFilter</filter-name> <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class> </filter> <filter-mapping> <filter-name>etagFilter</filter-name> <servlet-name>petclinic</servlet-name> </filter-mapping> Java实现的代码如下(此段代码为Filter的实现,仅供参考,不用加到系统中) ShallowEtagResponseWrapper responseWrapper = new ShallowEtagResponseWrapper(response); filterChain.doFilter(request, responseWrapper); byte[] body = responseWrapper.toByteArray(); String responseETag = generateETagHeaderValue(body); response.setHeader(HEADER_ETAG, responseETag); String requestETag = request.getHeader(HEADER_IF_NONE_MATCH); if (responseETag.equals(requestETag)) { if (logger.isTraceEnabled()) { logger.trace("ETag [" + responseETag + "] equal to If-None-Match, sending 304"); } response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); } else { if (logger.isTraceEnabled()) { logger.trace("ETag [" + responseETag + "] not equal to If-None-Match [" + requestETag + "], sending normal response"); } response.setContentLength(body.length); FileCopyUtils.copy(body, response.getOutputStream()); }
相关 Spring MVC过滤器-ShallowEtagHeaderFilter 原文地址: [http://blog.csdn.net/geloin/article/details/7445251][http_blog.csdn.net_geloin_ar ゞ 浴缸里的玫瑰/ 2022年07月15日 04:38/ 0 赞/ 151 阅读
相关 ShallowEtagHeaderFilter ShallowEtagHeaderFilter是Spring提供的支持ETag的一个servlet Filter。他是一个纯粹的Filter,所以可以很容易与web框架集成。 清疚/ 2022年05月15日 13:56/ 0 赞/ 97 阅读
还没有评论,来说两句吧...