必须声明元素web-app(Servlet 4.0)

时间:2017-11-17 11:12:17

标签: servlets java-ee web.xml servlet-4

我尝试使用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-app_4_0.xsd"
         version="4.0">
    ...
    ...
</web-app>

Snapshot (我无法直接发布图片。)

当我将版本更改为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 Schemas for Java EE Deployment Descriptors# Using Java EE Schemas

  

所有Java EE 7和更新的部署描述符架构共享命名空间http://xmlns.jcp.org/xml/ns/javaee/。每个架构文档都包含一个包含规范版本的版本属性。 例如,Servlet规范的XML Schema文档包含版本属性值“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 个答案:

答案 0 :(得分:1)

我认为这是一个已知的错误,即使在最新版本的intellij IDEA中也是如此(尽管他们声称2017.3最终是Java EE8准备就绪)。 至少以下BUG仍然“未解决”: https://youtrack.jetbrains.com/issue/IDEA-182745

答案 1 :(得分:1)

IntelliJ找不到架构,因为它们在指定的位置不可用。从here下载以下架构:  -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。

答案 2 :(得分:0)

我迟到了,但我有一个尚未给出的可能解决方案。根据我上面的阅读,问题可能是 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">