cvc-elt.1:找不到元素'web-app'的声明

Phy*_*Wai 6 java-ee

当我在Eclipse中创建新的动态Web项目时,自动创建web.xml显示以下错误:

cvc-elt.1:找不到元素'web-app'的声明

和这一行上的红色背景:

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会出现此错误以及如何摆脱此错误.我在我的项目中使用了Eclipse 3.1版,Apache Tomcat 5.0和JDK 1.4.我是Eclipse的新手.

Piy*_*jal 7

错误:cvc-elt.1.a:找不到元素“web-app”的声明

问题:

此错误与Eclipse IDE Dynamic Web Project的web.xml文件有关。 此错误的主要原因是不同的 Java Enterprise Edition (JEE) 支持。 从2019 年 8 月 13 日起, Java EE Servlet API由Jakarta EE Servlet API维护 ,因为这些包名称已更改为:


javax.servlet.*;---> 至 ---> jakarta.servlet.*;
javax.servlet.http.*;---> 至 --->jakarta.servlet.http.*;

您的 IDE 可能仍会填充旧的 doc type declaration xml 文件以与 javax 包兼容

解决方案:

如果您使用新版本的 Tomcat 或其他 Java 服务器应用程序,请检查它们是否使用新jakarta包或旧javax包。
Tomcat 10 已迁移到Jakarta EE,因此如果您使用 Tomcat 10,则可以使用jakarta doctype declaration下面提到的。

javax旧版本包的正确声明

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
Run Code Online (Sandbox Code Playgroud)

jakarta新版本包的正确声明

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="5.0">
Run Code Online (Sandbox Code Playgroud)
我正在处理的事情:

适用于企业 Java 和 Web 开发人员的 Eclipse IDE
版本:2021-12 (4.22.0)
内部版本号:20211202-1639*

Apache Tomcat
版本 10.0.7


小智 5

您需要将DOCTYPE元素添加到XML的开头:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
Run Code Online (Sandbox Code Playgroud)


Gar*_*son 4

我在 Eclipse 4.1、Apache Tomcat 7.x 和 JDK 1.6 上看到了这一点。它显然与缓存 XSD 文件有关。有些人提供了 web.xml 的替代语法,它使用 DTD 而不是模式。但我已经成功地采用了一种解决方案,该解决方案建议仅关闭缓存。更好的选择(也在最后一个链接)是手动下载并安装 XSD。

更新:我决定尝试自己下载其中一个 XSD,并尝试手动将其安装到 Eclipse XML 目录中。很明显,Java XSD 服务器出现了问题——这显然是 Eclipse 在尝试下载和缓存 XSD 时看到的情况。也许当 Oracle/Sun 齐心协力并且服务器重新开始工作时,Eclipse 将停止给出此错误。与此同时,我必须关闭缓存并看看我能走多远。

更新: Sun 服务器恢复一段时间后,下载 XSD 文件并将其存储在本地的某个半永久位置。然后进入 Eclipse 首选项,搜索 XML 目录,并为其提供对 XSD 文件的引用。我已经验证这会阻止 Eclipse 尝试下载和缓存该文件。如果您不能信任 Sun 服务器(而且显然您不能),那么这是最好的解决方案。