Проблема развертывания сервлетов в JBoss 5.1 на Eclipse - PullRequest
1 голос
/ 03 июня 2010

Вчера я создал простой сервлет образа и попытался развернуть его. Я получаю сообщение об ошибке при запуске 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.

Спасибо за любую помощь, которую вы можете предоставить.

1 Ответ

1 голос
/ 26 мая 2012

Потратив последние пару недель на решение подобных проблем, я бы оглянулся назад и предложил своему прошлому себе попробовать одно из следующих действий:

  1. Убедитесь, что исходная папка указана в eclipse Deployment Сборка (щелкните правой кнопкой мыши проект, выберите Свойства, затем нажмите Сборка развертывания).

  2. Убедитесь, что исходная папка включена в путь к классу сервера (дважды щелкните Сервер, нажмите «Открыть конфигурацию запуска», затем выберите вкладку ClassPath).

Однако этого проекта давно нет, поэтому я не смогу сказать наверняка.

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