4

Vaadin 6 から Vaadin 7 に移行しようとしています。
アプリケーションの URL を開こうとすると、ClassCastException が発生します。

SEVERE: Allocate exception for servlet Vaadin Application Servlet
java.lang.ClassCastException: com.vaadin.server.VaadinServlet cannot be cast to javax.servlet.Servlet
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1136)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:857)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

web.xml は問題ないように見えるので、何が問題なのかわかりません。アプリケーション サーブレットのマッピングを以下に示します。

 <servlet>
        <servlet-name>Ohta Application</servlet-name>
        <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
        <init-param>
            <description>
        Vaadin UI class to use</description>
            <param-name>UI</param-name>
            <param-value>com.ritmsoft.ohta.OhtaUI</param-value>
        </init-param>
        <init-param>
            <param-name>widgetset</param-name>
            <param-value>com.ritmsoft.ohta.widgetset.OhtaWidgetSet</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Ohta Application</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Ohta Application</servlet-name>
        <url-pattern>/VAADIN/*</url-pattern>
    </servlet-mapping>

お願い助けて。

4

3 に答える 3

2

または、Maven を使用する場合は、サーブレットのスコープを次のように「提供」します。

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>

そうすれば、コンテナーのバージョンのサーブレット jar が存在する場合はそれを使用し、存在しない場合は Maven で宣言したものを使用します。

于 2013-03-05T20:08:06.627 に答える
1

javax.servlet.Servletこの問題は、複数のクラスローダーによってロードされることが原因である可能性が最も高いです。通常は に存在しservlet*.jarます。コンテナーがこの jar の独自のバージョンを提供し、アプリケーションが別のバージョンを提供する可能性があります。戦争中のものを取り除いてみてください。

于 2013-03-04T18:23:48.047 に答える
0

ここでも同じ問題がありますが、これは vaadin maven プロジェクトを Eclipse 用の tomcat プラグインで実行しようとした場合に限られます。serlet-api の依存関係は、上に示したとおりです。私がそれを完全にコメントするか、スコープ部分だけをコメントするかは、違いはありません。lib フォルダーには常に servlet-api-2.5-6.1.11 があります。これがどこから来たのかはわかりません。しかし、提供されたスコープでは、lib フォルダーに javax.servlet-api.jar は絶対にありません。そして、戦争を手動で tomcats webapps フォルダーにコピーし、コンソールで正常に動作するかどうかを開始します。違いがわかりません。何か案は?

于 2015-01-28T15:34:32.543 に答える