- 调用 setEnv,然后调用 JSP 编译器:
%JAVA_HOME%\bin\java weblogic.jspc -classpath %CLASSPATH% -d build\WEB-INF\classes -verbose -keepgenerated *.jsp
|
备注:使用 JSP compiler tool (English) 时,请确保它的编译环境与部署 webapp 的环境完全相同。例如:
- 如果使用的是 WLS 6.1 SP3 编译器(可使用 java weblogic.jspc -version 来检查它的版本),则部署环境也必须是 WLS 6.1 SP3 环境。如果 Weblogic Server 检测到这些 JSP 是为另一版本的服务器而编译的,就会对它们进行重新编译,因为 WLS 并不检查 .class 文件是否兼容。如果不兼容,就可能出现运行时错误。
- 如果您在不区分大小写的环境(如 Windows)中对 JSP 进行预编译,并想将它们部署到一个区分大小写的环境(如 UNIX),则必须使用以下选项对这些 JSP 进行预编译:
-Dweblogic.jsp.windows.caseSensitive=true
用法:java -Dweblogic.jsp.windows.caseSensitive=true weblogic.jspc -webapp mywebapp -d mywebapp\WEB-INF\classes
如果您想让 WLS 在 Windows 上运行时具有这些预编译 JSP,则必须使用上述选项启动 WLS。
返回页首
如果在检查所有上述步骤后,JSP 仍然会被重新编译,请检查以下可能存在的情况。可能会出现以下几种难解的情况,而这些情况就可能是该故障的成因:
- weblogic.jspc 的类路径仍然与用于部署 JSP 的 WLS 实例的类路径不同。例如,尽管脚本中列有某个补丁文件,但实际上 weblogic.jspc 的类路径或 WLS 实例的类路径中并没有该文件。如果在 Ant 脚本内使用 JSP 编译器时出现这种情况,就更令人费解。
此时可循常理进行一项检查,即利用几条 echo 语句捕捉调用 JSP 编译器前类路径的快照,并将该类路径与 Weblogic 服务器的类路径进行比较。
- 系统编译 JSP,随后将其复制到 WAR 的根目录中。尽管这两个事件在生成脚本内的发生过程只有几毫秒,但它们确实会引发故障,因为复制的 JSP 的时间戳要比编译类的时间戳晚(即便只是晚几毫秒),而这正是 WLS 后来要对其进行重新编译的原因。为确保不出现这种情况,应先将 JSP 复制到 webapp 的根目录,然后只使用这些副本来调用 weblogic.jspc 实用程序。
- 1.5.2+ 版本有一个 ANT 错误(请参阅 http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17934),该错误会强制 Weblogic Server 重新编译某些 JSP。仅在一种情况下会出现此故障,即使用 ANT 将 webapp(wlpackage 任务)打包为 WAR 文件时。具有奇数时间戳的所有 JSP 均会被上舍入为下一秒数。WLS 会按常理认为它们是修改过的 JSP,因而会对它们进行重新编译。1.6 版已修复了这个 ANT 错误。
解决方法:
- 使用最新版本的 ANT(或使用更早的 ANT 1.5.1)
- 打包 webapp 时,请使用“JAR -cvf”来代替 ANT wlpackage 任务
?
- 如果在进行了上述检查后仍未奏效,请使用技术支持工程师在 dev2dev.bea.com 提供的 JSP compilation checkers (English) 工具,网站上列出的该工具的名称是:
- JSP Precompile Validation Utility
- JSP Precompilation Test Utility
>以下是 JSP Precompilation Test Utility 输出内容的一个示例:
|