41

我的 web.xml 文件有问题。错误:

元素类型“web-app”的内容必须匹配“(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping *,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env- ref*,resource-ref*,security-constraint*,login-config?,security -role*,env-entry*,ejb-ref*,ejb-local-ref*)”。

但是,我的 web.xml 文件按照错误所说的顺序排列。

这是我的 web.xml:

<!DOCTYPE web-app PUBLIC
         "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
         "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
        <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    </context-param>
      
    <context-param>
        <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
        <param-value>resources.application</param-value>
        <description></description>
    </context-param>

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
      
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>

</web-app>

我使用 WebLogic 10.3.4。关于这个问题的任何想法?

4

12 回答 12

79

一个非常简单的解决方案可以解决我的问题。

更改架构引用

<!DOCTYPE web-app PUBLIC
   "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
   "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app></web-app>

对此

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

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
         version="2.5" 
         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"> 
         // ...
         // your all content goes here

</web-app>
于 2014-11-06T11:19:17.927 回答
21

我在 Eclipse 中遇到了同样的问题,在将标签重新排序为 DTD 之后,错误就消失了。您也可以尝试重新启动 Eclipse。

于 2013-08-04T00:28:48.167 回答
8

I observed that DTD at Web.xml required an specific order for elements servlet, servlet-mapping, etc.

So, I started adding each element from Design View of XML file at ECLIPSE.

It works!. You can build your XML file in a way it likes to DTD.

于 2014-12-14T23:37:31.563 回答
7

我刚刚删除了<!DOCTYPE .. >标签,它对我有用。其实我不知道有多重要。。

于 2016-08-02T10:59:58.073 回答
4

I followed someone's suggestion for "copy all" - "cut" - "paste" - "save" and this seemed to clear up the message. Comparing the before and after files, I found that in the "pasted" version all tabs had been converted to spaces. So it seems that the web.xml validator in Eclipse does not like tabs.

于 2014-03-12T15:31:16.500 回答
2

像这样重新排列你的代码......

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

 <context-param>   
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
  </context-param>

  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
    <description></description>>
  </context-param>

  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
 <servlet-mapping>
   <servlet-name>Faces Servlet</servlet-name>
   <url-pattern>/faces/*</url-pattern>
 </servlet-mapping>

如果您有更多的 servlet,则在映射上方定义您的 servlet,然后再映射您的 servlet。

于 2013-12-19T11:53:01.437 回答
2

最后,我通过在 Eclipse 中使用设计视图而不是直接在源视图中的 web.xml 中键入来配置 servlet 和 servlet 映射,从而解决了这个问题。希望这可以帮助。

于 2018-04-05T11:59:55.643 回答
2

这部分被删除并解决了错误。

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  "http://java.sun.com/dtd/web-app_2_3.dtd" >
于 2018-05-20T14:53:39.803 回答
1

如果您正在处理同样的问题并且发现 web.xml 语法没有任何问题,我建议您执行以下操作:“剪切(web.xml 中的所有内容)”、“粘贴到记事本”-“从记事本复制”- “粘贴回 web.xml” - “最后保存 web.xml”。必须爱上那些看不见的字符、标签等。

于 2014-09-29T21:51:39.450 回答
1

尝试上述解决方案时不要忘记保存文件。使用最新的模式描述符并保存后,我的错误就消失了:

<?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_3_1.xsd"
    id="WebApp_ID" version="3.1">

    <!-- your content here -->

</web-app>`
于 2018-09-11T01:52:20.340 回答
0

我刚刚删除了 DOCTYPE 并重新启动了 Eclipse。有效。试试看

于 2021-08-20T06:06:31.450 回答
0

而不是使用“xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"”

利用

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

于 2021-11-23T07:09:17.330 回答