2014-11-02 1 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> 

Теперь, когда я снова начать и кота посетить страницу, я окажусь в/index вместо /testx.jsp. Но почему?

Я развертываю приложение на сервере Tomcat. Я пробовал Glassfish, и я не сталкивался с этой проблемой. Думаю, это проблема Tomcat?

ответ

2

Ваш XML правильный и действительный, но свойство xmlNamespaceAware вашего веб-приложения Tomcat. Контекст, вероятно, установлен в значение false (по умолчанию).

Я смог воспроизвести описанное вами поведение с помощью web.xml, который использует префиксы пространства имен для элементов, например, ваш пример. После изменения %CATALINA_HOME%/conf/context.xml, чтобы добавить атрибут xmlNamespaceAware, установленный в true <Context xmlNamespaceAware="true">, список приветственных файлов вел себя так, как ожидалось.

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

xmlNamespaceAware

Если значение этого флага верно, разбор web.xml и веб-fragment.xml файлы для данного веб-приложения будут namespace- осознанный. Обратите внимание, что файлы * .tld, * .jspx и * .tagx всегда анализируются с использованием анализатора, ориентированного на пространство имен, и файл tagPlugins.xml (если он есть) никогда не анализируется с использованием парсера, ориентированного на пространство имен. Обратите также внимание на то, что если вы включите этот флаг, вероятно, вы также должны включить xmlValidation. Если для свойства org.apache.catalina.STRICT_SERVLET_COMPLIANCE установлено значение true, значение по умолчанию этого атрибута будет истинным, иначе значение по умолчанию будет ложным. Установка этого атрибута в true приведет к штрафу за производительность.

+0

Зачем это было по умолчанию? –