Tomcat无法找到我的Servlet并抛出exception,但为什么呢?

我正在尝试进入Java Web开发,但似乎遇到了Tomcat和一个非常简单的servlet的奇怪问题。 每当我尝试加载应用程序时,catalina日志就会出现这种情况:

Caused by: java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name MyServlet at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:2393) at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:2373) ... 40 more Mar 4, 2009 10:37:58 AM org.apache.catalina.startup.ContextConfig applicationWebConfig SEVERE: Parse error in application web.xml file at jndi:/localhost/mywebapp/WEB-INF/web.xml java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name MyServlet 

做得体面。 它似乎找不到我的servlet。 但是,servlet似乎在正确的位置。 我可以在WEB-INF / classes / MyServlet.class中清楚地看到它

作为参考,这是我目前使用的web.xml文件:

   My first web app in Java. My Web App  MyServlet MyServlet   MyServlet /myservlet   

正如你所看到的,我保持简单……但它不断抛出这个exception。 一个简陋的Web应用程序在Java中是什么样的,我错过了哪些组件?

更新

为了绝对确定它不是某种神器,我启动了一个新的Tomcat副本并再次尝试。 这样做后,这开始出现在日志文件中:

 SEVERE: Error deploying web application archive mywebapp.war java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class MyServlet) 

我把我的.class文件转储到MyServlet类,用-target 1.5重新构建它,重新打包.war,一切都很完美。

非常感谢你的帮助! 排除故障的好教训从不伤害任何人。

好吧,鉴于更新的信息,您的问题似乎是您用于类的编译器可能是运行Tomcat的JDK的新版本。

检查用于启动Tomcat的JDK版本,然后查看是否可以执行某些操作来协调它与您用于编译servlet的版本之间的版本差异。

这应该可以解决你的问题。

以下行是否完全来自您的web.xml ? Tomcat找到将/myservlet映射到名为“ MyServlet ”的servlet的servlet映射,但是抱怨它找不到具有该名称的任何servlet定义。 案件很重要。 您提供的内容看起来是正确的,但请仔细检查您的web.xml以确保大小写正确。 在mywebapp/WEB-INF/web.xml目录中仔细检查Tomcat使用它的mywebapp/WEB-INF/web.xml

  MyServlet <-- Check this name MyServlet   MyServlet <-- Compare against this name /myservlet  

如果不是这样,请告诉我们。 但这些名称区分大小写。

如果MyServlet类在包中,则应在servlet-name节点中使用package-dot-class表示法列出它。

几点提示:

  • 你的servlet类是否扩展了HttpServlet?
  • 文件系统权限怎么样 – 那里有任何可能的问题?
  • 也许,也尝试将类移动到命名包(myservlet.MyServlet)

通常,还会尝试在日志中查找更多exception。

可能有一个旧版本的web.xml潜伏在某处,没有块?

或许做一个find . -type f -name web.xml 在tomcat的目录中使用find . -type f -name web.xml (或类似于windows)?