我有一个jsp文件pageshow.jsp和参数id,
有没有办法根据url参数在服务器端缓存jsp文件
请求页面 pageshow.jsp?id=100 从缓存获取而不是从服务器构建
请求页面 pageshow.jsp?id=200 从缓存获取而不是从服务器构建
以上两个页面应该有不同的缓存内容,因为它们的参数不同
这样可以避免在服务器端重建jsp文件,也可以减少服务器负载
我有一个jsp文件pageshow.jsp和参数id,
有没有办法根据url参数在服务器端缓存jsp文件
请求页面 pageshow.jsp?id=100 从缓存获取而不是从服务器构建
请求页面 pageshow.jsp?id=200 从缓存获取而不是从服务器构建
以上两个页面应该有不同的缓存内容,因为它们的参数不同
这样可以避免在服务器端重建jsp文件,也可以减少服务器负载
您可以创建CachingHttpFilter
仅映射到此 JSP 页面的内容,并执行以下操作:
chain.doFilter(request, response);
将转到请求的 JSP 的调用。但是传递到那里的特殊响应(响应包装器)存储 JSP 返回的所有字节并缓存它们。我会看看使用CachingHttpFilter
类似于 AlexR 提出的方法,但看看使用 HTTP 标头来控制缓存而不是将数据存储在滚动内容缓存中。
本文很好地解释了如何在If-Modified-Since
后续请求 URL 时比较 HTTP 标头。然后由您的过滤器发回HTTP 304
响应。
日期比较:
客户端向服务器请求特定页面:如果客户端已经读取该页面,它会向服务器发送一个请求,其中包含其缓存页面的最后修改日期(例如“If-Modified-Since: 21/07/2002格林威治标准时间 13:47:24”);还有标题 If-Unmodified-Since;
服务器将客户端给出的这个日期与请求页面的最后修改日期进行比较:
如果服务器上的页面具有相同的日期,则服务器通知客户端它可以使用其缓存中的版本页面(“HTTP/1.1 304 Not Modified”)。客户端和服务器之间的交换就此停止;
如果服务器上的页面较新,则服务器将更改通知客户端(“Last-modified: 21/06/2012 08:45:37 pm GMT”)并将此页面发送给客户端。浏览器存储页面的最后更改日期。
您还需要查看ETag
HTTP 标头。
不幸的是,缓存听起来很简单,但通常很难做到正确。调整数据库查询通常是提高应用程序性能的最佳起点。