java .lang.ClassNotFoundException: org. apache .struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter, даже если конфигурация выглядит нормально - PullRequest
0 голосов
/ 10 марта 2020

Мне известно, что в StackOverflow существует множество похожих вопросов, но, думаю, я просмотрел каждый из них и попробовал все предложенные, но ни один из них не сработал.

Я пытаюсь выполнить миграцию приложение от распорок 1 до распорок 2 , но для упрощения я пытаюсь сначала перенести примеры приложений struts1, чтобы убедиться в правильности шагов. Примеры приложений, о которых я говорю, находятся в папке apps этого хранилища .

Итак, это моя текущая конфигурация:

  • maven
  • Java 8
  • Tomcat 9
  • Распорки 1,4
  • Распорки 2,5

Ступени До сих пор я делал:

  1. Добавление struts2-core и log4j2 зависимостей в pom. xml файл и установите их через maven
  2. Измените файл web. xml, чтобы включить распорки 2, согласно официальной документации .
  3. Создайте Struts. xml файл в classpath, в настоящее время этот файл не содержит никаких действий, а только структуру.

Вышеупомянутые файлы выглядят так:

веб. xml (выдержка) :

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

 <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
 </filter-mapping>

распорок. xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    <constant name="struts.devMode" value="true"/>

    <package name="default" namespace="/" extends="struts-default">

    </package>

    <!-- Add addition packages and configuration here. -->
</struts>

пом. xml (выдержка) :

   <dependency>
       <groupId>org.apache.struts</groupId>
       <artifactId>struts2-core</artifactId>
       <version>2.5.22</version>
       <scope>compile</scope>
   </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.12.1</version>
    </dependency>

В конце концов, мав Раздел зависимостей выглядит следующим образом:

enter image description here

В то время как папка WEB-INF / lib в target папка выглядит следующим образом:

enter image description here

Так что я уверен, что в цели присутствуют все необходимые зависимости. Несмотря на это, я продолжаю получать сообщение об ошибке:

org. apache .catalina.core.StandardContext filterStart SEVERE: Фильтр запуска исключения [struts2] java .lang.ClassNotFoundException: org. apache .struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

Я уверен, что класс org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter существует, он записан правильно и подходит для используемой версии Struts2, так как если я импортируйте класс в файл Java, он успешно собран.

Я знаю, что проблема очень распространена, и мой запрос может показаться глупым, но я проверил буквально любой вопрос, который я нашел в Интернете об этой проблеме, и ни одно из решений не сработало.

Я надеюсь, что кто-то может дать мне подсказку. Спасибо

1 Ответ

0 голосов
/ 10 марта 2020

Ваша запись pom.xml для Struts 2 lib:

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

Если вы работаете с Maven (что вам нужно), он понадобится вам не по времени компиляции.

Я бы оставил управление зависимостями до Maven и не пытался бы делать это вручную, даже если изображение WEB-INF / lib было усечено (по крайней мере, отсутствует зависимость XWork).

...