【问题标题】:Why is Websphere v8.5 server keeps jsp in cache even after restart?为什么 Websphere v8.5 服务器在重新启动后仍将 jsp 保留在缓存中?
【发布时间】:2014-06-11 21:20:04
【问题描述】:

我有一个在 WebSphere v8.5 服务器实例上运行的 Web 应用程序。我刚刚将应用程序 JSP 中的共享代码更新为单独的 JSP,并使用以下行导入原始 JSP:

   <%@ include file="/WEB-INF/pages/table.jsp" %>

但是,每当我对后端逻辑或此 table.jsp 文件进行修改时,更改都会反映在应用程序中。我已经尝试重新启动服务器并进行干净的构建,但旧的格式仍然存在。有谁知道我如何修复此缓存或如何防止它继续发生?

【问题讨论】:

  • 尝试 &lt;jsp:include page="relativeURL" /&gt; 在运行时包含内容,而 include page 指令在编译时执行。
  • 清除浏览器缓存后是否再次尝试?在此处阅读更多信息Making sure a web page is not cached, across all browsers
  • 试试&lt;meta http-equiv="Pragma" content="no-cache"&gt; &lt;meta http-equiv="Cache-Control" content="no-cache"&gt; &lt;meta http-equiv="Expires" content="0"&gt;
  • 我已经尝试了所有这些: 导致非常疯狂的格式问题,与预期的完全不同。浏览器在退出时会清除缓存,但针对无法访问的用户的公司标准会阻止修改浏览器设置。我在所有 jsp 页面上都包含了无缓存标签,但同样无济于事。唯一修复它的是删除服务器实例并创建一个新实例,这是一个需要花费大量时间逐像素修改复杂对齐的过程。
  • 始终有效的最终提示。只需在 JSP URL 中附加一个随机查询参数,例如当前时间(以毫秒为单位)或 UUId,这将强制浏览器获取资源的新副本,因为 URL 已更改。

标签: java html jsp caching websphere


【解决方案1】:

&lt;%@ include file="/WEB-INF/pages/table.jsp" %&gt; 是静态导入,因此它会在编译父级之前将 table.jsp 文件的内容包含到父级 jsp 中。 parent 编译后,对 table.jsp 的更改将不可见,因为父源/类不会更改。您必须更新父级上的时间戳(例如,使用触摸命令或打开并保存)以使容器知道已在包含的文件中进行了更改。

【讨论】:

  • 我尝试向它添加时间戳参数 但是每当我尝试加载页面它给我一个错误说它找不到页面,你知道我如何向这个导入标签添加参数吗?
  • 所以应用程序有大量暴露的 bean 和模型属性,这些属性在编译时包含 () 但是当我尝试 jsp:include 甚至 存在 table.jsp 无法访问暴露的 bean 或模型属性以正确格式化的问题。因此,在不修改截止日期(明天)的情况下,我需要一种方法来保持这个文件不被缓存,而不必删除服务器实例。
  • 为什么要删除服务器???取消部署应用程序就足够了。并且文件没有被缓存。 jsp:include 或 c:import 将不起作用,如果您有 jsp 片段,因为它需要完整的 jsp 文件。正如我告诉你的,在你的父 jsp 文件上刷新修改日期。您可以对项目中的所有 jsp 文件执行此操作:在 unix 上执行:$ find 。 -name ".jsp" -exec touch {} + On Win do: powershell gci -recu -inc ".jsp" | % { $_.LastWriteTime = 获取日期}
  • 好吧,我误解了你第一次发帖的方法是应该从父 JSP 执行命令还是我必须编写一个计划的作业来执行它?
  • 一般来说,您应该使用管理工具(控制台、脚本或监控目录)更新您的应用程序。只有在您手动修改已安装在服务器应用程序上的 jsp 文件时,您所描述的行为才是可能的。因此,如果您这样做,请创建一些系统脚本,该脚本将刷新 jsp 文件上的时间戳,并在您更改 jsp 时调用它。或者我不明白你的部署场景。
【解决方案2】:

WAS 将 JSP 文件缓存在 profile-root/temp 文件夹中。 删除这个文件夹的内容,它应该用新的 JSP 文件刷新。

如需更持久的解决方案,请参阅此链接: https://developer.ibm.com/answers/questions/180818/how-to-resolve-jsp-caching-issue-in-websphere-appl.html

【讨论】:

    【解决方案3】:

    在 Java 虚拟机下将此自定义属性 com.ibm.ws.cdi.enableCDI 添加为 false。这将禁用 CDI 并启用 JSP 重新加载,而无需重新启动应用程序或服务器。

    【讨论】:

    • 您是如何想到禁用 CDI 与 jsp 重新加载有任何关系的???
    • 请参阅此www-01.ibm.com/support/docview.wss?uid=swg1PI58316 如果需要更多信息,请不要投反对票。我为我的同事解决了这个问题并测试了工作。此修复与使用 autoreload 标志和间隔重新加载 JSP 的标准配置不同。我们也尝试删除临时文件夹中的战争文件内容。没有任何效果。如果在服务器中部署的任何应用程序中均未使用 CDI,则可以应用此修复程序。
    • 请确保您下次提供此类信息的来源链接,或提供完整信息,因为您的帖子具有误导性。首先,它与 WebSphere Liberty 相关,而不是传统的 WAS,链接中的第二个信息表明这是一个错误,在最近的版本中已修复。所以解决方案是更新版本,而不是禁用 CDI。
    猜你喜欢
    • 2018-04-21
    • 2013-10-07
    • 2016-01-13
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2013-10-03
    • 2015-07-31
    • 2011-04-21
    相关资源
    最近更新 更多