严重:应用程序web.xml中的解析错误

时间:2013-12-29 02:25:14

标签: java tomcat web.xml saxparseexception

我正在努力自学Java,Java EE和Tomcat (经验丰富的C / Obj-C开发)

我在YouTube上关注了一个教程:http://www.youtube.com/watch?v=bd50C6XUnFw

我正在跑步:

  • Apache Tomcat / 7.0.47
  • JVM 1.7.0_45-b18
  • Mac OS X 10.8.5 x86_64

我看到的错误是:

SEVERE: Parse error in application web.xml file at jndi:/localhost/FirstServlet/WEB-INF/web.xml
org.xml.sax.SAXParseException; systemId: jndi:/localhost/FirstServlet/WEB-INF/web.xml; lineNumber: 8; columnNumber: 19; Error at (8, 19) : Can't convert argument: null
    at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2687)
    at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2719)
    at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1054)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609)

如视频所示,web.xml(路径/Library/Tomcat/webapps/firstservlet/WEB-INF)是:

<web-app>
    <servlet>
        <servlet-name>My FirstServlet</servlet-name>
        <servlet-class>FirstServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <url-pattern>/myfirstservlet</url-pattern>
    </servlet-mapping>
</web-app>

错误表明问题是空的,它在</servlet-mapping>

之后命中

所以我唯一的假设是YouTube上的教程遗漏了一些东西,我一定错过了一个论点。建议备受欢迎。

3 个答案:

答案 0 :(得分:3)

我相信你在<servlet-name>...</servlet-name>部分遗失了<servlet-mapping>

<servlet-mapping>
    <servlet-name>My FirstServlet</servlet-name>
    <url-pattern>/myfirstservlet</url-pattern>
</servlet-mapping>

查看basic web.xml file

答案 1 :(得分:1)

在元素servlet-mapping之间缺少元素servlet-name

<servlet-mapping>
     <servlet-name>MyFirstServlet</servlet-name>
     <url-pattern>/myfirstservlet</url-patter>
</servlet-mapping>

servlet名称是一种id,它在url和guven Servlet类之间创建关系。

答案 2 :(得分:0)

  

建议受到强烈欢迎。

  1. 不要依赖单一教程作为您唯一的信息来源......

  2. 这些东西是指定的。如果您对“辅助来源”(例如可疑教程视频)的准确性存有疑虑,请查看规范。

  3. 如果您对 1 的阅读规范太难,那么请寻找可靠的教程;例如对于Java相关的东西,找一个由Oracle编写的。


  4. 1 - 标注规范“钝”的人可能忽略了规范的真正要点。以精确,精确和完整性为主要目标编写了良好的规范。像教程一样阅读的(所谓的)规范很可能无法正确实现其主要目标。


    在这种情况下,Servlet spec 3.0(第14.4.11节)清楚地表明您需要一个servlet-name元素来说明匹配请求映射到的Servlet。

    (您很可能在其他教程中找到相同的信息,等等......)