如何设置Apache Tomcat以预呈现它所服务的页面的子集?

时间:2015-07-24 20:55:11

标签: jsp tomcat

我有一组jsp页面,它们使用jsp,java和DB查询来计算它们的输出。但是,页面上的信息很少改变(可能每次构建一次)。虽然我当然可以正确设置缓存标题,但我也想预先设置它们。

有谁知道我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

一些想法:

没有更多信息,这看起来很像初步优化。除非你的服务器真的受到这种操作的影响,否则我会推迟所有优化它的工作。您可能需要几个小时的工作时间并获得0.05%的执行时间。可能还有其他问题可以节省10%或50%的执行时间。找到那些并在那里投入时间 - 它的投资回报率更高。由于优化代码通常对于追随您的维护人员来说并不是很明显,而是优化其真正相关的位置。

如果您确定这实际上消耗了重要的性能并且值得优化,那么可以通过不同的方式来思考问题:仅仅因为您使用Tomcat,您不必使用JSP,但是您还可以缓冲普通输出并从(缓存)servlet传递它。 Servlet API为您提供ServletFilters,您可以使用它来拦截输出:编写Servlet过滤器以缓冲第一个结果并在以后交付它,同时阻止后面的JSP

另外,看看JSP是如何生成的:它们实际上被转换(编译)成一个servlet,它实际上硬编码了很多输出。如果你只是使用bean来缓存所有(有些)变量输出并在JSP中使用它 - 而不是实际的数据库查找 - 那么在使用JSP时根本没有太多的性能损失。您可以在tomcat的工作目录中查看生成的servlet - 了解在后台实际发生的事情,这非常有趣。

现在我写了这个,我对订单的偏好是:

  1. 除非你能证明任何改变将是一项重大改进,否则不要做任何事情
  2. 在bean中缓存输出并只使用JSP打印bean的内容(bean的查找意味着:首先查找访问DB,后续查找返回相同的对象)
  3. Servlet过滤器。但是,我个人不喜欢HTML级别的缓存作为一般问题解决方案,如果不是像CSS / JS库/图像这样的资源(对于他们而言,它更像是HTTP级别)