2012-08-29 42 views
0

我有一个jsp文件pageshow.jsp和参数ID,缓存JSP

有什么办法来缓存基于URL参数

请求页面在服务器端的JSP文件pageshow.jsp?ID = 100从缓存从服务器获取
建立请求页面pageshow.jsp的呢?ID = 200缓存从服务器获取建设,而不是

以上两个页面应该有不同的缓存中的内容,因为它们的参数是不同

这可避免在服务器端的重建JSP文件,也降低了服务器负载

+2

只有在第一次访问它们时,JPS才会构建到Java类中。你想通过“缓存”实现什么?如果页面创建非常昂贵,那么你可以检查是否可以缓存例如数据库操作需要。 –

+0

+1 @f_puras。 JSP被编译一次。您可能可以预编译JSP。 – ch4nd4n

+0

@f_puras我也想要缓存JSTL/scriptlet结果。例如。在页面中我显示产品ID: - <%= request.getparamter%>,在这种情况下,我想通过这部分代码缓存生成的输出 – Satheesh

回答

2

我想看看使用类似于AlexR提出的CachingHttpFilter,但看看使用HTTP头来控制缓存而不是将数据存储在roll-your-own-content-cache中。

This article很好地解释了如何在后续时间请求URL时比较If-Modified-Since HTTP标头。然后由您的过滤器发回HTTP 304响应。

日期的比较:

客户要求服务器指定页:如果客户具有 已经读出的页,它发送一个请求(到服务器)包含 最后修改日期它的缓存页面(例如“If-Modified-Since: 21/07/2002 13:47:24 GMT”);还有头部If-Unmodified-Since;

服务器比较此日期由客户端请求的页面的最后 修改日期给出:

如果服务器上的网页有相同的日期,则服务器通知 客户端,它可以使用版本的页面(“HTTP/1.1 304 Not Modified”)。客户端和服务器之间的交换在那里停止 ;

如果服务器上的网页是新的,则服务器通知变化的客户 (“上次修改:21/06/2012下午8时45分37秒GMT”),并发出 此页到客户端。浏览器存储 页面上次更改的日期。

你也想看看ETag HTTP Header

不幸的是,缓存听起来很简单,但通常很难得到正确的结果。调整数据库查询通常是改善应用程序性能的最佳选择。

2

您可以创建CachingHttpFilter映射到仅此JSP页面并执行以下操作:

  • 检查是否缓存内容存在
  • 如果只存在返回它
  • 如果不存在调用chain.doFilter(request, response);将转到请求的JSP。但是传递了特殊的响应(响应包装器),它存储了JSP返回的所有字节并缓存它们。