JSP 引擎配置参数
在 WebSphere® Application Server 中,您可以配置 Java™ Server Pages (JSP) 引擎配置参数以获取生产服务器环境中的最优性能并满足开发环境中开发人员的需求。
JSP 引擎参数区分大小写。如果为参数指定的值由两个或更多以空格分隔的字组成,那么必须对此值添加引号。某些参数会影响为 JSP 或标记文件生成的 Java 源代码。这些参数通过以下语句识别“此参数需要生成 Java 源代码”。此语句指示,如果修改了配置参数,那么重新转换 JSP 文件并重新编译 Java 源代码前,该参数的值不会更改任何内容。

allowMultipleAttributeValues
指定 JSP 容器是否可以存储定制标记属性的多个值。将此参数设置为 true 可允许 JSP 容器存储多个值。此参数的缺省值为 false。此参数需要生成 Java 源代码
compileWithAssert
指定所生成的 Java 类是否应该包含对 Developer Kit(Java Technology Edition 1.4 声明工具)的支持。将此参数设置为 true 时的影响是:将 -source 1.4 选项传递给 Java 编译器。此参数的缺省值为 false。此参数需要生成 Java 源代码
classdebuginfo
指定编译器是否在所生成的类文件中包括调试信息。将此参数设置为 true 时,会将 -g 选项传递给 Java 编译器。此参数的缺省值为 false。此参数需要生成 Java 源代码
convertAttrValueToString
指定在使用重复标记的开始和结束属性之前,是否将这些属性转换成字符串。此参数的缺省值为 false。此参数需要生成 Java 源代码
deprecation
指定编译器在编译所生成的 Java 源代码时,是否生成废弃警告。如果将此参数设置为 true,那么 -deprecation 选项将传递至 Java 编译器。此参数的缺省值为 false。此参数需要生成 Java 源代码
disableElCache
如果由于表达式求值程序挂起散列映射,而遇到内存不足状况,请将此参数设置为 True 以禁用 commons-el 表达式高速缓存。此参数的缺省值为 false。
disableJspRuntimeCompilation
如果将此选项设置为 true,那么 JSP 引擎在运行时不转换和编译 JSP 文件;JSP 引擎只装入预编译类文件。JSP 源文件不必存在,就可装入类文件。将此选项设置为 true 时,您可以安装不带 JSP 源文件的应用程序,但该应用程序必须带有已进行预编译的类文件。同名 Web 容器定制属性用于确定服务器中安装的所有 Web 模块的行为。如果同时设置了 Web 容器定制属性和 JSP 引擎选项,那么 JSP 引擎选项优先。此参数的缺省值为 false。
disableTldSearch
将此选项设置为 true 可在应用程序启动时阻止 JSP 引擎在应用程序安装目录中搜索标记库描述符 (TLD) 文件。如果将此选项设置为 false,那么当应用程序启动时,JSP 引擎会在应用程序安装目录中搜索 TLD 文件。此参数的缺省值为 false。
Web 容器定制属性 com.ibm.wsspi.jsp.disableTldSearch 可用来指定在应用程序启动时,服务器中安装的所有模块内的 JSP 引擎是否会在应用程序安装目录中搜索 TLD 文件。如果为 Web 容器定制属性和 JSP 引擎选项设置的值有冲突,那么将优先使用 JSP 引擎选项的设置。
evalQuotedAndEscapedExpression
将此选项设置为 true,可在确定是否计算表达式时正确处理转义字符和引号。
<input type=“text” value=“${fn:substring('1234567', 0,4)}”/>
由于直接位于
fn:substring 语句前的双引号,JSP 文件编译失败,原因是转换程序未将函数映射器添加至所生成 Java 类。而且,如果使用反斜杠
(\$) 对美元符号 ($) 进行了转义,那么转换程序仍会尝试对该表达式求值(而不是将其视为文字串)。要正确处理转义字符和引号,必须在失败应用程序的
ibm-web-ext.xmi 或 ibm-web-ext.xml 文件中将
evalQuotedAndEscapedExpression 设置为 true。<jspAttributes xmi:id=“JSPAttribute_1”
name=“evalQuotedAndEscapedExpression” value=“true”/>
<?xml version=“1.0” encoding=“UTF-8”?>
<web-ext
xmlns=“http://websphere.ibm.com/xml/ns/javaee”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd”
version=“1.0”>
<file-serving-attribute name=“extendedDocumentRoot” value=“/opt/extDocRootDir” />
<jsp-attribute name=“evalQuotedAndEscapedExpression” value=“true” />
<jsp-attribute name=“extendedDocumentRoot” value=“/opt/extDocRootDir”,“${MY_CUSTOM_VARIABLE}” />
<reload-interval value=“3”/>
<auto-encode-requests value=“false”/>
<auto-encode-responses value=“false”/>
<enable-directory-browsing value=“false”/>
<enable-file-serving value=“true”/>
<pre-compile-jsps value=“false”/>
<enable-reloading value=“true”/>
<enable-serving-servlets-by-class-name value=“false” />
</web-ext>
要在所有 Web 应用程序之间全局应用此行为,您可以将 com.ibm.wsspi.jsp.evalQuotedAndEscapedExpression Web 容器定制属性设置为 true。
extendedDocumentRoot
当应用程序需要访问应用程序 Web 应用程序归档 (WAR) 目录外部的文件时,请使用已扩展的文档根工具。此工具允许您使用一个或多个目录路径来配置应用程序,您可以从这些目录路径中提供静态文件和 JSP 文件。当应用程序需要访问位于 Web 应用程序归档 (WAR) 目录外部的文件时,您可以使用此属性。例如,如果几个应用程序需要访问一组公用文件,那么您可以将这些公用文件放在可作为扩展文档根目录来连接每一个应用程序的目录中。
要使用扩展文档根来配置应用程序,请将 extendedDocumentRoot 属性作为文件服务属性添加到应用程序的 ibm-web-ext.xmi 或 ibm-web-ext.xml 文件。此属性的值是一个用逗号分隔的目录列表,这些目录充当静态文件的根目录位置。
<fileServingAttributes xmi:id=“FileServingAttribute_1” name=“extendedDocumentRoot” value=“/opt/extDocRootDir”/>
- 对 http://localhost:9080/context_root/sample.html 资源的请求要求 sample.html 文件位于 /opt/extDocRootDir/sample.html 目录结构中。
- 对 http://localhost:9080/context_root/myDir/sample.gif 资源的请求要求 sample.gif 文件位于 /opt/extDocRootDir/myDir/sample.gif 目录结构中。
<?xml version=“1.0” encoding=“UTF-8”?>
<web-ext
xmlns=“http://websphere.ibm.com/xml/ns/javaee”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd”
version=“1.0”>
<file-serving-attribute name=“extendedDocumentRoot” value=“/opt/extDocRootDir” />
<jsp-attribute name=“evalQuotedAndEscapedExpression” value=“true” />
<jsp-attribute name=“extendedDocumentRoot” value=“/opt/extDocRootDir”, “${MY_CUSTOM_VARIABLE}”/>
<reload-interval value=“3”/>
<auto-encode-requests value=“false”/>
<auto-encode-responses value=“false”/>
<enable-directory-browsing value=“false”/>
<enable-file-serving value=“true”/>
<pre-compile-jsps value=“false”/>
<enable-reloading value=“true”/>
<enable-serving-servlets-by-class-name value=“false” />
</web-ext>
要使用从中提供 JSP 文件的扩展文档根来配置应用程序,请将 extendedDocumentRoot 属性作为 JSP 属性添加到 ibm-web-ext.xmi 或 ibm-web-ext.xml 文件。此属性的值是一个用逗号分隔的目录列表,这些目录充当 JSP 文件的根目录位置。
<jspAttributes xmi:id=“JSPAttribute_1” name=“extendedDocumentRoot” value=“/opt/extDocRootDir”/>
<?xml version=“1.0” encoding=“UTF-8”?>
<web-ext
xmlns=“http://websphere.ibm.com/xml/ns/javaee”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd”
version=“1.0”>
<file-serving-attribute name=“extendedDocumentRoot” value=“/opt/extDocRootDir” />
<jsp-attribute name=“evalQuotedAndEscapedExpression” value=“true” />
<jsp-attribute name=“extendedDocumentRoot” value=“/opt/extDocRootDir”, “${MY_CUSTOM_VARIABLE}” />
<reload-interval value=“3”/>
<auto-encode-requests value=“false”/>
<auto-encode-responses value=“false”/>
<enable-directory-browsing value=“false”/>
<enable-file-serving value=“true”/>
<pre-compile-jsps value=“false”/>
<enable-reloading value=“true”/>
<enable-serving-servlets-by-class-name value=“false” />
</web-ext>
还可以使用 extendedDocumentRoot 属性将多个节点上的 WebSphere 变量定义至相应的目录。
<jspAttributes xmi:id=“JSPAttribute_2” name=“extendedDocumentRoot”
value=“${MY_CUSTOM_VARIABLE}”/>
<jsp-attribute name=“extendedDocumentRoot”
value=“${MY_CUSTOM_VARIABLE}” />
其中,MY_CUSTOM_VARIABLE 是您要在多个节点上定义的 WebSphere 变量。<?xml version=“1.0” encoding=“UTF-8”?>
<com.ibm.ejs.models.base.extensions.webappext:WebAppExtension xmi:version=“2.0”
xmlns:xmi=“http://www.omg.org/XMI”
xmlns:com.ibm.ejs.models.base.extensions.webappext=“webappext.xmi” xmi:id=“WebAppExtension_1”
reloadInterval=“3”
reloadingEnabled=“true”
fileServingEnabled=“true”>
<webApp href=“WEB-INF/web.xml#WebApp_ID/”>
<fileServingAttributes xmi:id=“FileServingAttribute_1” name=“extendedDocumentRoot”
value=“/opt/extDocRootDir/”>
<jspAttributes xmi:id=“JSPAttribute_1” name=“extendedDocumentRoot”
value=“/opt/extDocRootDir/”>
<com.ibm.ejs.models.base.extensions.webappext:WebAppExtension>
<?xml version=“1.0” encoding=“UTF-8”?>
<web-ext
xmlns=“http://websphere.ibm.com/xml/ns/javaee”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd”
version=“1.0”>
<file-serving-attribute name=“extendedDocumentRoot” value=“/opt/extDocRootDir” />
<jsp-attribute name=“evalQuotedAndEscapedExpression” value=“true” />
<jsp-attribute name=“extendedDocumentRoot” value=“/opt/extDocRootDir”,“${MY_CUSTOM_VARIABLE}” />
<reload-interval value=“3”/>
<auto-encode-requests value=“false”/>
<auto-encode-responses value=“false”/>
<enable-directory-browsing value=“false”/>
<enable-file-serving value=“true”/>
<pre-compile-jsps value=“false”/>
<enable-reloading value=“true”/>
<enable-serving-servlets-by-class-name value=“false” />
</web-ext>
如果该请求是对欢迎文件的有效部分请求,那么将返回 404 错误。如果 JSP 文件位于 JAR 文件内并且 reloadEnabled 属性值设置为 true,那么 JAR 文件的时间戳记将用于 isOutDated 检查以进行重新编译。此参数的缺省值为 null。

