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

时间:2015-01-27 10:06:34

标签: struts2 web.xml

这是我的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>

8 个答案:

答案 0 :(得分:29)

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

Version Notes 2.5

答案 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即可使用