SEVERE: Исходный стартовый фильтр struts2 java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher

Я пытаюсь сделать небольшое приложение для входа в 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;
    }
}

И я добавил эти библиотеки в свой проект:

  • Обще-каротаж 1.0.4.jar
  • struts2-ядро-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

Ответ 1

Убедитесь, что в вашем пути к классу указано следующее:

  • Обще-FileUpload-X.X.X.jar
  • Обще-ю-X.X.X.jar
  • Обще-каротаж X.X.X.jar
  • Обще-каротаж api.X.X.jar
  • FreeMarker-X.X.X.jar
  • OGNL-X.X.X.jar
  • struts2-ядро-X.X.X.X.jar
  • xwork-ядро-X.X.X.jar
  • javassist-3.7.ga.jar(новый для Struts версий 2.2.1 и выше)
  • Обще-lang3-x.x

Изменить: вы следовали http://struts.apache.org/release/2.3.x/docs/how-to-create-a-struts-2-web-application.html, чтобы настроить свой проект? Почему вы используете struts 2.1.X.X, а не 2.2.x.x?

Try:

        <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

Вам нужно добавить еще одну банку 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

Ответ 3

У меня была та же проблема. Я решил это так: 1-й я удалил все мои добавленные библиотеки. Затем я добавил их через Project->Properties->Deployment Assembly. Раньше я просто скопировал их в папку WEB-INF/lib. Кажется, это не работает все время. надеюсь, что это поможет.

Ответ 4

Я тоже получил эту ошибку, и я проверил свой dtd в web.xml, и я изменил версию с 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">

Ответ 5

добавить файл commons-lang3- jar в папку WEB-INF\lib.

Ответ 6

просто добавьте commons-lang3XXXX.jar в свою библиотеку

Ответ 7

Я предлагаю сделать сборку 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>

Ответ 8

Постоянная настройка struts.action.excludePattern вызывала у меня ту же проблему. Я не получил никакого объяснения, даже трассировки стека, как вы, только чисто "Ошибка FilterStart". Я отследил это, вернувшись к предыдущим версиям кода, и проверил, что изменилось.

Ответ 9

Относительно ошибки:

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

ПРОБЛЕМА:

Кажется, что проблема связана со следующей комбинацией Eclipse - WTPPlugin - Struts2 - Maven3

Выводы:

Мы предполагаем, что при запуске проекта "Запуск на сервере" мы предполагаем, что eclipse запускает maven, создает WAR файл и разворачивается на сервере. Но он отлично работает для меня. Я вижу файл WAR в целевой папке, где maven создает WAR, и WAR идеально подходит. Но затмение, похоже, запускает что-то еще.

РЕШЕНИЕ:

Поместите все необходимые файлы JAR в проект eclipse WEB-INF/lib. Если вы используете управление версиями, обязательно проигнорируйте папку lib. Как найти все необходимые JAR, когда вы используете maven? Перейдите в целевую папку и файл WAR. Разверните его и перейдите на WEB-INF/lib. Скопируйте все эти JARS для проекта eclipse WEB-INF/lib.

Ответ 10

Кажется, файл commons-lang3-XXX.jar отсутствует в вашем пути к классу. Вы можете решить эту проблему, добавив банку в свою папку lib.

Ответ 12

Аналогичная проблема возникает при запуске проекта strut2.

Я использовал последние банки. Web.xml имеет версию 3.0. И он не содержит надлежащего диспетчера в его конфигурации. Я добавил правильный фильтр диспетчера, то есть

org.apache.struts2.dispatcher.FilterDispatcher 

вместо

org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter 

или

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

он работал очень сильно.

Ответ 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 выкинул ошибку "SEVERE: Исключение стартового фильтра 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, я нашел стек для ошибки и смог исправить проблему.