然而,Java EE 5 或更高版本的模块可以在包含 Java EE 5 之前的文件并使用 .xmi 文件扩展名的应用程序中存在。
ibm-webservices-ext.xmi、ibm-webservices-bnd.xmi、ibm-webservicesclient-bnd.xmi、ibm-webservicesclient-ext.xmi 和 ibm-portlet-ext.xmi 文件继续使用 .xmi 文件扩展名。
sptcfgieClassId
指示 Internet Explorer 的 Java 插件 COM 类标识。
<jsp:plugin> 标记使用此值。缺省 classid 为 clsid:8AD9C840-044E-11D1-B3E9-00805F499D93。
javaEncoding
指定 .java 文件生成时所使用的编码,和 Java 编译器对其进行编译时所使用的编码。当 JSP 页面的页面编码与 UTF-8 不兼容时,请设置此参数。设置 javaEncoding 后,通过 -encoding 参数将编码传递到 Java 编译器。请注意,Jikes 不支持该编码。缺省值为 UTF-8。此参数需要生成 Java 源代码
jdkSourceLevel
此 JSP 引擎参数是在 WebSphere Application Server V6.1 中进行引入。尽管 compileWithAssert 在 V6.1 中仍然生效,但应使用此参数而不是 compileWithAssert 参数。
- 值 13 表示禁用 JDK 1.4、JDK 5.0、JDK 6.0 和 JDK 7.0 的所有新语言功能部件。
- 值 14 表示允许使用断言工具并禁用 JDK 5.0、JDK 6.0 和 JDK 7.0 的所有新语言功能部件。
- 值 15 表示允许使用断言工具并禁用 JDK 6.0 和 JDK 7.0 的所有新语言功能部件。
- 值 16 表示允许使用断言工具并禁用 JDK 7.0 的所有新语言功能部件。
- 值 17 表示允许使用 JDK 7.0 的新功能部件。
- 值 18 表示允许使用 JDK 8.0 的新功能部件。
jspClassLoaderLimit
WebSphere Application Server 为应用程序中的每个 JSP 创建 JSPExtensionClassLoader 对象。这可能导致这些对象使用的本机内存增加,从而可能产生 OutOfMemoryException。此整数值决定保持装入到内存中的 JSPExtensionClassLoader 对象数。
<jspAttributes xmi:id="JSPAttribute_1" name="jspClassLoaderLimit" value="1500"/>
jspClassLoaderExclusionList
虽然 jspClassLoaderLimit 指定保持装入到内存中的 JSPExtensionClassLoader 对象数,但此 JSP 值逗号分隔列表指示在不理会 jspClassLoaderLimit 所设置限制的情况下要卸装的 JSP。
<jspAttributes xmi:id="JSPAttribute_2" name="jspClassLoaderExclusionList" value="/test/RappHTML2.jsp,/test/RappHTML4.jsp"/>
jsp.file.extensions
对于扩展名并非标准扩展名(.jsp、.jspx、.jsw 和 .jsv)的 JSP 文件,可使用此参数配置扩展名。会将这些扩展名添加到标准扩展名中。
执行此操作的首选方法是在 web.xml 中创建 <jsp-property-group>,并为每一个扩展名添加 <url-pattern> 标记。
JSP 引擎可以处理用冒号或分号分隔的文件扩展名列表。例如,.ext1;.ext2:.extn
keepgenerated
指示保留在处理的转换阶段期间由 JSP 编译器生成的 Java 文件。此参数的缺省值为 false。此参数需要生成 Java 源代码
keepGeneratedclassfiles
指示保留在处理的转换阶段期间由 JSP 编译器生成的类文件。此参数的缺省值为 true。此参数需要生成 Java 源代码
modifyPageContextVariable
在已编译标记文件的转换阶段期间,JSP 容器会隐式地将 pageContext 变量用于 PageContext 对象。将 pageContext 变量用作标记文件中的隐式变量名称,不符合 JSP 规范。对于在其标记文件中使用局部 pageContext 变量的应用程序,如果发生编译错误,请将 modifyPageContextVariable 属性设置为 true,以在标记文件的生成 Java 代码中取消使用 pageContext 变量名称。
recompileJspOnRestart
决定在第一次请求文件时应用程序启动之后,是否重新转换和重新编译 JSP 文件。如果 recompileJspOnRestart 为 false,那么在首次请求 JSP 文件时仍将编译该 JSP 文件(如有必要),除非参数 disableJspRuntimeCompilation 为 true。此参数的缺省值为 false。
reloadEnabled
决定在修改了 JSP 文件及其依赖关系(请参阅 trackDependencies)时,是否在运行时转换和编译该 JSP 文件。
如果 reloadEnabled 为 false,那么在首次请求 JSP 文件时,若有必要,仍将编译该 JSP 文件,除非参数 disableJspRuntimeCompilation 为 true。此参数的缺省值为 false。
如果未指定此 JSP 引擎参数,那么将使用等效的 Web 容器参数,该参数用于进行 Web 模块类重新装入。但是,对于其部署描述符是在 Servlet 2.2 级别上的应用程序,缺省值为 true。执行此操作以获取对从 WebSphere Application Server V4.x 迁移的应用程序的支持。
reloadInterval
如果启用了重新装入,那么 reloadInterval 将决定查看 JSP 文件是否过时的检查操作之间的时间延迟。
例如,如果 reloadInterval 为 5,那么在发生 JSP 文件请求时,仅在当前请求与上一次 JSP 文件过时检查间隔超过 5 秒时,JSP 引擎才会执行检查。reloadInterval 越大,JSP 引擎需要检查重新装入 JSP 文件的频率越低。如果未指定此 JSP 引擎参数,那么将使用等效的 Web 容器参数,该参数用于进行 Web 模块类重新装入。但是,对于其部署描述符位于 Servlet 2.2 级别的应用程序,缺省值为 5 秒。执行此操作以获取对从 WebSphere Application Server V4.x 迁移的应用程序的支持。
reusePropertyGroupConfigOnInclude

