我有一个jsp文件pageshow.jsp和参数id,
有没有办法根据url参数
在服务器端缓存jsp文件请求页面pageshow.jsp?id = 100从缓存获取而不是从服务器构建
请求页面pageshow.jsp?id = 200从缓存获取而不是从服务器构建
由于参数不同,上面两页应该有不同的缓存内容
这可以避免在服务器端重建jsp文件并减少服务器负载
答案 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。
不幸的是,缓存听起来很简单,但通常很难做到。调优数据库查询通常是提高应用程序性能的最佳起点。