должно быть объявлено веб-приложение элемента (Servlet 4.0)

Я попытался использовать пространство имен 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.xml0.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">

person shui    schedule 17.11.2017    source источник
comment
Вы ориентируетесь на сервер приложений, который обрабатывает 4.0 спецификации сервлетов? На данный момент это только выпуск Glassfish 5.0 в сентябре 2017 года или Tomcat 9.   -  person stdunbar    schedule 17.11.2017
comment
@stdunbar Спасибо за ваше реле. Я использую Tomcat v9.0.1.   -  person shui    schedule 18.11.2017


Ответы (3)


IntelliJ не находит схемы, потому что они недоступны в указанных местах. Загрузите следующие схемы здесь : - web-app_4_0.xsd - web-common_4_0.xsd - web-fragment_4_0.xsd Затем выберите http://xmlns.jcp.org/xml/ns/javaee, нажмите Alt + Enter, выберите «Настроить внешний ресурс вручную» и выберите web-app_4_0.xsd в поле файла.

person Yordan Nalbantov    schedule 16.08.2019

Я опаздываю на вечеринку, но у меня есть возможное решение, которое еще не было предложено. Из того, что я прочитал выше, проблема может заключаться в том, что URL-адреса используют план http вместо https. Некоторые IDE отказываются загружать ресурсы через незащищенное соединение.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
    xmlns="https://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee
                        https://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    id="WebApp_ID"
    version="4.0">
person mihaim    schedule 08.06.2021

Я думаю, что это известная ошибка даже в самых последних версиях intellij IDEA (хотя они утверждают, что окончательная версия 2017.3 готова к Java EE8). По крайней мере, следующая ОШИБКА все еще остается «неразрешенной»: https://youtrack.jetbrains.com/issue/IDEA-182745

person ManuelF    schedule 13.01.2018