scratchdir
指定在其中创建所生成的类文件的目录。
系统属性 com.ibm.websphere.servlet.temp.dir 用于在服务器范围内设置 scratchdir 选项。JSP 引擎 scratchdir 参数优先于系统属性 com.ibm.websphere.servlet.temp.dir。此参数的缺省值为 profile_root/temp。此参数需要生成 Java 源代码

例如,如果将 JSP 临时目录的位置更改为 profile_home/config/temp 或者将 JSP 临时目录放置在配置临时目录 profile_home/config/temp/temp 中,那么将会发生处理错误。
gotchatrackDependencies
如果启用重新装入,那么 trackDependencies 会决定 JSP 引擎是否跟踪对请求的 JavaServer Pages 文件的依赖项以及对 JSP 文件本身的修改。
- JSP 文件中静态包含的文件
- JSP 文件中引用的标记文件(不包括 JAR 中的标记文件)
- JSP 文件中引用的 TLD 文件(不包括 JAR 中的 TLD 文件)
useFullPackageNames
如果 useFullPackageNames 为 true,JSP 引擎使用完整包名生成并装入 JSP 类。
缺省情况下,在同一个包中生成所有 JSP 类。(有关更多信息,请参阅“生成的 .java 和 .class 文件的包和目录”主题)。当 JSP 类在同一个包中时,JSP 引擎的类装入器知道如何装入它们。
在同一个包中生成所有 JSP 类的缺省方法的益处在于,可以生成较小的文件系统路径。完整包名称可在不使用 JSP 文件属性的情况下,作为 Servlet 在 web.xml 文件中启用预编译 JSP 类文件的配置,从而产生单个类装入器(Web 应用程序的类装入器,用于装入所有此类 JSP 类)。同样,如果 JSP 引擎的配置属性 useFullPackageNames 和 disableJspRuntimeCompilation 都为 true,那么将使用单个类装入器装入所有 JSP 类(即使在 web.xml 文件中未将 JSP 文件配置为 servlet)。
如果 useFullPackageNames 设置为 true,那么批处理编译器将在 Web 模块的 WEB-INF 目录中生成 generated_web.xml 文件。此文件包含成功转换和编译的每个 JSP 文件的 Servlet 配置信息。您可以选择将信息复制到 Web 模块 web.xml 文件中,以便 Web 容器能够将 JSP 文件作为 Servlet 装入。请注意,如果以此方式将 JSP 文件配置为 Servlet,又修改了该 JSP 文件,那么在运行时不会重新装入该 JSP 文件。这是因为该 JSP 文件将视作正规的 Servlet,对它的请求将不通过 JSP 引擎传递。此参数需要生成 Java 源代码
useImplicitTagLibs
JSP 引擎隐式地将 tsx 和 jsx 识别为由 JSP 引擎提供的标记库的标记库前缀。如果将 tsx 或 jsx 用作客户标记库的前缀,那么客户的标记库将覆盖隐式标记库。但是,JSP 引擎仍高速缓存隐式标记库。显式地将此参数设置为 false,可告诉引擎不高速缓存隐式标记库并保存资源。此参数的缺省值为 true。
tsx 标记的缺省 URL 为 http://websphere.ibm.com/tags/tsx。jsx 标记的缺省 URI 为 http://websphere.ibm.com/tags/jsx。
您可能需要使用除其缺省 URI 外的其他 URI 来定义 tsx 或 jsx 标记库。此外,也可能需要使用不同的 URI 来定义相同的库前缀。在这两种情况下,您可以设置 com.ibm.wsspi.jsp.allowtaglibprefixredefinition 定制属性以避免转换错误。有关更多信息,请参阅有关 JavaServer Pages 定制属性的文档。
useInMemory
指定 JSP 引擎在系统内存中转换和编译 Java 代码。
- 将已转换的 Java 文件写入文件系统
- 从文件系统装入 Java 文件
- 将代码编译成类文件
- 将该类写入文件系统
- 将该类文件装入类装入器。

