我正在努力自学Java,Java EE和Tomcat (经验丰富的C / Obj-C开发)
我在YouTube上关注了一个教程:http://www.youtube.com/watch?v=bd50C6XUnFw
我正在跑步:
我看到的错误是:
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上的教程遗漏了一些东西,我一定错过了一个论点。建议备受欢迎。
答案 0 :(得分:3)
我相信你在<servlet-name>...</servlet-name>
部分遗失了<servlet-mapping>
:
<servlet-mapping>
<servlet-name>My FirstServlet</servlet-name>
<url-pattern>/myfirstservlet</url-pattern>
</servlet-mapping>
答案 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 的阅读规范太难,那么请寻找可靠的教程;例如对于Java相关的东西,找一个由Oracle编写的。
1 - 标注规范“钝”的人可能忽略了规范的真正要点。以精确,精确和完整性为主要目标编写了良好的规范。像教程一样阅读的(所谓的)规范很可能无法正确实现其主要目标。
在这种情况下,Servlet spec 3.0(第14.4.11节)清楚地表明您需要一个servlet-name
元素来说明匹配请求映射到的Servlet。
(您很可能在其他教程中找到相同的信息,等等......)