我有一个 Java EE 应用程序,它采用 XML 并将 XSLT 应用于它来生成 HTML。此过程发生在自定义 servlet 中。这通常用于在某些网页上构建部分内容。由于实际数据已经存储为 XML,因此在 servlet 中进行转换是有意义的。
这实际上是模仿CruiseControl它会生成报告吗? Servlet 缓存生成的 HTML,以避免每次都产生转换成本。表示 XSL 文件的 DOM 也缓存在内存中。
现在,XSLT 部署在 WAR 文件内。我们希望支持 WAR 文件中部署的默认 XSLT,而且还能够仅更新 XSLT,而无需重新部署整个应用程序。我希望有人能提出一些解决此类问题的好主意。
<小时/>更新
从我收到的评论中,我意识到有一些特定于服务器的方法可以做到这一点。但我希望以更通用的方式解决它。我需要确保我能够保留以下功能...
- 检测到新的 XSLT 后,缓存该 XSLT 本身(直到检测到新版本)
- 保留生成的 HTML 的缓存版本,并在出现新的 XSLT 时更新它们。
最佳答案
我不会选择将 XSLT 放入 war 文件中,而是选择在 war 之外拥有一个可配置的 xslt 文件夹; “可配置”是指有一个配置文件(属性或其他格式)告诉 web 应用程序 xslt-folder 的路径。然后,您可以定期监视该文件夹的内容,如果任何 XSLT 发生更改,则使相应的缓存失效,重新加载 XSLT,并开始使用新的。您还必须小心操作的原子性:使缓存无效并重新加载 XSLT 可能会中断对该 XSLT 生成的内容的正在进行的服务请求。
关于java - 更新已部署的 Java EE 应用程序中的 XSLT 文件而不重新部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5452873/