JavaServer Pages 静态文件访问的 Web 容器配置
Web 容器根据应用程序配置,在多达四个不同的位置搜索静态文件和 JavaServer Pages (JSP) 文件。 此搜索将找到适当的资源,来处理入站请求和从以下 API 返回的结果:
URL ServletContext.getResource(String path)
Set ServletContext.getResourcePaths(String path)
注意: 仅当启用了 fileServing 属性并且应用程序未包含
/* servlet 映射时,才会搜索静态文件。 此外,除了在 web.xml 文件中定义的任何其他模式,JSP 文件还包括具有以下扩展名的文件- .jsp
- .jspx
- .jsw
- .jsv
具有优先级顺序的四个位置如下所示:
- 应用程序 WAR 目录
- Web 容器首先在应用程序 WAR 目录中搜索请求的资源。 但是,您不能为入站请求处理 WEB-INF 或者 META-INF 目录下的资源,尽管可以使用 getResource() 和 getResourcePaths() 方法来访问它们。
- 预分段文档根
- Web 容器接着会搜索任何应用程序定义的预分段文档根。 在位于应用程序的 WEB-INF 目录中的
ibm-web-ext.xmi文件中,定义预分段文档根。 为静态文件或 JSP 文件定义预分段文档根,如下所示:Static files: <fileServingAttributes xmi:id="<user-provided name>" name="preFragmentExtendedDocumentRoot" value="<user provided value>"/>JSP files: <jspAttributes xmi:id="<user provided name>" name="preFragmentExtendedDocumentRoot" value=<user provided value>"/><user provided name>可以是目录列表和/或 JAR 列表。 例如:
如果<fileServingAttributes name="extendedDocumentRoot" value="C:\EDR_directory,C:\my\path\to\jarEDR.jar"/><user provided name>仅包含目录列表,并且该目录包含 JAR 文件,那么它不会在这些 JAR 文件中进行搜索。 它仅在该目录内但在所有 JAR 文件外搜索静态文件和 JSP 文件。 如果静态或 JSP 文件位于 JAR 中,那么静态或 JSP 文件不能位于 JAR 文件的 META-INF 文件夹中,因为它是受限文件夹,并且<user provided name>应该包含 JAR 文件的完整路径。注意: 片段前文档根是 WebSphere® Application Server V 9.0中的新功能。
- 应用程序 WAR 文件中 WEB-INF/Lib 目录下的片段的 META-INF/resources 目录
- Web 容器在搜索预分段文档根后,会搜索 Web 片段。 Web 片段包含应用程序 WEB-INF/lib 目录中的 JAR 文件。 该 JAR 可能包含 JAR 文件中定义的 META-INF/resources 目录中的静态资源。 要防止 Web 容器搜索 META-INF/resources 目录,请将 com.ibm.ws.webcontainer.SkipMetaInfResourcesProcessing Web 容器定制属性设置为
true。 此定制属性的缺省值为 false。com.ibm.ws.webcontainer.SkipMetaInfResourcesProcessing = true注意: 应用程序 WAR 文件中 WEB-INF/Lib 目录下片段的 META-INF/resources 目录是 WebSphere Application Server 版本 9.0中的新功能。
- 扩展文档根
- 最后,Web 容器会搜索定义为扩展文档根的任何应用程序。 扩展文档根在先前发行版中可用,且在位于应用程序 WEB-INF 目录中的
ibm-web-ext.xmi文件中定义。 为静态文件或 JSP 文件定义扩展文档根,如下所示:Static files: <fileServingAttributes xmi:id="<user provided name>" name="extendedDocumentRoot" value="<user provided value>"/>JSP files: <jspAttributes xmi:id="<user provided name>" name="extendedDocumentRoot" value=<user provide value>"/>com.ibm.ws.webcontainer.SkipMetaInfResourcesProcessing = true<user provided name>可以是目录列表和/或 JAR 列表。 例如:
如果<fileServingAttributes name="extendedDocumentRoot" value="C:\EDR_directory,C:\my\path\to\jarEDR.jar"/><user provided name>仅包含目录列表,并且该目录包含 JAR 文件,那么它不会在这些 JAR 文件中进行搜索。 它仅在该目录内但在所有 JAR 文件外搜索静态文件和 JSP 文件。 如果静态或 JSP 文件位于 JAR 中,那么静态或 JSP 文件不能位于 JAR 文件的 META-INF 文件夹中,因为它是受限文件夹,并且<user provided name>应该包含 JAR 文件的完整路径。注意: 您可以将 com.ibm.ws.webcontainer.ServeWelcomeFileFromExtendedDocumentRoot 定制属性设置为 true ,以从静态文件扩展文档根目录启用服务静态欢迎页面。 此定制属性的缺省值为 false。com.ibm.ws.webcontainer.ServeWelcomeFileFromExtendedDocumentRoot = true当 com.ibm.ws.webcontainer.ServeWelcomeFileFromExtendedDocumentRoot 属性设置为true时, Web 容器会在静态文件扩展文档根中搜索静态欢迎文件,来为包含有效的部分 URL 的请求提供服务。 例如,如果请求仅指定应用程序上下文,并且欢迎文件指定为 index.html,那么当从静态文件扩展文档中提供 index.html 时,必须设置此属性。
缺省值为 false。com.ibm.ws.webcontainer.enablepartialurltoextendeddocumentroot = true如果此属性设置为true,那么在确定入站请求是否是针对有效的部分 URL 时,Web 容器会包括静态文件扩展文档根的内容。 例如,如果请求指定了以 /<application context>/<text> 结尾的 URL ,而
<text>并未映射到 servlet 或静态文件,那么只有<text>是应用程序的有效目录时,网络容器才会将 URL 视为有效的部分 URL。 因此如果目录<text>仅存在于静态文件扩展文档根中,必须设置此属性,以使 URI 被视为有效部分 URI。重要信息: 静态文件片段前文档根不需要这些属性。 此外,确定有效部分 URL 时,Web 容器不会考虑 JSP 预分段和扩展文档根。