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>
        <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,请像这样“提供”您的 servlet 范围:

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

这样,它将使用容器的 servlet jar 版本(如果存在),否则它将使用您在 Maven 中声明的版本。

于 2013-03-05T20:08:06.627 回答
1

该问题很可能是javax.servlet.Servlet由多个类加载器加载引起的。它通常存在于servlet*.jar. 有可能容器提供了它自己的这个 jar 版本,而您的应用程序提供了另一个版本。尝试删除你的战争中的那个。

于 2013-03-04T18:23:48.047 回答
0

I have the same issue here, but only if I try to run the vaadin maven project with the tomcat plugin for eclipse. The dependency for the serlet-api is exactly as shown above. Snd tehr eis no difference if I comment it completely or just the scope part. There is always a servlet-api-2.5-6.1.11 in the lib folder. I don't know from where this comes from. But with the scope provided there is definitly no javax.servlet-api.jar in the lib folder. And if i copy the war manuelly into the tomcats webapps folder and start if by console it works fine. I don't get the difference. Any ideas?

于 2015-01-28T15:34:32.543 回答