JavaServer Pages 故障诊断技巧
使用这些技巧来对 JavaServer Pages 问题进行故障诊断。
Web 服务器显示 JavaServer Pages 源代码
如果 WebSphere® Application Server 与 Web 服务器共享文档根目录,那么可能会引起安全隐患,因为 Web 服务器可能将 JavaServer Pages (JSP) 源文件显示为纯文本。
- 问题
- 您可以使用 WebSphere Web 服务器插件规则集来确定给定请求是否将由 WebSphere Application Server 处理。如果传入请求不符合这些规则,那么 Web 服务器插件将控制权返回给 Web 服务器,以便 Web 服务器能够满足该请求。在这种情况下,未知主机头使 Web 服务器插件将控制权返回给 Web 服务器,因为规则未指明 WebSphere Application Server 应该处理该请求。因此,Web 服务器在 Web 服务器文档根目录中查找该请求。由于 JSP 源文件存储在 Web 服务器的文档根目录中,因此 Web 服务器将找到该文件并将其显示为纯文本。
- 建议的解决方案
- 将 WebSphere Application Server JSP 源文件移到 Web 服务器文档根目录以外。这样,传入包含未知主机头的请求时,插件将控制权返回给 Web 服务器,此时在文档根目录中找不到 JSP 源文件。因此,Web 服务器将返回 404 File Not Found 错误而不是 JSP 源文件。
在使用 @include 伪指令的情况下显示双字节字符集(DBCS)字符时发生问题
使用 @include 伪指令的 JavaServer Pages 文件在显示双字节字符集(DBCS)字符时可能会遇到问题。由于向后兼容性问题,可能需要对迁移至 WebSphere Application Server V6.0 及更高版本的某些应用程序进行修改才能符合 JSP 2.0 规范。JSP 2.0 规范要求每个静态包括的资源都必须设置一种页面编码或内容类型,这是因为每个文件的字符编码都是单独确定的,即使一个文件包括使用 include 伪指令的另外一个文件也不例外。
使用 JavaServer Pages (JSP) 引擎时出现问题
如果使用
JavaServer Pages (JSP) 引擎时遇到困难,请尝试以下步骤:
- 确定是否正确请求和显示其他资源(如 .html 文件或 servlet)。如果未正确请求或显示,那么可能是较深级别的问题,如 HTTP 服务器的问题。
- 如果其他资源显示正确,那么确定 JSP 处理程序是否已正常启动:
浏览主管尝试访问的 JSP 文件的服务器的 JVM 日志。下列消息表明 JSP 处理程序已正常启动:
如果无法装入 JSP 处理程序,那么将在 root_dir/logs/server_name/SystemOut.log 文件中看到类似如下的消息:Extension Processor [class com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor] was initialized successfully. Extension Processor [class com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor] has been associated with patterns [*.jsp *.jspx *.jsw *.jsv ].
No Extension Processor found for handling JSPs. JSP Processor not defined. Skipping : jspfilename.
浏览主管尝试访问的 JSP 文件的服务器的日志。下列消息表明 JSP 处理程序已正常启动:
如果无法装入 JSP 处理程序,那么将在服务器日志文件中看到类似如下的消息:Extension Processor [class com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor] was initialized successfully. Extension Processor [class com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor] has been associated with patterns [*.jsp *.jspx *.jsw *.jsv ].
。No Extension Processor found for handling JSPs. JSP Processor not defined. Skipping : jspfilename.
- 如果 JSP 引擎已正常启动,那么问题可能是 JSP 文件本身。
JSP 可能有无效的 JSP 语法并且无法由 JSP 处理程序处理。检查目标应用程序的 root_dir/logs/server_name/SystemOut.log 文件中无效的 JSP 伪指令语法消息。浏览器中类似于下列内容的错误表明这种问题:
此示例表明指定 的 JavaServer Pages 文件的第 2 行,第 1 列缺少 jsp:include 操作的必需属性。为其他语法错误显示类 似的消息。Message: /filename.jsp(2,1)JSPG0076E: Missing required attribute page for jsp element jsp:include
JSP 可能有无效的 JSP 语法并且无法由 JSP 处理程序处理。检查目标应用程序的服务器日志文件中是否存在无效的 JSP 伪指令语法消息。浏览器中类似于下列内容的错误表明这种问题:
此示例表明指定 的 JavaServer Pages 文件的第 2 行,第 1 列缺少 jsp:include 操作的必需属性。为其他语法错误显示类 似的消息。Message: /filename.jsp(2,1)JSPG0076E: Missing required attribute page for jsp element jsp:include
- 检查目标应用程序服务器的 SystemErr.log 文件是否存在 Java™ 语法无效问题。浏览器中类似于消息:无法编译 JSP 的类的错误表明这种问题。可以在 SystemErr.log 文件中找到 Javac 编译器产生的错误消息输出。它可能看似:
JSPG0091E: An error occurred at line: 2 in the file: /myJsp.jsp JSPG0093E: Generated servlet error: c:\WASROOT\temp\ ... test.war\_myJsp.java:16: myInt is already defined in com.ibm.ws.jsp20._myJsp int myInt = 122; String myString = "number is 122"; static int myStaticInt=22; int myInt=121; ^ 1 error
在 JSP 文件中更正此错误并重试此文件。
- 检查目标应用程序的日志文件中是否存在 Java
语法无效问题。浏览器中类似于消息:无法编译 JSP 的类的错误表明这种问题。
Javac 编译器产生的错误消息输出可在 SystemErr.log 中找到。它可能看似:
JSPG0091E: An error occurred at line: 2 in the file: /myJsp.jsp JSPG0093E: Generated servlet error: c:\WASROOT\temp\ ... test.war\_myJsp.java:16: myInt is already defined in com.ibm.ws.jsp20._myJsp int myInt = 122; String myString = "number is 122"; static int myStaticInt=22; int myInt=121; ^ 1 error
Javac 编译器产生的错误消息输出可在服务器日志文件中找到。它可能看似:
JSPG0091E: An error occurred at line: 2 in the file: /myJsp.jsp JSPG0093E: Generated servlet error: c:\WASROOT\temp\ ... test.war\_myJsp.java:16: myInt is already defined in com.ibm.ws.jsp20._myJsp int myInt = 122; String myString = "number is 122"; static int myStaticInt=22; int myInt=121; ^ 1 error
在 JSP 文件中更正此错误并重试此文件。
注: 本主题引用了一个或多个应用程序服务器日志文件。作为另一种建议采用的方法,您可以在分布式系统和 IBM® i 系统上配置服务器以使用高性能可扩展日志记录 (HPEL) 记录和跟踪基础结构,而不使用 SystemOut.log、SystemErr.log、trace.log 和 activity.log 文件。您还可以将 HPEL 与本机 z/OS® 日志记录设施结合使用。如果要使用 HPEL,那么可从服务器概要文件
bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。有关使用
HPEL 的更多信息,请参阅有关使用 HPEL 对应用程序进行故障诊断的信息。
使用预编译时,JavaServer Pages 无法编译
症状 | 问题 | 建议的解决方案 |
---|---|---|
在选择了预编译的情况下通过管理控制台进行部署时 JavaServer Pages 无法编译。
|
在选择了预编译的情况下,如果存在对在任何类路径上都不可用的另一个 Java 归档 (JAR) 文件的依赖关系,那么通过管理控制台进行部署时 JavaServer Pages 无法编译。 | 在企业应用程序部署期间,可使用 wsadmin 脚本编制来对 JSP 文件进行预编译。但是,如果要使用管理控制台,那么在打包应用程序之前编译所有 JSP 文件。
|
JSPG0089E: page 伪指令编码 Shift_JIS 与 xml 序言编码 UTF-8 不匹配
症状 | 问题 | 建议的解决方案 |
---|---|---|
出现下列错误:
|
jsp:directive.page 元素中的 pageEncoding 属性不是 UTF-8。 | JavaServer Pages 必须指定与在 page 伪指令中指定的编码相匹配的序言。例如,
有关更多信息,请参阅 JavaServer Pages 规范中的 JSP.4.1, Page Character Encoding 一节和可扩展标记语言 (XML) 规范的 4.3.3 一节及附录 F.1。 |
如果这些步骤都不能解决此问题,请使用“诊断和修正问题:学习资源”主题中的链接来检查是否已识别和记录了此问题。如果没有看到与您的问题类似的问题,或所提供的信息未解决您的问题,请联系 IBM 技术支持以获取进一步的帮助。
有关 IBM 技术支持提供的已知问题及其解决方案的当前信息,请参阅 IBM 技术支持页面。IBM 支持页面包含的文档能节省您在收集解决问题所需信息上花费的时间。