迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

Java Struts 框架 java.lang.ClassNotFoundException: XXX.dispatcher.FilterDispatcher 错误

作者:迹忆客 最近更新:2022/05/11 浏览次数:

最近在学习Java Struts 框架,在开始部署的时候碰到了 java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher 错误。错误堆栈部分信息如下所示

java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1358)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1180)
        at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:546)
        at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:527)
        at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:106)
......

出现上面的错误,首先要做的是检查下面三个条件是否都已经满足

  1. 包含所有必要的 jar 包
  2. 正确配置构建路径
  3. 将它们全部添加到部署程序类库中

上面三项都没有问题的话,如果出现了上面的错误,我们需要做的是检查我们的 strus2-core jar 包的版本。

如果是 struts2-core-2.5.jar 则将 web.xml 中的过滤器类标记值更改为如下内容

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

也就是需要将 org.apache.struts2.dispatcher.FilterDispatcher 更改为 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

因为我最开始是使用的 IDEA 创建的Struts2 项目。它默认创建的 web.xml 中的值就是 org.apache.struts2.dispatcher.FilterDispatcher

<filter>
    <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

在网上查了资料,自 Struts 2.1.3 起,不推荐使用 FilterDispatcher。 如果使用的是旧版本,则使用上面的配置。

如果是 struts2-core-2.3.X.jar 版本的包,则需要将 web.xml 中的过滤器类标记值更改为

<filter>
   <filter-name>struts2</filter-name>
   <filter-class>
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
   </filter-class>
</filter>

所有这些不同的原因是 struts 2 控制器被放置在不同版本的 struts2-core jar包中的不同位置,有时它们的名称也是不同的,如我们在 2.1.3 中所见到的。

因为我使用的是 struts2-core-2.5.30.jar 包,因此我的过滤器类的值换成 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter 就解决了问题。

其实问题不复杂,在创建项目的时候注意自己使用的版本,然后添加相应的值即可。

除非注明转载,本站文章均为原创或翻译,欢迎转载,转载请以链接形式注明出处

本文地址:

迹忆客

专注技术分享,项目实战分享!

技术宅 乐于分享 7年编程经验
社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

热门文章

教程更新

热门标签

扫码一下
查看教程更方便