基于URL参数缓存JSP

时间:2012-08-29 07:22:20

标签: java performance jsp caching

我有一个jsp文件pageshow.jsp和参数id,

有没有办法根据url参数

在服务器端缓存jsp文件

请求页面pageshow.jsp?id = 100从缓存获取而不是从服务器构建
请求页面pageshow.jsp?id = 200从缓存获取而不是从服务器构建

由于参数不同,上面两页应该有不同的缓存内容

这可以避免在服务器端重建jsp文件并减少服务器负载

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

我看一下使用类似于AlexR提议的CachingHttpFilter,但是看看使用HTTP标头来控制缓存而不是将数据存储在自己内容缓存中

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未修改“)。客户端和服务器之间的交换停止   那里;

     

如果服务器上的页面较新,则服务器通知客户端   变更(“最后修改时间:21/06/2012 08:45:37,格林尼治标准时间”)并发送   这个页面给客户。浏览器存储上次更改的日期   页。

您还需要查看ETag HTTP Header

不幸的是,缓存听起来很简单,但通常很难做到。调优数据库查询通常是提高应用程序性能的最佳起点。