2010-07-07 2 views
3

Я скомпилированный исходный код в классе Files, а затем гнал в папке:Tomcat 5.5 Не Find My Servlet

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 Error http://img251.imageshack.us/img251/5042/tomcat404.png


Update: после добавления <servlet-mapping> Теперь я получаю следующее сообщение об ошибке:

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) 
+0

Заметим, что кладя классы сервлетов в пакете по умолчанию не приветствуется. Tomcat является снисходительным в этом, но в некоторых конфигурациях Tomcat и в других сервлет-контейнерах вы рискуете, что сервлет не может быть установлен/загружен. Всегда ставьте классы, которые должны быть загружены/импортированы другими классами внутри пакета. – BalusC

+0

Я знаю, но это всего лишь простой тест. Тогда я не использовал пакеты. –

+0

Это может быть основной причиной этой проблемы. Чтение журналов запуска сервера в '/ logs'. – BalusC

ответ

3
root cause 
java.lang.NoClassDefFoundError: IllegalName: /Files 

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

/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

Вы также должны определить

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

Чтобы соответствовать шаблону URL-адрес в сервлет

+0

я все еще получаю ту же ошибку. **.? (** –

+0

Вы, возможно, потребуется перезапустить Tomcat, или по крайней мере перезагрузить приложение Пробовали ли вы, что –

+0

Конечно, я уже попробовал все, перекомпилировать и перезапустить сервер –

3

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

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

я все еще получаю ту же ошибку **. (** –

0

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

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

ссылаться вы сервлет в папке классов

Смежные вопросы