我有一个jsp文件pageshow.jsp和参数ID,缓存JSP
有什么办法来缓存基于URL参数
请求页面在服务器端的JSP文件pageshow.jsp?ID = 100从缓存从服务器获取
建立请求页面pageshow.jsp的呢?ID = 200缓存从服务器获取建设,而不是
以上两个页面应该有不同的缓存中的内容,因为它们的参数是不同
这可避免在服务器端的重建JSP文件,也降低了服务器负载
我有一个jsp文件pageshow.jsp和参数ID,缓存JSP
有什么办法来缓存基于URL参数
请求页面在服务器端的JSP文件pageshow.jsp?ID = 100从缓存从服务器获取
建立请求页面pageshow.jsp的呢?ID = 200缓存从服务器获取建设,而不是
以上两个页面应该有不同的缓存中的内容,因为它们的参数是不同
这可避免在服务器端的重建JSP文件,也降低了服务器负载
我想看看使用类似于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。
不幸的是,缓存听起来很简单,但通常很难得到正确的结果。调整数据库查询通常是改善应用程序性能的最佳选择。
您可以创建CachingHttpFilter
映射到仅此JSP页面并执行以下操作:
chain.doFilter(request, response);
将转到请求的JSP。但是传递了特殊的响应(响应包装器),它存储了JSP返回的所有字节并缓存它们。
只有在第一次访问它们时,JPS才会构建到Java类中。你想通过“缓存”实现什么?如果页面创建非常昂贵,那么你可以检查是否可以缓存例如数据库操作需要。 –
+1 @f_puras。 JSP被编译一次。您可能可以预编译JSP。 – ch4nd4n
@f_puras我也想要缓存JSTL/scriptlet结果。例如。在页面中我显示产品ID: - <%= request.getparamter%>,在这种情况下,我想通过这部分代码缓存生成的输出 – Satheesh