这是我的web.xml代码,在运行时我收到这样的错误。如何解决这个问题?
“严重:异常启动过滤器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>
答案 0 :(得分:29)
如果您使用的是struts2版本2.5,则需要将 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 更改为 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter 强>
答案 1 :(得分:1)
我遇到了同样的问题。每个人都建议我的 jar版本错误但问题不同。
我在项目中添加了所需的jar,但是没有用。
所以从项目中删除了jar并在我的 TOMCAT 服务器lib文件夹中添加了这些jar,这样就可以了。
答案 2 :(得分:0)
这是因为struts2-core.jar
的正确版本不在lib路径上。请检查 lib 目录,确保您拥有正确版本的struts2-core.jar
。
如果您的 lib 文件夹中有jar,那么在将代码部署到应用程序容器时,需要确保包含正确的项目库。如果部署时未包含Struts 2项目库文件,则也会发生此错误。
答案 3 :(得分:0)
确保您的struts2库包含在您的部署项目中。在WEB-INF文件下添加struts2库。然后将其添加到构建路径中。
答案 4 :(得分:0)
从Struts 2.5开始,StrutsPrepareAndExecuteFilter已被移动到org.apache.struts2.dispatcher.filter包中(包中没有“ng”)。
答案 5 :(得分:0)
另一种解决方案,如果其余答案对您不起作用
如果放置正确的包路径(不带.ng ..),仍然会得到:
npm ci
我遇到了同样的问题,但是这些解决方案都不起作用,因为使用正确的路径会遇到相同的错误,但是原因是类加载器如何加载类。
解决方案是在WAS中设置“首先使用本地类加载器加载的类(最后使用父类加载)”
为此:
- 单击WebSphere企业应用程序。
- 选择您的企业应用程序
- 单击“管理模块”。
- 单击您的模块。
- “选择首先使用本地类加载器加载的类(父级 最后)”从类加载器订单中删除 下列表。
- 单击“确定”。
- 单击“保存”。
- 重新启动Websphere服务器(在我的情况下为虚拟服务器)。
如果这项工作对您有用,那么最好的方法是在EAR项目中设置一个deployment.xml,因此在将来的部署中,这是自动设置的:
@Html.TextBoxFor(model => model.EndTime, new {@class = "form-control", @title = "End time", id = "example-time-input", type = "time" })
我在这里找到了解决方案: Solution - class loader configuration in WAS
答案 6 :(得分: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
答案 7 :(得分:0)
在我的情况下,我按照官方页面上原始的struts指南将2.3.3与“ org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter”一起使用,我只是将版本更改为2.5即可使用