Проблемы с развертыванием приложения Spring 2 в Apache Tomcat 6 - PullRequest
0 голосов
/ 24 августа 2010

Я пытаюсь запустить проект Spring 2 + Struts 2 + Hibernate 3, но получаю исключение при развертывании его в Apache Tomcat 6.0 в Eclipse (версия Helios).

Исключение Tomcatпри запуске:

GRAVE: Error configurando escuchador de aplicación de clase org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4078)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
    at org.apache.catalina.core.StandardService.start(StandardService.java:519)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
24-ago-2010 12:22:04 org.apache.catalina.core.StandardContext listenerStart
GRAVE: Se ha saltado la instalación de escuchadores de aplicación debido a error(es) previo(s)
24-ago-2010 12:22:04 org.apache.catalina.core.StandardContext start
GRAVE: Error listenerStart
24-ago-2010 12:22:04 org.apache.catalina.core.StandardContext start
GRAVE: Falló en arranque del Contexto [/web] debido a errores previos

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="struts_blank" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>Struts Blank</display-name>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml</param-value>
    </context-param>

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

Я долго гуглял и пробовал некоторые возможные решения, которые нашли, но они не сработали.Я собираюсь объяснить, что я пытался, и получено исключение:

Первый способ: в конфигурации сервера Tomcat на вкладке classpath я добавил spring-web-2.5.1.jar (точно так же, как и в проекте) в качестве внешнего jar в разделе записей Bootstrap.Затем, когда Apache вызывает это исключение, когда запускается

GRAVE: Error configurando escuchador de aplicación de clase org.springframework.web.context.ContextLoaderListener
java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
    at java.lang.ClassLoader.findBootstrapClass(Native Method)
    at java.lang.ClassLoader.findBootstrapClass0(ClassLoader.java:900)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:314)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1560)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4078)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
    at org.apache.catalina.core.StandardService.start(StandardService.java:519)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
24-ago-2010 12:42:36 org.apache.catalina.core.StandardContext listenerStart
GRAVE: Se ha saltado la instalación de escuchadores de aplicación debido a error(es) previo(s)
24-ago-2010 12:42:36 org.apache.catalina.core.StandardContext start
GRAVE: Error listenerStart
24-ago-2010 12:42:36 org.apache.catalina.core.StandardContext start
GRAVE: Falló en arranque del Contexto [/web] debido a errores previos

Так что я добавил, в том же месте и пути, servlet-api-2.4.jar.Затем я получаю следующее исключение:

INFO: Starting Servlet Engine: Apache Tomcat/6.0.29
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;
    at org.apache.catalina.core.StandardHost$MemoryLeakTrackingListener.lifecycleEvent(StandardHost.java:561)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4625)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
    at org.apache.catalina.core.StandardService.start(StandardService.java:519)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    ... 6 more

Второй способ: на вкладке classpath я добавляю свой проект и получаю то же исключение, опубликованное ранее (java.lang.reflect.InvocationTargetException).

Почему Apache Tomcat не читает правильно библиотеки проекта?Может быть, я что-то упускаю из виду или что-то не так вообще.Не могли бы вы помочь мне решить это?Я передам всю необходимую вам информацию.

Любая помощь будет приветствоваться.

Ответы [ 6 ]

1 голос
/ 08 января 2011

Что касается основной проблемы

Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;

Это определенно вызвано наличием более ранней версии servlet-api.jar где-то в вашем classpath.У меня была точно такая же проблема;my был вызван commons-logging.

. Чтобы исправить это, мне пришлось сделать следующее с моим pom.xml

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.1</version>
  <exclusions>
    <exclusion>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
    </exclusion>
  </exclusions>      
</dependency>
1 голос
/ 28 сентября 2010

Вы не можете включить jar servlet-api в веб-приложение tomcat.попробуйте удалить его.

1 голос
/ 05 сентября 2010

При развертывании файлов JAR из Eclipse в Tomcat возникла проблема.Я уверен, что есть лучший способ решить эту проблему, в то время как я нашел его, я решил создать файл war и развернуть его на отдельной установке Apache Tomcat.

0 голосов
/ 24 августа 2011

Я тоже столкнулся с этой проблемой. Попробуйте использовать %TOMCAT_HOME%/lib/servlet-api.jar вместо других jar-файлов (которые содержат пакет javax.servlet, например, javaee.jar), перекомпилируйте ваш проект. Может быть, это решит вашу проблему.

0 голосов
/ 26 августа 2010

Вы не можете просто добавить spring-web-2.5.1.jar сами по себе, вам нужна куча других Spring JAR, чтобы согласиться с ним, например, spring-core, spring-beans, spring-context, spring-context-support и, возможно, spring-webmvc. А еще лучше, будьте осторожны и используйте многофункциональное устройство spring.jar.

О, а Spring 2.5.1 древний . Обновите до 2.5.6 или лучше 3.0.x.

0 голосов
/ 26 августа 2010

org.springframework.web.context.ContextLoaderListener проверьте это, поместив импорт classs ... если он недоступен, добавьте соответствующий jar.

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