2010-08-24 187 views
0

我試圖用Spring 2 + Struts 2 + Hibernate 3 arquitecture項目啓動,但在Eclipse(Helios版本)中將其部署到Apache Tomcat 6.0時出現異常, 。在Apache Tomcat中部署Spring 2應用程序的問題6

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> 

我GOOGLE了很長一段時間,我想,我發現了一些可能的解決方案,但他們都沒有奏效。 我要解釋一下我嘗試並取得了異常:

第一種方式: 在Tomcat服務器配置,Classpath選項卡中,我加入項目中使用彈簧網絡2.5.1.jar(一樣的)作爲Bootstrap Entries部分中的外部jar。 然後,當開始

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不能正確讀取項目庫?也許我忽略了一些東西,或者有什麼不對。 你能幫我解決嗎?我會提供你需要的所有信息。

任何幫助將受到歡迎。

回答

1

將Eclipse中的jar文件部署到Tomcat時出現問題。我相信有更好的方法來解決它,而我發現它解決了它生成war文件並將其部署到獨立安裝的Apache Tomcat上。

0

通過投入班組長進口org.springframework.web.context.ContextLoaderListener檢查這個...如果不是比現有的增加適當的罐子..

+1

你是對的,但是當我將它包含在classpath中時,我收到了另一個異常,正如我在消息中所說的。感謝您的回覆 – CraicFinder 2010-08-30 10:29:32

0

你不能只對自己添加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

我只是將所有圖書館都包括在內,因爲它以第二種方式進行了解釋,但它仍不起作用。感謝您的回覆 – CraicFinder 2010-08-30 10:27:49

1

您不能在tomcat web應用程序中包含servlet-api jar。嘗試刪除它。

1

在問候的

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

這個核心問題肯定是由具有在classpath中某處的servlet-api.jar文件的早期版本引起。我有完全相同的問題;我是由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> 
0

我也碰到了這個問題。嘗試使用%TOMCAT_HOME%/lib/servlet-api.jar而不是其他罐子(包含程序包javax.servlet,例如javaee.jar)重新編譯您的項目。也許這可以解決你的問題。

相關問題