Я попытался использовать пространство имен Servlet 4.0. Приложение работало хорошо, но IDEA обнаруживает ошибку: Необходимо объявить "элемент веб-приложения".
<?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-appapache-tomcat-9.0.1/webapps/examples/WEB-INF/web.xml
0.xsd"
version="4.0">
...
...
</web-app>
Снимок (я не могу публиковать изображения напрямую).
Когда я сменил версию на 3.1, все заработало:
<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-appversion="4.0"
1.xsd"
version="3.1">
Согласно Java EE: схемы XML для Java EE Дескрипторы развертывания # Использование схем Java EE:
Все схемы дескрипторов развертывания Java EE 7 и новее используют пространство имен http://xmlns.jcp.org/xml/ns/javaee/. Каждый документ схемы содержит атрибут версии, который содержит версию спецификации. Например, документ схемы XML для спецификации сервлета содержит значение атрибута версии "3.1", относящееся к конкретной версии спецификации, а также к самому документу схемы.
version="4.0"
не поддерживается? Я использую IntelliJ IDEA 2017.2.5 + javax.servlet-api 4.0 + Apache Tomcat v9.0.1.
Обновлено: я нашел пример файла web.xml (в apache-tomcat-9.0.1/webapps/examples/WEB-INF/web.xml
):
<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_4_0.xsd"
version="4.0"
metadata-complete="true">