java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet


87

Я использую spring 3.1.0.RELEASE , и мой контейнер сервлетов - это tomcat 7, а моя IDE - это eclipse indigo, а jar spring-webmvc-3.1.0.RELEASE.jar, содержащий DispatcherServlet, существует в папке lib, но когда при запуске приложения я получаю исключение:

java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:126)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1043)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4957)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5284)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5279)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

Посоветуйте, пожалуйста, почему я получаю это исключение и как его исправить.

РЕДАКТИРОВАТЬ: следующие мои файлы конфигурации:

1- .springBeans:

<?xml version="1.0" encoding="UTF-8"?>
<beansProjectDescription>
    <version>1</version>
    <pluginVersion><![CDATA[2.9.0.201203011806-RELEASE]]></pluginVersion>
    <configSuffixes>
        <configSuffix><![CDATA[xml]]></configSuffix>
    </configSuffixes>
    <enableImports><![CDATA[false]]></enableImports>
    <configs>
        <config>src/main/webapp/WEB-INF/checkout-servlet.xml</config>
    </configs>
    <configSets>
    </configSets>
</beansProjectDescription>

2- web.xml:

<web-app>
  <display-name>Checkout</display-name>

  <servlet>
    <servlet-name>checkout</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>checkout</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>

</web-app>

3- checkout-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <context:component-scan base-package="com.myapp"/>

    <bean id="myService" class="com.myapp.MyService"/>

</beans>

также при попытке получить доступ к любой странице в приложении я получаю исключение:

HTTP Status 404 - Servlet checkout is not available

type Status report

message Servlet checkout is not available

description The requested resource (Servlet checkout is not available) is not available.
Apache Tomcat/7.0.22

Можете ли вы опубликовать свои файлы конфигурации Spring и сообщить нам, на каком сервере приложений он должен работать?
Gergely Szilagyi

@Gergely Szilagyi, я обновил вопрос.
Махмуд Салех

