Tomcat 5.5 Не находи мой сервлет - PullRequest
4 голосов
/ 08 июля 2010

Я скомпилировал исходный код в класс Files, затем поместил в папку:

Tomcat 5.5\WEB-INF\ROOT\classes\Files.class

И добавил это в файл web.xml:

<servlet>
    <servlet-name>Files</servlet-name>
    <servlet-class>Files</servlet-class>
</servlet>

Но когда я попытался получить доступ к URL http://localhost:8080/Files, я получил эту ошибку от Tomcat: Tomcat 5.5 404 Ошибка http://img251.imageshack.us/img251/5042/tomcat404.png


Обновление : после добавления <servlet-mapping> I 'm теперь получает следующую ошибку:

exception

javax.servlet.ServletException: Error allocating a servlet instance
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:837)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1287)
java.lang.Thread.run(Unknown Source)

root cause

java.lang.NoClassDefFoundError: IllegalName: /Files
java.lang.ClassLoader.preDefineClass(Unknown Source)
java.lang.ClassLoader.defineClassCond(Unknown Source)
java.lang.ClassLoader.defineClass(Unknown Source)
java.security.SecureClassLoader.defineClass(Unknown Source)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1960)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:931)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1405)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1284)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:837)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1287)
java.lang.Thread.run(Unknown Source)

Ответы [ 4 ]

3 голосов
/ 08 июля 2010

Вам также необходимо отображение сервлета:

<servlet-mapping>
  <servlet-name>Files</servlet-name>
  <url-pattern>/Files</url-pattern>
</servlet-mapping>
3 голосов
/ 08 июля 2010
root cause
java.lang.NoClassDefFoundError: IllegalName: /Files

Это означает, что данное определение класса не может быть найдено, поскольку оно имеет недопустимое имя /Files. Это, в свою очередь, означает, что вы изменили <servlet-class> на /Files. Это не верно. Вы в основном указываете сервлет-контейнеру объявить и создать экземпляр сервлета следующим образом:

/Files Files = new /Files();

Это уже не скомпилируется. Полное отображение должно выглядеть так:

<servlet>
    <servlet-name>instanceName</servlet-name>
    <servlet-class>com.example.ServletClass</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>instanceName</servlet-name>
    <url-pattern>/urlPattern</url-pattern>
</servlet-mapping>

Что следует интерпретировать в необработанном коде Java следующим образом:

com.example.ServletClass instanceName = new com.example.ServletClass();

<servlet-class> должен обозначать полное имя класса , включая любой пакет. <servlet-name> должен обозначать уникальное имя экземпляра . <url-pattern> должен обозначать шаблон URL , для которого сервлет-контейнер должен вызывать этот сервлет.

3 голосов
/ 08 июля 2010

Вам также необходимо определить

<servlet-mapping>
  <servlet-name>Files</servlet-name>
  <url-pattern>/Files</url-pattern>
</servlet-mapping>

Чтобы сопоставить шаблон URL с сервлетом

0 голосов
/ 10 мая 2013

Кроме того, в вашей папке классов в WEB-INF убедитесь, что вы создали папку, имя которой совпадает с именем пакета классов, и поместили все классы в эту папку.В файле web.xml используйте

<servlet> <servlet-name>File</servlet-name> <servlet-class>package.File</servlet-class> </servlet>

для ссылки на ваш сервлет в папке классов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...