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

Я пытался использовать пространство имен Servlet 4.0. Приложение работало хорошо, но IDEA обнаруживает ошибку: "Веб-приложение Element" должно быть объявлено ".

<?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_4_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-app_3_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">

3 ответа

Я опаздываю на вечеринку, но у меня есть возможное решение, которое еще не было предложено. Из того, что я прочитал выше, проблема может заключаться в том, что 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">

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 в поле файла.

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

Другие вопросы по тегам