Sun Java System Application Server Platform Edition 9 发行说明

Web 容器

本节介绍已知的 Web 容器问题和相应的解决办法。

无法使用基于 Servlet 2.4 且包含空 <load-on-startup/> 元素的 web.xml 部署 WAR。(ID 6172006)

web.xml 中的可选 load-on-startup Servlet 元素表示相关的 Servlet 将在启动对其进行声明的 Web 应用程序期间被装入和初始化。


注 –

此限制仅适用于基于 Servlet 2.4 的 web.xml;可以使用基于 Servlet 2.5 的 web.xml 指定空 load-on-startup 元素。


此元素的可选内容是一个整数,用于表示该 Servlet 相对于 Web 应用程序的其他 Servlet 而被装入和初始化的顺序。空 <load-on-startup/> 表示顺序无关紧要,只要该 Servlet 在其包含的 Web 应用程序启动期间被装入并进行了初始化即可。

web.xml 的 Servlet 2.4 模式不再支持空 <load-on-startup/>,这意味着在使用基于 Servlet 2.4 的 web.xml 时,必须指定一个整数。如果指定空的 <load-on-startup/>,如 <load-on-startup/>,则 web.xml 将无法针对 web.xml 的 Servlet 2.4 模式进行验证,从而导致 Web 应用程序的部署失败。

向下兼容性问题:指定空的 <load-on-startup/> 在基于 Servlet 2.3 的 web.xml 中仍起作用。

解决方法

在使用基于 Servlet 2.4 的 web.xml 时指定 <load-on-startup/>0</load-on-startup/>,以表明 Servlet 装入顺序无关紧要。

无法编译资源受限服务器上的 JSP 页面。(ID 6184122)

已访问 JSP 页面但无法进行编译,并且服务器日志包含错误消息“无法执行命令”以及以下堆栈跟踪:

at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.exec
(Execute.java:655) at org.apache.tools.ant.taskdefs.Execute.launch
(Execute.java:416) at org.apache.tools.ant.taskdefs.Execute.execute
(Execute.java:427) at org.apache.tools.ant.taskdefs.compilers.
DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter.
java:448) at org.apache.tools.ant.taskdefs.compilers.JavacExternal.
execute(JavacExternal.java:81) at org.apache.tools.ant.taskdefs.Javac.
compile(Javac.java:842) at org.apache.tools.ant.taskdefs.Javac.execute
(Javac.java:682) at org.apache.jasper.compiler.Compiler.generateClass
(Compiler.java:396)

解决方法

将 JSP 编译开关 fork 设置为 false

可以通过以下两种方式之一来实现:

以上任何一种设置都将阻止 ant 产生用于 javac 编译的新进程。

ParserUtils 从 Web 应用程序拾取解析器 (ID 6412405)

访问 JSP 时,在某些情况下可能会记录以下异常:


java.lang.AbstractMethodError: org.apache.xerces.dom.DeferredDocumentImpl.
setDocumentURI(Ljava/lang/String;)V

解决方法

将以下系统属性添加到 domain.xml 文件中:


<jvm-options>-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces. \
internal.jaxp.DocumentBuilderFactoryImpl</jvm-options>

或者,也可以从 Web 应用程序的 WEB-INF/lib 中删除包含 org.apache.xerces 包的 JAR 文件。

未找到 EAR 捆绑的 JAR 中的 TLD。(Glassfish 问题 590)

捆绑在 EAR 文件中的 JAR 封装的 JSP 标记库无法由作为 EAR 一部分的 WAR 文件的 JSP 页面引用,即使该 WAR 文件的 META-INF/MANIFEST.MF 资源在其 Class-Path 清单属性中列出了标记库 JAR 文件。

访问 JSP 页面(在其中导入了在 EAR 文件的一个 JAR 文件中封装的标记库)时,类似于以下内容的错误消息将在服务器日志中显示,并且 JSP 页面将无法进行编译:


The absolute uri: <taglib_uri> cannot be resolved in either web.xml or 
the jar files deployed with this application

解决方法

将任何 JSP 标记库 JAR 文件捆绑到其 JSP 页面导入这些标记库的任何 WAR 文件的 WEB-INF/lib 目录中。

有关此错误的更多信息可以在 Glassfish 站点 (https://glassfish.dev.java.net/issues/show_bug.cgi?id=590) 上找到。