удалил свой ответ, потому что он бесполезен. извините :(
Gergely Szilagyi

@iNan, я использую eclipse indigo
Махмуд Салех

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

Ответы:


248

Вам необходимо добавить «Maven Dependency» в сборку развертывания.

  • Щелкните правой кнопкой мыши свой проект и выберите свойства.
  • щелкните Deployment Assembly.
  • нажмите добавить
  • нажмите "Записи пути сборки Java"
  • выберите Maven Dependencies "
  • нажмите Готово.

Восстановите и разверните снова

Примечание: это также применимо для проекта, отличного от maven .


Приятно - я был сбит с толку, увидев, что даже после добавления правильной зависимости в мой pom.xml ошибку не решил, пока я не последовал указанным выше
инструкциям

Хорошее .. идеальное решение
Prasad VS

1
Почему это работает? Я имею в виду, разве не должны быть доступны все зависимости maven? Если бы я использовал подключаемый модуль Tomcat7 с tomcat7: run, как бы это было достигнуто?
Johnny Bigoode

Работает как шарм!
yrazlik

Это также применимо для проекта, отличного от maven. !! Я создал проект maven, и у меня такая же проблема. это решение сработало для меня.
Bandham Manikanta 01

33

Два возможных ответа:

1- Вы не включили в свою библиотеку файлы spring-beans и spring-context jar. Если вы используете maven (что очень поможет), этих двух строк будет достаточно

<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
   <version>3.1.0.RELEASE</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
   <version>3.1.0.RELEASE</version>
</dependency>

2- Необходимые jar-файлы находятся в вашем пути к классам, но не развернуты на tomcat.


Приятно, что вы решили проблему, но я не думаю, что из вашей проблемы можно понять, что вы используете maven.
Serkan Arıkuşu

1
maven отмечен в вопросе!
Махмуд Салех

3
добавление spring-webmvcк моему pom.xmlрешит проблему. Спасибо.
OO7

19

Привет, ребята, у меня была такая же проблема с Idea Intellij и Spring 4, я исправил проблему и хотел поделиться с вами ответом.

Я использую tomcat 7 / idea intellij 13 / spring 4

pom.xml зависимости

  <properties>
    <spring.version>4.0.5.RELEASE</spring.version>
  </properties>

  <dependencies>     
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
enter code here
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.2</version>
    </dependency>
        <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
  </dependencies>

По идее Intellij вам нужно перейти в Файл -> Настройки проекта -> Артефакты. затем введите описание изображения здесь

очистить -> пересобрать проект -> собрать артефакт, и все будет в порядке ...


Ты гений. Не могли бы вы объяснить, в чем разница? Почему Maven все импортирует, но вам все равно нужно это сделать, чтобы все работало?
DMurta

@DMurta, кто сказал, что maven все экспортирует?
Adelin

12

Это решает проблему для меня. Это легко и довольно просто объясняется.

Шаг 1

  • Щелкните правой кнопкой мыши проект
  • Щелкните Свойства

Шаг 2

  • Щелкните вкладку Deployment Assembly в
  • Щелкните Добавить ...

Шаг 3

  • Нажмите на записи пути сборки Java

Шаг 4

  • Нажмите на зависимости Maven.
  • Нажмите кнопку Готово

Шаг 5

  • Повторно разверните приложение Spring MVC в Tomcat
  • Перезапустите Tomcat
  • Пункт списка

classnotfoundexception


Не могли бы вы пересмотреть оценку, которую вы дали моему предложению?
Lycone

10

Я обнаружил, что в сборке развертывания есть запись:

[persisted container] org.maven.ide.eclipse.maven2_classpath_container

Я удалил его и добавил maven dependenciesзапись, и теперь он работает нормально.


5

Если все эти советы не работают, вам следует воссоздать свой Сервер (Tomcat или что-то подобное). Это решило мою проблему.


5

Включите ниже зависимость в свой pom.xml

<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
   <version>{spring-version}</version>
</dependency>

4

Я столкнулся с той же проблемой. Когда я увидел папку .m2 репозитория maven (.... m2 \ repository \ org \ springframework \ spring-webmvc) в моем локальном хранилище, я обнаружил две папки 3.2.0.RELEASE. ТАК Я удалил один. Затем я перешел в проект, щелкните правой кнопкой мыши-> свойства-> сборка развертывания-> добавьте зависимости maven. чистая сборка, а затем перезапустите сервер. Затем загрузился DispatcherServlet.


Да, это тоже решило мою проблему, есть идеи, почему необходимо добавлять зависимости в сборку развертывания в eclipse?
Freelancer

2

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


2

Вы можете использовать сервер GlassFish, и ошибка будет решена. Я пробовал использовать tomcat7 и tomcat8, но эта ошибка появлялась постоянно, но решалась с помощью GlassFish. Думаю проблема с сервером.

Вот результаты с tomcat7: Результаты с tomcat7

Вот результаты с GlassFish: Результаты с GlassFish


1

Щелкните правой кнопкой мыши свой проект и выберите свойства. щелкните Deployement Assembly. нажмите "Добавить", нажмите "Записи пути сборки Java", выберите "Зависимости Maven", нажмите "Готово".


1

Это может быть кому-то полезно, так что выложу здесь. Мне не хватало этой зависимости от моегоpom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

1
  1. Перейти к свойствам от проекта , который ваш рабочий
  2. Выберите меню « Развертывание» и нажмите кнопку «Добавить».
  3. выберите записи пути сборки Java и щелкните зависимости Maven
  4. Соберите проект и запустите

введите описание изображения здесь


1
Когда я нажимаю «Записи пути сборки Java», у меня нет параметра «Зависимости Maven».
Муктадир Хан,

Я не знал, в каком аспекте вы задаете этот вопрос. Пожалуйста, попробуйте опубликовать новый вопрос.
Лова Читтумури,

0

Я решил, выполнив следующие шаги:

  • Щелкните правой кнопкой мыши проект> Настроить> Преобразовать в проект Maven
  • После преобразования щелкните правой кнопкой мыши проект> Maven> Обновить проект

Это исправляет настройки «Развертывания сборки» проекта.



0

Я нашел простое решение: просто добавьте свои банки в папку WEB-INF -> lib ..


0

У меня была такая же проблема в WebSphere, но я не смог найти решение, хотя я проверил, что зависимости Spring присутствуют, и он отлично работает в tomcat. Я удалил приложение, но по-прежнему получал ошибку, поэтому я думаю, что WebSphere зависает на каком-то поврежденном экземпляре.

Чтобы решить эту проблему, мне пришлось переустановить приложение, остановить его, удалить, а затем переустановить.


0

Для меня это была ошибка pom.xml- я установил <scope>provided<scope>свои зависимости, и из-за этого они не копировались на mvn packageэтапе.

Моими симптомами было сообщение об ошибке, опубликованное OP, и то, что банки не были включены в путь WEB-INF / lib внутри .war после запуска пакета. Когда я удалил прицел, на выходе появились банки, и теперь все загружается нормально.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.