`
neptune
  • 浏览: 362100 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Spring3.0的ShallowEtagHeaderFilter,非常好呀

阅读更多
Spring3.0中的对页面的Etag支持,基于的MD5的生成,非常好,可移植到Spring2.5上

Support for ETags is provided by the servlet filter ShallowEtagHeaderFilter. It is a plain Servlet
Filter, and thus can be used in combination with any web framework. The
ShallowEtagHeaderFilter filter creates so-called shallow ETags (as opposed to deep ETags,
more about that later).The filter caches the content of the rendered JSP (or other content), generates an
MD5 hash over that, and returns that as an ETag header in the response. The next time a client sends a
request for the same resource, it uses that hash as the If-None-Match value. The filter detects this,
renders the view again, and compares the two hashes. If they are equal, a 304 is returned. This filter will
not save processing power, as the view is still rendered. The only thing it saves is bandwidth, as the
rendered response is not sent back over the wire.

<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>




		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());
		}
	
分享到:
评论
6 楼 xly_971223 2010-01-20  
要想发挥etag的作用需要自己动手实现
etag的值相当于对http response的md5(计算量相当大啊)
发送etag到浏览器后 下次请求同一个url是会带回到服务器
服务可用新生成的etag与旧etag做比较
如果相同返回304 否则返回新页面
5 楼 lixjluck 2009-11-06  
如果要提高性能,需要服务器端的程序做一些额外处理
比如生成etag,可以根据主要数据的最后修改时间来生成
每次先先只取出最后修改时间进行比较,匹配返回304,否则再取数据
4 楼 whaosoft 2009-11-06  
这是原话
As such, this filter only saves bandwidth, not server performance
3 楼 neptune 2009-11-06  
看看这个基于资源的HTTP Cache的实现介绍,基本同理,而且还解决了一些问题
2 楼 caoyangx 2009-11-06  
SSailYang 写道
是个能提高性能的好东东

不是的,官方的解释是,this filter only saves bandwidth, not server performance.
意思是这个过滤器只能节省带快,而不是服务器性能。
http://static.springsource.org/spring/docs/3.0.0.M2/javadoc-api/org/springframework/web/filter/ShallowEtagHeaderFilter.html
1 楼 SSailYang 2009-11-05  
是个能提高性能的好东东

相关推荐

    spring3.0 全部jar包

    在下载的"spring3.0 全部jar包"中,"dist"文件夹可能包含了所有Spring 3.0框架运行所需的库文件,包括核心容器、AOP、ORM、Web、Test等多个模块的jar包。这些jar文件是构建和运行Spring 3.0应用的基础,它们包含了...

    spring3.0jar包

    Spring 3.0 是一个里程碑式的版本,在Java企业级应用开发领域中占据着核心地位。这个版本的发布引入了许多新特性、改进和优化,旨在提升开发者的工作效率和应用程序的可维护性。Spring 框架以其强大的依赖注入...

    Spring 3.0就这么简单_Part3.pdf

    《Spring 3.0就这么简单》语言简洁,实例丰富,可帮助读者迅速掌握使用Spring3.0进行开发所需的各种技能。《Spring3.0就这么简单》适合于具有一定Java编程基础的读者,以及在Java平台下进行各类软件开发的开发人员和...

    Spring 3.0就这么简单源代码

    《Spring3.0就这么简单》主要介绍了Spring3.0的核心内容,不仅讲解了Spring3.0的基础知识,还深入讨论了SpringIoC容器、SpringAOP、使用SpringJDBC访问数据库、集成Hibernate、Spring的事务管理、SpringMVC、单元...

    spring3.0 jar包

    Spring 3.0是Spring框架的一个重要版本,它在2009年发布,为Java开发者带来了许多新特性和改进。这个版本标志着Spring框架在企业级应用开发中的进一步成熟,加强了对Java EE 6的支持,并引入了许多现代化的开发实践...

    spring 3.0 jar 包

    Spring 3.0是Spring框架的一个重要版本,它在Java应用程序开发中扮演着核心角色,尤其是在企业级应用中。这个版本引入了许多新特性,优化了性能,并提供了更好的开发者体验。以下是一些关于Spring 3.0及其jar包的...

    spring3.0完整框架

    这个压缩包中的"spring3.0"文件很可能包含了所有需要的Spring 3.0框架相关的jar包,包括核心库、AOP、Web、MVC等模块的jar,是搭建Spring 3.0环境所必需的。开发者可以通过这些jar包快速构建基于Spring 3.0的应用,...

    spring 3.0 jar包

    Spring 3.0是Spring框架的一个重要版本,它在2009年发布,为Java开发者带来了许多新特性和改进。这个版本标志着Spring框架在企业级应用开发中的成熟,提供了更强大、更灵活的解决方案。 1. **依赖注入增强**: ...

    spring3.0的API

    Spring 3.0是Spring框架的一个重要版本,它引入了许多新特性和改进,极大地扩展了其功能和灵活性。本文将详细解析Spring 3.0 API的主要特性,帮助开发者更好地理解和利用这一强大的Java企业级开发工具。 一、核心...

    Spring3.0中文帮助文档

    Spring 3.0是中国开发者广泛使用的Java企业级应用框架的重要版本,它提供了丰富的功能和改进,使得开发高质量、可维护的Java应用程序变得更加容易。这个中文帮助文档和权威开发指南是学习和掌握Spring 3.0不可或缺的...

    Spring3.0中文版

    Spring3.0是该框架的一个重要版本,它引入了许多新特性和改进,为开发者提供了更强大的功能和更好的灵活性。在这个CHM文件中,你将找到3.2版本的API文档,涵盖了所有类和常量字段值,这对于深入理解和使用Spring3.0...

    spring3.0发行版

    Spring 3.0是该框架的一个重要版本,它带来了许多新特性、改进和优化,旨在提升开发者效率和软件的可维护性。在这个发行版中,Spring引入了模块化设计,增强了对Java EE 6的支持,以及对Web MVC、AOP、数据访问和...

    Spring3.0Jar包

    Spring 3.0 是 Spring 框架的一个重要版本,发布于2009年,它带来了许多新特性和改进,极大地增强了 Java 开发者在企业级应用开发中的灵活性和效率。Spring 框架是一个全面的后端开发解决方案,核心特性包括依赖注入...

    spring3.0帮助文档(包含REST资料)

    Spring 3.0重要特性总结如下: ◆Spring表达式(SpEL):用于bean定义的核心表达式分析器 ◆对基于注释的组件的更多支持:允许通过元注释创建注释的“快捷方式” ◆标准化的依赖性注入注释:对Java中依赖性注入的...

    Spring 3.0就这么简单源码Maven的jar包001

    Spring 3.0是Spring框架的一个重要版本,它在2009年发布,引入了许多新的特性和改进,使得Java企业级应用的开发变得更加简洁和高效。本篇将围绕Spring 3.0的核心特性、Maven的使用以及如何通过源码来深入理解Spring...

    Myeclipse8.5下搭建SSH框架(图解)Struts2.1+Spring3.0+Hibernate3.3

    本文将详细介绍如何在MyEclipse 8.5环境下搭建基于Struts2.1、Spring3.0以及Hibernate3.3的SSH框架,并通过图解的方式引导读者完成整个搭建过程。 #### 二、创建 Web 项目 首先,需要在MyEclipse 8.5中创建一个新...

    spring3.0轻量级框架

    Spring 3.0是Spring框架的一个重要版本,它在轻量级、模块化和灵活性方面进一步提升了Java企业级应用的开发效率。以下是对Spring 3.0关键特性和功能的详细解析: 一、核心容器(Core Container) Spring的核心组件...

    spring3.0jar包集合

    Spring 3.0 是一个重要的Java应用程序框架,主要用于构建企业级的、模块化的、基于Java的应用。这个框架的核心目标是促进良好的编程实践和简化企业级软件开发。在Spring 3.0版本中,引入了许多增强的功能和改进,...

    spring3.0MVC中文教材

    - **高度可配置性**: Spring MVC的设计非常灵活,可以轻松地与其他流行Web框架(如Struts、WebWork、JSF和Tapestry)集成,使得开发者可以根据项目的具体需求选择最适合的技术栈。 - **与其他框架的无缝集成**: ...

Global site tag (gtag.js) - Google Analytics