我尝试使用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">
答案 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">