Вчера я создал простой сервлет образа и попытался развернуть его. Я получаю сообщение об ошибке при запуске JBoss и другие ошибки при попытке вызвать сервлет.
Вчера я провел около 8 часов в поисках ответов в Интернете и пробовал разные сценарии. В итоге я усугубил свои проблемы с JBoss, а затем решил их, но я так и не заставил сервлет работать.
Сервлет - это com.controller.MyImageServlet и выглядит следующим образом:
package com.controller;
import javax.servlet.http.*;
/**
* Servlet implementation class MyImageServlet
*/
public class MyImageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public MyImageServlet() {
super();
}
// Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/* ... */
}
}
Теги, которые я добавил в web.xml, выглядят так:
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>com.controller.MyImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/CERTIMAGE/*</url-pattern>
</servlet-mapping>
При запуске сервера это единственный признак в журнале, что что-то не так:
01:59:25,328 WARN [JAXWSDeployerHookPreJSE] Cannot load servlet class: com.controller.MyImageServlet
Когда я пробую шаблон URL (http://localhost:9980/CERTIMAGE/1),), я получаю следующую трассировку стека в журнале (и в браузере):
01:59:39,640 INFO [[/]] Marking servlet ImageServlet as unavailable
01:59:39,640 ERROR [[ImageServlet]] Allocate exception for servlet ImageServlet
java.lang.ClassNotFoundException: com.controller.MyImageServlet
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at org.jboss.web.tomcat.service.TomcatInjectionContainer.newInstance(TomcatInjectionContainer.java:262)
at org.jboss.web.tomcat.service.TomcatInjectionContainer.newInstance(TomcatInjectionContainer.java:256)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1006)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:777)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Если я снова попробую шаблон URL, я получу следующее сообщение в журнале:
09:33:32,390 INFO [[ImageServlet]] Servlet ImageServlet is currently unavailable
Я подтвердил, что MyImageServlet.class находится в WAR-файле на WEB-INF / classes / com / controller. На самом деле, я даже добавил некоторый код в один из моих JSP, чтобы попытаться создать экземпляр Servlet и вызвать метод doGet. Это на самом деле работает и выводит правильные последовательности отладки в журнал, указывая, что были вызваны конструктор Servlet и методы doGet.
Я также попытался выполнить некоторые инструкции для создания / развертывания очень простого сервлета HelloWorld, и у него точно такая же проблема. Обратите внимание, что web.xml уже содержит сервлет, помещенный туда JBoss: org.jboss.web.tomcat.service.StatusServlet - этот сервлет не выдает никаких ошибок в журнале. В качестве эксперимента я удалил «.web» с этого пути и в итоге получил ту же ошибку, что и мой сервлет. Таким образом, может показаться, что JBoss не может найти мой сервлет по указанному пути. Просто для удовольствия, я пробовал всевозможные другие пути, такие как простой MyImageServlet, controller.MyImageServlet и другие. Кроме того, сервлет изначально назывался ImageServlet, но я попытался изменить имя, думая, что, возможно, возник конфликт с существующим ImageServlet. Во всех случаях поведение одинаково.
После всех моих вчерашних исследований я бы сказал, что это проблема с сервлет-контейнером JBoss, и я также узнал, что JBoss 5.1.0.GA должен поставляться в комплекте с контейнером сервлетов tomcat. Я сам установил JBoss на свой ПК (Windows XP) менее 2 месяцев назад (с сайта jboss.org) и использовал его почти как есть. Обратите внимание, что я работаю на JDK 1.6, поэтому я использовал версию установки jboss-jdk6. Я работаю в Windows, но также развертываюсь на виртуальном выделенном сервере Linux. Я развернул текущую версию своей программы, в том числе сервлет, в коробку Linux, но получаю точно такие же ошибки. Я не хочу просто переустанавливать JBoss, поскольку винить установку JBoss сложно, когда я получаю одинаковые ошибки в двух совершенно разных установках.
Я немного подозрительно отношусь к пакетному сервлет-контейнеру tomcat, потому что, используя eclipse, я не смог обнаружить никаких признаков того, что в JBoss есть Tomcat. Я нашел файл servlet-api.jar в каталоге JBoss common / lib. Это путь сборки затмения.
Одно, возможно, полезное замечание: ранее я использовал автономный сервер Tomcat для других проектов, использующих то же самое затмение, так что, может быть, это какая-то проблема с затмением? Но, как я уже сказал, я получаю те же ошибки при развертывании на сервере Linux, и этот процесс развертывания просто включает в себя файлы ftping на сервер, а затем помещает их в развернутый пакет war и перезапускает JBoss.
Спасибо за любую помощь, которую вы можете предоставить.