useJikes
指定是否将 Jikes 用于编译 Java 源代码。
注:Jikes 不随 WebSphere Application Server 一起交付。此参数的缺省值为 false。此参数需要生成 Java 源代码
usePageTagPool
启用或禁用基于单个 JavaServer Pages 复用定制标记处理程序。此参数的缺省值为 false。此参数需要生成 Java 源代码
useThreadTagPool
使用线程级别标记处理程序池时,可能会跨各个请求的单个 Web 模块中所有 JSP 页面间的单独发生的定制操作中使用标记处理程序。此参数的缺省值为 false。此参数需要生成 Java 源代码
- 标记处理程序的释放方法应该重置其状态并释放它使用的任何专用资源。JSP 引擎确保在对标记处理程序进行垃圾回收之前调用释放方法。
- 在 doEndTag 方法中,必须重置与此实例相关联的所有实例状态。
verbose
指示编译器在编译所生成的 Java 源代码时生成详细输出。将此参数设置为 true 时的影响是:将 -verbose 选项传递给 Java 编译器。此参数的缺省值为 false。此参数需要生成 Java 源代码
- 标记处理程序的释放方法应该重置其状态并释放它使用的任何专用资源。JSP 引擎确保在对标记处理程序进行垃圾回收之前调用释放方法。
- 在 doEndTag 方法中,必须重置与此实例相关联的所有实例状态。警告:使用页面或线程标记池时,在发生异常的情况下,不会调用 doEndTag 方法,并且如果有必须清除的服务状态,那么应该实现 TryCatchFinally 接口。