这个web.xml错误是什么意思?

33
<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" 
    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_5.xsd">
引用的文件存在错误(http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd)。要获取更多信息,请在“问题视图”中右键单击消息,然后选择“显示详细信息...”。
在通过文件“web.xml”验证文件“web-app_2_5.xsd”时检测到以下错误。在大多数情况下,可以通过直接验证“web-app_2_5.xsd”来检测这些错误。但是,在web.xml的上下文中验证web-app_2_5.xsd时,可能会发生错误。
具体来说,我看到了一堆这样的错误: s4s-elt-character:模式元素中不允许出现非空白字符,除了xs:appinfo和xs:documentation之外。看到'var_U="未定义";'

有时候这是Eclipse的一个bug。看一下如何禁用验证: https://dev59.com/SMDqa4cB1Zd3GeqPd3St - 30thh
7个回答

69
如果您将j2ee替换为javaee,它将正常工作。 编辑:
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

编辑:

如需了解与此错误相关的任何进一步信息,请点击链接。在这里,您将找到用于Java EE部署描述符(web.xml)的模式。


4
这真是烦人! - jhohlfeld
3
@jhohlfeld 目前按发布版本列出的模式列表在这里:http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html 。Java <= 1.4 使用 J2EE 模式,而 >=1.5 的模式则使用 Java EE。请注意不要改变原意,并使翻译更加通俗易懂。 - Tim Perry
3
我有这份声明,但错误仍然存在。 - Ronye Vernaes
@Satzzadur Rahaman,你能解释一下为什么会出现错误吗? - Sanshayan
如果@RonyeVernaes的方法不起作用,请查看这个问题:https://dev59.com/CI_ea4cB1Zd3GeqPJAsq - Daniel Rodríguez
<web-app 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"     version = "2.4"> 我在这里遇到了错误。 - deepakl.2000

53

替换

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd">
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee;http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd">

解决方案是在URL之间加上分号

我相信你不会再次遇到这个错误 :)


4
这样做的理由是什么?错误确实消失了,但我不知道会有什么副作用。 - Wand Maker
1
当我使用这个声明时,验证器会说“找不到元素'web-app'的声明”。 - Ronye Vernaes
在我的情况下(是一个faces-config),在加入分号后,错误(仅在我的Linux Eclipse中而非Mac Eclipse)消失了,但出现了警告消息:文档中未引用语法约束(DTD或XML模式)。 - Kemin Zhou

12
我建议在两段之间添加;xsi:schemaLocation="http://java.sun.com/xml/ns/javaee;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 像这样:
:xsi:schemaLocation="http://java.sun.com/xml/ns/javaee;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

9
xsi:schemaLocation之间加上分号,就像下面显示的那样:

"http://java.sun.com/xml/ns/javaee;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

这解决了在<servlet-name>标签行中出现的错误。
"cvc-id.3: 在 'web-app' 元素中匹配身份约束 'web-common-servlet-name-uniqueness' 的标识约束字段,但该元素没有简单类型。"

2
在我的情况下,我已经用 http://xmlns.jcp.org/../.. 替换了

xsi:schemaLocation="http://java.sun.com/../.."

。祝好!

1

表面上看,schemaLocation 是错误的。解析它似乎会重定向到一个 HTML 页面而不是 XSD 模式。

我建议除非你真的想在运行时进行 XSD 验证,否则只需删除此行。请记住,相关部分将由您的 Servlet 容器验证。


0

将schemaLocation替换为以下内容已经解决了我的错误:

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/j2ee; http://xmlns.jcp.org/xml/ns/j2ee/web-app_2_4.xsd"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接