Jsp JAR 中的标记文件有时会出现 class 未找到异常
Jsp Tag files inside JAR sometimes give class not found exception
我们已将所有自定义标记文件从主应用程序移至新项目,并计划在不同的 contexts/simplify 开发过程中重用它们。
我们已经打包了 META-INF/tags class 中的所有文件。为了访问标签,我们编写了一个 TLD 文件,其中引用了所有标签。
标签与原始标签相比没有变化。
所有 JSP 页面都已更新为使用 URI 或 tagdir 来引用我们的自定义标记文件。
大多数时候一切正常。大多数时候,因为有时,对于在其他 JSP 页面中广泛使用的标签,呈现步骤会放弃 "ClassDefNotFound" 异常。问题是 class 应该存在,而且确实存在,因为在同一页面上呈现相同的标记。
工作页面和非工作页面之间的唯一区别是最后一个页面使用 AJAX 调用加载所有这些元素。
是否存在某种可能导致这种奇怪行为的缓存?我们正在使用 jboss 4.2.3.
几个月后我发现了罪魁祸首。
应用程序所在的服务器中的JspServlet是如何定义的运行。
确实,更改 development 的值(默认为 TRUE)或减少更改检查(因此在重新编译标签之间留出更多时间)增加 modificationTestInterval(默认为 4)给予更多时间来编译相同的标签并生成整个页面。
问题出在某些页面多次使用同一标签(最多 20 次或更多)。有了新值,错误就消失了,因为现在 servlet 总是有足够的时间生成整个页面,而无需触发新的编译。
无论如何,为什么这对嵌入式标签(在 Web 应用程序中定义)有效,而对外部化标签(在另一个 JAR 中定义)失败的原因仍然未知。
我们已将所有自定义标记文件从主应用程序移至新项目,并计划在不同的 contexts/simplify 开发过程中重用它们。
我们已经打包了 META-INF/tags class 中的所有文件。为了访问标签,我们编写了一个 TLD 文件,其中引用了所有标签。 标签与原始标签相比没有变化。
所有 JSP 页面都已更新为使用 URI 或 tagdir 来引用我们的自定义标记文件。
大多数时候一切正常。大多数时候,因为有时,对于在其他 JSP 页面中广泛使用的标签,呈现步骤会放弃 "ClassDefNotFound" 异常。问题是 class 应该存在,而且确实存在,因为在同一页面上呈现相同的标记。
工作页面和非工作页面之间的唯一区别是最后一个页面使用 AJAX 调用加载所有这些元素。
是否存在某种可能导致这种奇怪行为的缓存?我们正在使用 jboss 4.2.3.
几个月后我发现了罪魁祸首。
应用程序所在的服务器中的JspServlet是如何定义的运行。
确实,更改 development 的值(默认为 TRUE)或减少更改检查(因此在重新编译标签之间留出更多时间)增加 modificationTestInterval(默认为 4)给予更多时间来编译相同的标签并生成整个页面。
问题出在某些页面多次使用同一标签(最多 20 次或更多)。有了新值,错误就消失了,因为现在 servlet 总是有足够的时间生成整个页面,而无需触发新的编译。
无论如何,为什么这对嵌入式标签(在 Web 应用程序中定义)有效,而对外部化标签(在另一个 JAR 中定义)失败的原因仍然未知。