启动tomcat加载servlet时的java.lang.ClassCastException

启动tomcat加载servlet时的java.lang.ClassCastException,java,spring,tomcat,servlets,struts,Java,Spring,Tomcat,Servlets,Struts,当尝试从SWT应用程序中启动嵌入式tomcat web应用程序时,我收到了错误(stacktrace如下所示): java.lang.ClassCastException:org.apache.struts.action.ActionServlet 和java.lang.ClassCastException:org.apache.jasper.servlet.JspServlet 我已经搜索了/lib/目录和/WEB-INF/lib目录中的所有JAR,没有找到对任何Servlet类的重复引用 该

当尝试从SWT应用程序中启动嵌入式tomcat web应用程序时,我收到了错误(stacktrace如下所示):

java.lang.ClassCastException:org.apache.struts.action.ActionServletjava.lang.ClassCastException:org.apache.jasper.servlet.JspServlet

我已经搜索了/lib/目录和/WEB-INF/lib目录中的所有JAR,没有找到对任何Servlet类的重复引用

该应用程序使用Tomcat 6.0.36和Struts 1.3.10

应用程序源代码构建和编译成功,没有错误

Jar文件在\lib中

lib\annotations-api.jar
lib\axis\axis-ant.jar
lib\axis\axis.jar
lib\axis\commons-discovery-0.2.jar
lib\axis\jaxrpc.jar
lib\axis\junit.jar
lib\axis\saaj.jar
lib\axis\wsdl4j-1.5.1.jar
lib\catalina.jar
lib\com.dom.jsso.common-server.jar
lib\commons-dbcp-1.2.1.jar
lib\commons-logging-1.1.jar
lib\commons-pool.jar
lib\derby.jar
lib\derbytools.jar
lib\dom4j.jar
lib\ehcache-1.1.jar
lib\el-api.jar
lib\hibernate3.jar
lib\jasper.jar
lib\jsp-api.jar
lib\jta.jar
lib\odmg.jar
lib\org.springframework.asm-3.1.3.RELEASE.jar
lib\org.springframework.beans-3.1.3.RELEASE.jar
lib\org.springframework.context-3.1.3.RELEASE.jar
lib\org.springframework.core-3.1.3.RELEASE.jar
lib\org.springframework.web-3.1.3.RELEASE.jar
lib\org.springframework.web.struts-3.1.3.RELEASE.jar
lib\servlet-api.jar
lib\tomcat-coyote.jar
lib\tomcat-dbcp.jar
lib\tomcat-juli.jar
lib\tools\ojdbc14.jar
WEB-INF\lib\antlr-2.7.2.jar
WEB-INF\lib\commons-beanutils-1.8.0.jar
WEB-INF\lib\commons-digester-1.8.jar
WEB-INF\lib\commons-fileupload-1.1.1.jar
WEB-INF\lib\commons-validator-1.3.1.jar
WEB-INF\lib\oro-2.0.8.jar
WEB-INF\lib\struts-core-1.3.10.jar
WEB-INF\lib\struts-taglib-1.3.10.jar
项目中使用的其他罐子(用于JFace和SWT)

tomcat\webapps\\WEB-INF\lib中的Jar文件

lib\annotations-api.jar
lib\axis\axis-ant.jar
lib\axis\axis.jar
lib\axis\commons-discovery-0.2.jar
lib\axis\jaxrpc.jar
lib\axis\junit.jar
lib\axis\saaj.jar
lib\axis\wsdl4j-1.5.1.jar
lib\catalina.jar
lib\com.dom.jsso.common-server.jar
lib\commons-dbcp-1.2.1.jar
lib\commons-logging-1.1.jar
lib\commons-pool.jar
lib\derby.jar
lib\derbytools.jar
lib\dom4j.jar
lib\ehcache-1.1.jar
lib\el-api.jar
lib\hibernate3.jar
lib\jasper.jar
lib\jsp-api.jar
lib\jta.jar
lib\odmg.jar
lib\org.springframework.asm-3.1.3.RELEASE.jar
lib\org.springframework.beans-3.1.3.RELEASE.jar
lib\org.springframework.context-3.1.3.RELEASE.jar
lib\org.springframework.core-3.1.3.RELEASE.jar
lib\org.springframework.web-3.1.3.RELEASE.jar
lib\org.springframework.web.struts-3.1.3.RELEASE.jar
lib\servlet-api.jar
lib\tomcat-coyote.jar
lib\tomcat-dbcp.jar
lib\tomcat-juli.jar
lib\tools\ojdbc14.jar
WEB-INF\lib\antlr-2.7.2.jar
WEB-INF\lib\commons-beanutils-1.8.0.jar
WEB-INF\lib\commons-digester-1.8.jar
WEB-INF\lib\commons-fileupload-1.1.1.jar
WEB-INF\lib\commons-validator-1.3.1.jar
WEB-INF\lib\oro-2.0.8.jar
WEB-INF\lib\struts-core-1.3.10.jar
WEB-INF\lib\struts-taglib-1.3.10.jar
tomcat/conf/web.xml的servlet部分

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>
<servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-config-adm.xml,/WEB-INF/struts-config-ajax.xml</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>2</param-value>
        </init-param>
        <init-param>
            <param-name>detail</param-name>
            <param-value>2</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

经过一些研究后,您的类路径中有多个struts副本或版本,请删除它们并只保留一个。虽然你说你查过了,但我找到的所有答案都指向这一点,所以你可能已经找到了,但没有找到

另外,尝试从war文件中删除jar,因为它已经包含在内了

参考资料:

struts.jar文件不应保存在公共区域中,例如 WAS/lib。它应该包含在每个项目的WEB-INF/lib文件夹中 struts应用程序

从war lib文件夹或全局文件夹中删除Struts core API jar 公共库目录。在两个地方有两个相同的罐子, 它由不同的类装入器装入,因此强制转换是 失败

搜索包含org.apache.struts.action.ActionServlet类的确切jar

Struts不支持多个servlet映射到同一个操作 servlet实例


可能是Struts版本和Java servlets版本之间不兼容,发布Struts/tomcat版本奇怪它如何运行
ClassCastException
,但没有显示它试图转换的类…@SubinS-我添加了版本(tomcat 6.0.36和Struts 1.3.10)发现了类似的异常,这可能很有帮助:另一个:我已经验证了ActionServlet类只有一个jar文件(struts-core-1.3.10.jar)。jar文件已在WEB-INF\lib目录中。struts servlet定义也只有一个servlet映射。