一尘不染

当我不使用全局名称空间时,为什么web.xml不起作用?

tomcat

我有这个非常简单的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问题?


阅读 255

收藏
2020-06-16

共1个答案

一尘不染

您的XML是正确和有效的,但是xmlNamespaceAwareTomcat Web应用程序上下文的属性可能设置为false(默认值)。

我能够重现您使用web.xml描述的行为,该web.xml使用元素的名称空间前缀,例如您的示例。修改%CATALINA_HOME%/conf/context.xml以添加xmlNamespaceAware属性设置为true后<Context xmlNamespaceAware="true">,welcome-file-list的行为与预期的一样。

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将导致性能下降。

2020-06-16