【问题标题】:SEVERE: Exception starting filter struts2 java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher严重:异常启动过滤器 struts2 java.lang.ClassNotFoundException:org.apache.struts2.dispatcher.FilterDispatcher
【发布时间】:2011-03-10 08:02:58
【问题描述】:

我正在尝试在 struts 2 中制作一个小型登录应用程序。我的 web.xml:

<?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>StrutsPrj</display-name>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>Login.jsp</welcome-file>
    </welcome-file-list>
    </web-app>

Struts.xml:

<struts>
    <package name="default" extends="struts-default" namespace="/">
        <action name="login" method="execute"
            class="struts2.LoginAction">
            <result name="success">Welcome.jsp</result>
            <result name="error">Login.jsp</result>
        </action>
    </package>
</struts>    

login.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Screen - Struts 2</title>
</head>
<body>

<s:actionerror />
    <s:form action="login.action" method="post">
        <s:textfield name="username" value="UserName" size="20" />
        <s:password name="password" value="Password" size="20" />
        <s:submit method="execute" value="Login" align="center" />
    </s:form>
</body>
</html>

Welcome.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome Screen - Struts 2</title>
</head>
<body>
<h2>Congrates, <s:property value="username" />...!</h2>
</body>
</html>

LoginAction.java:

package struts2;

public class LoginAction {
    private String username;
    private String password;

    public String execute() {
        if (this.username.equals("admin")
            && this.password.equals("admin123")) {
            return "success";
        } else {
        return "error";
        }
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

我已将这些库添加到我的项目中:

  • commons-logging-1.0.4.jar
  • struts2-core-2.1.8.1.jar
  • ognl-2.6.11.jar
  • xwork-2.1.0.jar
  • freemarker-2.3.9.jar

当我尝试在 Tomcat 6 上运行它时,出现以下错误:

Mar 10, 2011 1:17:59 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Java\jre6\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Java/jre6/bin/client;C:/Java/jre6/bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Java\jdk1.5\bin\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Liquid Technologies\Liquid XML Studio 2009\XmlDataBinder7\Redist7\cpp\win32\bin;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\MySQL\MySQL Server 5.0\bin
Mar 10, 2011 1:17:59 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:newPrj' did not find a matching property.
Mar 10, 2011 1:17:59 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context/Loader} Setting property 'useSystemClassLoaderAsParent' to 'false' did not find a matching property.
Mar 10, 2011 1:17:59 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:StrutsPrj' did not find a matching property.
Mar 10, 2011 1:17:59 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context/Loader} Setting property 'useSystemClassLoaderAsParent' to 'false' did not find a matching property.
Mar 10, 2011 1:18:00 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Mar 10, 2011 1:18:00 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 2037 ms
Mar 10, 2011 1:18:00 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Mar 10, 2011 1:18:00 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.32
Mar 10, 2011 1:18:01 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter struts2
java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:269)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4071)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4725)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Mar 10, 2011 1:18:01 PM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Mar 10, 2011 1:18:01 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/StrutsPrj] startup failed due to previous errors
Mar 10, 2011 1:18:01 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Mar 10, 2011 1:18:01 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Mar 10, 2011 1:18:01 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/97  config=null
Mar 10, 2011 1:18:01 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1756 ms

【问题讨论】:

  • 我猜这是一个 jar 文件版本冲突问题。如果您正在关注任何在线示例,请使用该示例检查您的 jar 版本。

标签: java struts2


【解决方案1】:

确保您的课程路径中有以下内容:

  • commons-fileupload-X.X.X.jar
  • commons-io-X.X.X.jar
  • commons-logging-X.X.X.jar
  • commons-logging-api.X.X.jar
  • freemarker-X.X.X.jar
  • ognl-X.X.X.jar
  • struts2-core-X.X.X.X.jar
  • xwork-core-X.X.X.jar
  • javassist-3.7.ga.jar(Struts 2.2.1 及更高版本的新功能)
  • commons-lang3-x.x

编辑:您是否关注https://struts.apache.org/getting-started/how-to-create-a-struts2-web-application.html 设置您的项目?

试试:

        <filter>
            <filter-name>action</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>action</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

