我在我的程序中使用了Java 11,struts 2.5.29,Tomcat10.0.6。我正在尝试使用struts-2框架创建一个小项目。我已经为特定版本的Struts声明了web.xml中的所有过滤器,如struts.apache.org中提到的那样。不过,我还是无法成功地执行我的程序。我认为jar文件或其他一些我无法识别的错误是错误的。
我已经尝试过更早版本的Struts2.3.27,甚至是更旧版本的tomcat9,但它没有给出正确的结果。
这是我的web.xml和struts.xml代码供参考。
web.xml**:**
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="5.0">
<display-name>Strut2Implementation</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>struts.xml**:**
<struts>
<package name="default" extends="struts-default">
<action name="welcome" class="org.action.WelcomeAction">
<result name="success">/success.jsp</result>
<result name="failure">/error.jsp</result>
</action>
</package>
</struts>我添加的罐子是
commons-fileupload-1.4 commons-io-2.6 commons-lang3-3.8.1 commons-lang-2.4 commons-logging-1.2 freemarker-2.3.30 javassist-3.20.0 ognl-3.1.29 struts2-core-2.5.29 struts-dwr-plugin-2.5.29 xwork-core-2.2.3 xwork-jar.jar
我得到的错误是
SEVERE: Exception starting filter [struts2] java.lang.ClassCastException: class org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter cannot be cast to class jakarta.servlet.Filter
发布于 2022-02-22 10:27:19
在servlet容器上使用不同的servlet版本。此版本与您使用过的Struts版本不兼容。
Tomcat 9.0.x与Tomcat 10.0.x之间有显著的断裂变化。规范API使用的Java已经从
javax...更改为jakarta...。有必要根据新的API重新编译web应用程序。 Tomcat可以在部署时使用用于Jakarta的Apache迁移工具将现有的web应用程序从Java 8转换为Jakarta 9。为了利用这个特性,web应用程序应该放在主机legacyAppBase文件夹中(默认情况下名为webapps-javaee),并且它们将被转换为主机appBase文件夹中的一个等效的Jakarta应用程序(默认情况下名为webapps)。 另外,可以提前使用用于Jakarta的Apache迁移工具或任何类似的转换工具,以受益于更快的部署时间和更精确的转换配置选项。
https://stackoverflow.com/questions/71208072
复制相似问题