2014-11-02 54 views
2

我有这个非常简单的web.xml文件:当我不使用全局名称空间时,为什么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,访问该页面,我会发现自己在/索引而不是/testx.jsp。但为什么?

我正在将应用程序部署到Tomcat服务器。我尝试了Glassfish,但没有遇到这个问题。我想这是一个Tomcat问题?

回答

2

您的XML是正确且有效的,但Tomcat Web应用程序Context的xmlNamespaceAware属性可能设置为false(默认)。

我能够重现你所描述的行为,使用名称空间前缀作为元素的web.xml,就像你的例子。在修改%CATALINA_HOME%/conf/context.xml以添加设置为true的xmlNamespaceAware属性<Context xmlNamespaceAware="true">后,welcome-file-list按预期工作。

https://tomcat.apache.org/tomcat-7.0-doc/config/context.html

xmlNamespaceAware

如果这个标志的值为true,web.xml中的 网络fragment.xml之文件的解析,并为此Web应用程序将是 namespace-知道的。请注意,* .tld,* .jspx和* .tagx文件始终使用支持命名空间的解析器进行分析,并且从不使用支持名称空间的解析器对tagPlugins.xml文件 (如果有)进行分析。还请注意 如果您打开此标志,您应该也可以打开 xmlValidation。如果org.apache.catalina.STRICT_SERVLET_COMPLIANCE 系统属性设置为true,则此属性的默认值为 将为true,否则默认值为false。将此 属性设置为true将导致性能损失。

+0

为什么会在默认情况下关闭? – 2014-11-04 06:57:17

相关问题