2013-03-04 79 views
4

我想当我试图打开应用程序URL,我得到一个ClassCastException迁移从Vaadin 6至7 Vaadin
Vaadin 7的Servlet抛出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> 

请帮助我。

回答

2

或者,如果你使用Maven使“提供”你的servlet的范围,像这样:

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

这样,如果它存在,它将使用servlet罐容器的版本,否则会使用你声明的一个在Maven。

1

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

0

我在这里有同样的问题,但只有当我尝试运行与日食tomcat插件的vaadin maven项目。 serlet-api的依赖关系完全如上所示。如果我完全评论它或仅仅是范围部分,那么Snd tehr eis没有区别。 lib文件夹中总是有一个servlet-api-2.5-6.1.11。我不知道这是从哪里来的。但是在提供的范围中,lib文件夹中肯定没有javax.servlet-api.jar。 如果我将战争manuelly复制到tomcats webapps文件夹中,并通过控制台启动它可以正常工作。我没有区别。 任何想法?

相关问题