我有这个非常简单的web.xml文件:
<?xml version="1.0" encoding="UTF-8" ?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <welcome-file-list> <welcome-file>testx.jsp</welcome-file> </welcome-file-list> </web-app>
当我部署应用程序并访问上下文根目录时,将进入testx.jsp,这很好。但是在我的web.xml文件中,我不想使用全局名称空间,因此我按如下所示更改了web.xml:
<?xml version="1.0" encoding="UTF-8" ?> <ee:web-app xmlns:ee="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <ee:welcome-file-list> <ee:welcome-file>testx.jsp</ee:welcome-file> </ee:welcome-file-list> </ee:web-app>
现在,当我再次启动tomcat并访问该页面时,我将在/ index而不是/testx.jsp中找到自己。但为什么?
我正在将应用程序部署到Tomcat服务器。我尝试了Glassfish,但没有遇到此问题。我猜这是一个Tomcat问题?
您的XML是正确和有效的,但是xmlNamespaceAwareTomcat Web应用程序上下文的属性可能设置为false(默认值)。
xmlNamespaceAware
我能够重现您使用web.xml描述的行为,该web.xml使用元素的名称空间前缀,例如您的示例。修改%CATALINA_HOME%/conf/context.xml以添加xmlNamespaceAware属性设置为true后<Context xmlNamespaceAware="true">,welcome-file-list的行为与预期的一样。
%CATALINA_HOME%/conf/context.xml
<Context xmlNamespaceAware="true">
https://tomcat.apache.org/tomcat-7.0-doc/config/context.html
xmlNamespaceAware 如果此标志的值为true,则此Web应用程序的web.xml和web- fragment.xml文件的解析将支持名称空间。请注意,。tld,。jspx和* .tagx文件始终使用可识别名称空间的解析器进行解析,而tagPlugins.xml文件(如果有)永远不会使用可识别名称空间的解析器进行解析。还要注意,如果打开此标志,则可能还应该打开xmlValidation。如果org.apache.catalina.STRICT_SERVLET_COMPLIANCE系统属性设置为true,则此属性的默认值为true,否则为false。将此属性设置为true将导致性能下降。
如果此标志的值为true,则此Web应用程序的web.xml和web- fragment.xml文件的解析将支持名称空间。请注意,。tld,。jspx和* .tagx文件始终使用可识别名称空间的解析器进行解析,而tagPlugins.xml文件(如果有)永远不会使用可识别名称空间的解析器进行解析。还要注意,如果打开此标志,则可能还应该打开xmlValidation。如果org.apache.catalina.STRICT_SERVLET_COMPLIANCE系统属性设置为true,则此属性的默认值为true,否则为false。将此属性设置为true将导致性能下降。