Tomcat не может найти мой сервлет и бросает исключения, но почему?
Я пытаюсь попасть в веб-разработку Java, но, похоже, столкнулся со странной проблемой с Tomcat и чрезвычайно простым сервлетом. Журнал 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
делает хорошее чувство. Кажется, он не может найти мой сервлет. Однако сервлет, кажется, находится в нужном месте. Я ясно вижу это на WEB-INF / classes / MyServlet.класс!--7-->
Для справки, это веб.xml-файл, который я сейчас использование:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 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" version="2.5">
<description>My first web app in Java.</description>
<display-name>My Web App</display-name>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
</web-app>
как вы можете видеть, я держу вещи простыми... но он постоянно выбрасывает это исключение. Как выглядит веб-приложение с голыми костями в Java, какие компоненты мне не хватает?
обновление
SEVERE: Error deploying web application archive mywebapp.war
java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class MyServlet)
Я бросил мою .файл класса для Класс MyServlet, перестроил его с-target 1.5, переупаковал .война и все работало отлично.
большое спасибо за помощь! Хороший урок по устранению неполадок никому не повредит.
5 ответов
ну, учитывая обновленную информацию, кажется, что ваша проблема заключается в том, что компилятор, который вы использовали для своего класса, потенциально является более новой версией JDK, чем тот, на котором работает Tomcat.
проверьте версию JDK, используемую для запуска Tomcat, а затем посмотрите, можете ли вы что-то сделать, чтобы согласовать различия версий между этим и тем, который вы используете для компиляции сервлета.
Это должно прояснить вашу проблему.
строки ниже ровно из своего web.xml
? Tomcat находит отображение сервлета, которое отображает /myservlet
сервлету с именем"MyServlet
" но жалуется, что не может найти определения сервлета с этим именем. Вопросы случае. То, что вы предоставили, выглядит правильно, но дважды проверьте свой web.xml
чтобы убедиться, что дело это правильное. Дважды проверьте web.xml
где Tomcat использует его, в каталоге mywebapp/WEB-INF/web.xml
<servlet>
<servlet-name>MyServlet</servlet-name> <-- Check this name
<servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name> <-- Compare against this name
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
если это не так, дайте нам знать. Но эти имена чувствительны к регистру.
Если класс MyServlet находится в пакете, вы должны перечислить его с обозначением package-dot-class в узлах имени сервлета.
несколько советов:
- расширяет ли ваш класс сервлетов HttpServlet?
- как насчет прав файловой системы - любая возможная проблема там?
- возможно, попробуйте также переместить класс в именованный пакет (myservlet.MyServlet)
В общем, также попробуйте найти больше исключений в журналах.
может ли быть более старая версия web.xml
скрывается где-то, без <servlet>
блок?
хотя бы find . -type f -name web.xml
(или аналогичный для windows) в каталогах tomcat?