繁体   English   中英

java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter 即使配置看起来不错

[英]java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter even if the configuration looks fine

我知道在 StackOverflow 上有很多类似的问题,但我想我浏览了每个问题并尝试了所有建议的问题,但没有一个奏效。

我正在尝试将应用程序从struts 1迁移到struts 2 ,但为了使事情更容易,我首先尝试迁移 struts1 示例应用程序,以便对这些步骤充满信心。 我正在谈论的示例应用程序此存储库apps文件夹中的应用程序

所以,这是我目前的配置:

  • 行家
  • 爪哇 8
  • 雄猫9
  • 支柱 1.4
  • 支柱 2.5

到目前为止,我所做的步骤是:

  1. pom.xml文件中添加struts2-corelog4j2依赖,通过maven安装
  2. 根据官方文档,更改web.xml文件以包含 struts 2。
  3. 在类路径中创建一个struts.xml文件,目前该文件不包含任何操作,只包含结构。

上述文件如下所示:

web.xml(摘录)

 <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>

 <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
 </filter-mapping>

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    <constant name="struts.devMode" value="true"/>

    <package name="default" namespace="/" extends="struts-default">

    </package>

    <!-- Add addition packages and configuration here. -->
</struts>

pom.xml(摘录)

   <dependency>
       <groupId>org.apache.struts</groupId>
       <artifactId>struts2-core</artifactId>
       <version>2.5.22</version>
       <scope>compile</scope>
   </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.12.1</version>
    </dependency>

最后,maven 依赖项部分如下所示:

在此处输入图片说明

目标文件夹中的WEB-INF/lib文件夹如下所示:

在此处输入图片说明

所以我确信所有必需的依赖项都存在于目标中。 尽管如此,我还是不断收到错误消息:

org.apache.catalina.core.StandardContext filterStart 严重:异常启动过滤器 [struts2] java.lang.ClassNotFoundException:org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

我确定类org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter存在,它拼写正确,并且对于我使用的 struts2 版本是正确的,因为如果我在 Java 文件中导入该类,它会得到建造成功。

我知道这个问题很常见,我的请求听起来很愚蠢,但我确实检查了我在网上找到的关于这个问题的任何问题,但没有一个解决方案有效。

我希望有人能给我一个提示。 谢谢

Struts 2 库的pom.xml条目:

   <dependency>
       <groupId>org.apache.struts</groupId>
       <artifactId>struts2-core</artifactId>
       <version>2.5.22</version>
       <scope>compile</scope>
   </dependency>

如果您通过 Maven 运行(您应该这样做),您将需要它超过编译时间。

即使 WEB-INF/lib 映像已被截断(它至少缺少 XWork 依赖项),我也会将依赖项管理留给 Maven,而不是尝试手动进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM