java.lang.ClassNotFoundException:web.xml中的org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

问题描述 投票:6回答:7

这是我的web.xml代码,在运行时我收到这样的错误..如何解决这个问题?

“SEVERE:异常启动过滤器Struts java.lang.ClassNotFoundException:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter”

 <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5">
      <display-name>HelloStruts</display-name>


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

      <filter-mapping>
      <filter-name>Struts</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>

      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
struts2 web.xml
7个回答
31
投票

如果您使用的是struts2版本2.5,则需要将org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter更改为org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

Version Notes 2.5


1
投票

我遇到了同样的问题。每个人都在暗示我的jar版本错了,但问题不同了。

我在项目中添加了所需的jar,但这不起作用。

所以从项目中删除了jar并将这些jar添加到我的TOMCAT服务器lib文件夹中,并且工作正常。


0
投票

这将发生,因为struts2-core.jar的正确版本不在lib路径上。请检查您的lib目录,确保您拥有正确版本的struts2-core.jar

如果您的lib文件夹中有jar,那么在将代码部署到应用程序容器时,您需要确保包含正确的项目库。如果部署时未包含Struts 2项目库文件,则也会发生此错误。


0
投票

确保您的struts2库包含在您的部署项目中。在WEB-INF文件下添加struts2库。然后将其添加到构建路径中。


0
投票

从Struts 2.5开始,StrutsPrepareAndExecuteFilter已被移动到org.apache.struts2.dispatcher.filter包中(包中没有“ng”)。


0
投票

另一种解决方案,如果其余的答案对你不起作用

如果你把正确的包路径(没有.ng ..),你仍然得到:

java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

我有同样的问题,但没有一个解决方案有效,因为我使用正确的路径得到了相同的错误,但原因是类加载器如何加载类。

解决方案是在WAS中设置“首先加载本地类加载器的类(父类最后一个)”

去做这个:

  • 单击WebSphere企业应用程序。
  • 选择企业应用程序
  • 单击Manage Modules。
  • 单击您的模块。
  • “从类加载器顺序下拉列表中选择首先加载本地类加载器的类(父类最后一个)”。
  • 单击“确定”。
  • 单击“保存”。
  • 重新启动websphere服务器(或我的情况下的虚拟服务器)。

如果这对您有用,那么最好的方法是在EAR项目中设置deployment.xml,因此在期货部署中,这是自动设置的:

<?xml version="1.0" encoding="UTF-8"?> 
<appdeployment:Deployment 
        xmi:version="2.0" 
        xmlns:xmi="http://www.omg.org/XMI" 
        xmlns:appdeployment=" 
http://www.ibm.com/websphere/appserver/schemas/5.0/appdeployment.xmi"> 

        <deployedObject xmi:type="appdeployment:ApplicationDeployment" 
startingWeight="10"> 

                <modules 
                        xmi:type="appdeployment:WebModuleDeployment" 
                        startingWeight="10000" 
                        uri="<your war name>" 
                        classloaderMode="PARENT_LAST" /> 
                <classloader mode="PARENT_LAST" /> 
        </deployedObject> 
</appdeployment:Deployment>

我在这里找到了解决方案: Solution - class loader configuration in WAS


0
投票

解决方案是在pom.xml中;

<dependencies>
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>2.3.1.2</version>
    </dependency>
</dependencies>


<packaging>war</packaging>
<build>
    <finalName>struts-2.3-hello-world-example</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>web\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>
    </plugins>
</build>

我可以在这个视频中看到这个; https://www.youtube.com/watch?v=q4IhM4GBhF8

© www.soinside.com 2019 - 2024. All rights reserved.