Tomcatサーバーの起動中に例外が発生します
SEVERE: Servlet /MavenWeb threw load() exception
Java.lang.ClassCastException: org.springframework.web.servlet.DispatcherServlet
cannot be cast to javax.servlet.Servlet
私はspring3を使用していますが、libフォルダーにjar spring2-5-6があります。それをpom.xmlから削除しましたが、それでもlibフォルダーに表示されます-それが問題かどうかはわかりません。私はEclipse IDEを使用しています。ありがとう!!
<dependencies>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Draft-6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.6-Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.1.2.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.1.2.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.2.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.1.2.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.2.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1-b01</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webflow</artifactId>
<version>1.0.6</version>
<scope>compile</scope>
</dependency>
</dependencies>
1つのプロジェクトで複数のバージョンのSpring JARを使用するべきではありませんが、これは問題ではありません。
この問題は、2つの異なるクラスローダーによってロードされたサーブレットAPIクラスが原因であると考えられます。おそらく、WARにservlet*.jar
またはその他のコンテナ固有のJARがあります。 <scope>
でpom.xml
をprovided
に設定して削除します。
私の場合は、ライブラリの問題ではありませんでした。私は標準サーブレットをSpringで実装するように変更していたため、 これらの指示 に従いました。これは、後でページがダウンした場合に備えて、ここで言い換えます。
実装org.springframework.web.HttpRequestHandler
javax.Servletを拡張する代わりに
public class MyServlet implements HttpRequestHandler {
ApplicationContext.xmlでBeanを作成しました(dispatcher-servlet.xmlで作成しました)
<bean id="MyServlet" class="com.package.to.MyServlet"/>
Web.xmlでサーブレットを指定し、古いクラス(com.package.to.MyServlet)からSpringHttpRequestHandlerServlet。
<servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> </servlet-mapping>
web.xmlでapplicationContext.xmlが以下を実行することに関するFileNotFoundExceptionを回避するために、追加の手順を実行する必要がありました
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>