这是我的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版本2.5,则需要将org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter更改为org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
我遇到了同样的问题。每个人都在暗示我的jar版本错了,但问题不同了。
我在项目中添加了所需的jar,但这不起作用。
所以从项目中删除了jar并将这些jar添加到我的TOMCAT服务器lib文件夹中,并且工作正常。
这将发生,因为struts2-core.jar
的正确版本不在lib路径上。请检查您的lib目录,确保您拥有正确版本的struts2-core.jar
。
如果您的lib文件夹中有jar,那么在将代码部署到应用程序容器时,您需要确保包含正确的项目库。如果部署时未包含Struts 2项目库文件,则也会发生此错误。
确保您的struts2库包含在您的部署项目中。在WEB-INF文件下添加struts2库。然后将其添加到构建路径中。
从Struts 2.5开始,StrutsPrepareAndExecuteFilter已被移动到org.apache.struts2.dispatcher.filter包中(包中没有“ng”)。
另一种解决方案,如果其余的答案对你不起作用
如果你把正确的包路径(没有.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
解决方案是在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