【讨论】:

    【解决方案2】:

    你需要再添加一个jar commons-lang3-x.x

    向下滚动到 apache 日志的末尾,您可以找到 ClassNotFoundException: org.apache.commons.lang3.StringUtils

    Caused by: java.lang.ClassNotFoundException: **org.apache.commons.lang3.StringUtils**
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    ... 55 more
    

    【讨论】:

    • +1 用于解决我的问题,但您怎么知道包含 commons-lang3-x.x?有没有明确的清单?
    • 我已经完成了其中的所有操作,而 classDefFoundError 对我来说已经消失了。但在此之后,如果我运行服务器,服务器启动正常,然后它告诉“请求的资源不可用。”
    【解决方案3】:

    我遇到了同样的问题。我是这样解决的: 第一次我删除了所有我添加的libs。然后我通过添加它们 Project-&gt;Properties-&gt;Deployment Assembly。 之前,我只是将它们复制到WEB-INF/lib 文件夹中。这似乎并不总是有效。 希望这会有所帮助。

    【讨论】:

    • 是的,这行得通,我们经常错误地在 eclipse 中添加 jars 来构建路径,它适用于编译,但在运行时不行,它们必须在 web-inf/lib 文件夹中
    【解决方案4】:

    将 commons-lang3-jar 文件添加到 WEB-INF\lib 文件夹中。

    【讨论】:

      【解决方案5】:

      只需将 commons-lang3XXXX.jar 添加到您的库中

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

          我也遇到了这个错误,我在web.xml 中检查了我的dtd,并将版本从 2.4 更改为 2.5。

              <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">
          

          【讨论】:

          • hmm .. 看起来与问题中的 dtd 完全相同,所以不太明白您回答的意图?
          【解决方案8】:

          我建议进行 Maven 构建,依赖项将由 Maven 解决。 这是我必须放入 pom.xml 的内容

               <dependency>
                  <groupId>org.apache.struts</groupId>
                  <artifactId>struts2-core</artifactId>
                  <version>2.3.1.2</version>
                  <type>jar</type>
                  <scope>compile</scope>
              </dependency>
          

          【讨论】:

            【解决方案9】:

            您的类路径中似乎缺少 commons-lang3-XXX.jar 文件。您可以通过将 jar 添加到您的 lib 文件夹来解决它。

            【讨论】:

              【解决方案10】:

              关于错误:

              SEVERE: Exception starting filter struts2 java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
              

              问题:

              下面的组合好像有问题 Eclipse - WTPPlugin - Struts2 - Maven3

              发现:

              我们假设当我们以“在服务器上运行”运行项目时,我们假设 eclipse 运行 maven,创建 WAR 文件并部署在服务器上。但它对我来说并不完美。我确实在maven创建WAR的目标文件夹中看到了WAR文件,并且WAR是完美的。但是eclipse似乎运行了别的东西。

              解决方案:

              把所有需要的JAR文件放到eclipse项目的WEB-INF/lib中。 如果您使用版本控制,请确保忽略 lib 文件夹。 使用 maven 时如何找到所有必需的 JAR?转到目标文件夹和 WAR 文件。将其打开并转到 WEB-INF/lib。将所有这些 JARS 复制到 eclipse 项目的 WEB-INF/lib 中。

              【讨论】:

                【解决方案11】:

                在启动 strut2 项目时遇到类似问题。

                我使用的是最新的罐子。 Web.xml 的版本为 3.0。而且它的配置中不包含正确的调度程序。我添加了正确的调度程序过滤器,即

                org.apache.struts2.dispatcher.FilterDispatcher 
                

                而不是

                org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter 
                

                org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter. 
                

                效果很好。

                【讨论】:

                  【解决方案12】:

                  struts.action.excludePattern 常量设置现在给我带来了同样的麻烦。我没有得到任何解释,甚至没有像你一样的堆栈跟踪,只有一个纯粹的“错误FilterStart”。我通过恢复到以前版本的代码来跟踪这一点,并检查了发生了什么变化。

                  【讨论】:

                    【解决方案13】:

                    作为 Struts2 框架的新手,我最近遇到了相同(或非常相似)的错误。在我的例子中,我使用的是 Action 类中的注释,而不是 struts.xml 文件。

                    例如

                    @Action(value="/jsp/edit-file",
                       results={@Result(name="success",location="/jsp/edit-success.jsp"),
                                @Result(name="failure",location="/jsp/edit-failure.jsp")})
                    public String execute() { ... }
                    

                    但是,当我更改操作值以包含 *.action 扩展名(见下文)时,Struts 会抛出上面提到的“严重:异常启动过滤器 struts2”错误。

                    @Action(value="/jsp/edit-file.action",
                       results={@Result(name="success",location="/jsp/edit-success.jsp"),
                                @Result(name="failure",location="/jsp/edit-failure.jsp")})
                    public String execute() { ... }
                    

                    这个错误的原因并不明显,因为它没有立即显现出来。通过查看 Tomcat localhost..log 文件,我找到了错误的堆栈跟踪,并且能够解决该问题。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2012-03-08
                      • 1970-01-01
                      • 1970-01-01
                      • 2013-04-29
                      • 2016-02-17
                      • 2015-09-03
                      • 1970-01-01
                      • 2019-07-24
                      相关资源
                      最近更新 更多