2

我试图同时自学 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(在 path /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>

该错误表明问题是 null 它在</servlet-mapping>

所以我唯一的假设是 YouTube 上的教程遗漏了一些东西,我一定遗漏了一个论点。强烈欢迎提出建议。

4

3 回答 3

3

我相信您<servlet-name>...</servlet-name><servlet-mapping>以下部分中缺少:

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

查看基本的 web.xml 文件

于 2013-12-29T02:44:05.823 回答
1

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

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

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

于 2013-12-29T02:43:30.237 回答
0

强烈欢迎提出建议。

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

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

  3. 如果阅读规范对您来说太难了1,请寻找可靠的教程;例如,对于与 Java 相关的内容,请查找由 Oracle 编写的内容。


1 - 将规范标记为“钝”的人可能错过了规范的真正意义。一个好的规范是以准确性、精确性和完整性为主要目标编写的。读起来像教程的(所谓的)规范很可能无法正确满足其主要目标。


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

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

于 2013-12-29T02:46:44.593 回答