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)

будь ласка, повідомте, чому я отримую цей виняток, і як це виправити.

EDIT: ось мої файли конфігурації:

1- .springBan:

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

Ви можете розмістити свої весняні конфігураційні файли та сказати нам, на якому сервері додатків він повинен працювати?
Гергелі Сіладжі,

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

видалив мою відповідь, оскільки вона не була корисною. вибач :(
Гергелі Сілаґі

@iNan, я використовую eclipse indigo
Махмуд Салех

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

Відповіді:


248

Вам потрібно додати "Залежність Maven" у складі розгортання

  • клацніть правою кнопкою миші на своєму проекті та виберіть властивості.
  • натисніть на Асамблею розгортання.
  • натисніть Додати
  • натисніть "Записи шляху побудови Java"
  • вибрати залежності Maven "
  • натисніть Готово.

Відновіть і знову розгорніть

Примітка: Це також застосовується для немовен- проекту.


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

Приємно .. ідеальне рішення
Prasad VS

1
Чому це працює? Я маю на увазі, чи не повинні бути доступними всі залежності maven? Якби я використовував підключення Tomcat7 разом з tomcat7: run, як би це було зроблено?
Джонні Бігуд,

Працює як шарм!
yrazlik

Це також стосується немовен-проекту. !! Я створив проект maven і мав ту ж проблему. це рішення спрацювало для мене.
Bandham Manikanta

33

Дві можливі відповіді:

1- Ви не включили у свою бібліотеку банки з весняними зернами та банки з контекстом для весни. Якщо ви використовуєте 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- Необхідні банки знаходяться у вашому шляху до класу, але не розгортаються на tomcat.


Приємно, що ви вирішили проблему, але я не думаю, що з вашої проблеми можна зрозуміти, що ви використовуєте maven.
Серкан Арікушу

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

  • Клацніть на вкладці "Розгортання збірки" в
  • Натисніть Додати ...

Крок 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. ТАК Я видалив одну. Потім я перейшов до проекту, клацніть правою кнопкою миші-> властивості-> розгортання essembly-> додайте залежності maven. чисту збірку, а потім перезапустіть сервер. Потім завантажився DispatcherServlet.


Так, це також вирішило мою проблему, будь-яка ідея, чому потрібно додавати залежності в збірці розгортання в eclipse?
Фрілансер

2

У моєму випадку ця проблема виникає після використання утиліти проекту оновлення maven. Я спробував усі способи вирішення, які ви запропонували, але, здавалося, нічого не вийшло. Зрештою рішенням було просто видалити проект із сервера, щоб переконатися, що він чистий, і додати його знову. Тоді це працює, я сподіваюся, це рішення може допомогти кожному з вас.


2

Ви можете використовувати сервер GlassFish, і помилка буде виправлена. Я намагався з tomcat7 та tomcat8, але ця помилка постійно надходила, але вирішувалась за допомогою GlassFish. Я думаю, що це проблема з сервером.

Ось результати з tomcat7: Результати з tomcat7

Ось результати з GlassFish: Результати за допомогою GlassFish


1

клацніть правою кнопкою миші на своєму проекті та виберіть властивості. натисніть на Асамблею розгортання. натисніть Додати, клацніть на "Записи шляху побудови 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
У мене немає опції Maven Dependencies, коли я натискаю записи Java Build Path.
Муктадір-хан

я не знав, в якому аспекті ви задаєте це питання. Будь ласка, спробуйте опублікувати нове запитання.
Лова Чіттумурі

0

Я вирішив, виконавши такі дії:

  • Клацніть правою кнопкою миші у проекті> Налаштувати> Перетворити на проект Maven
  • Після перетворення клацніть правою кнопкою миші у проекті> Maven> Оновити проект

Це виправляє налаштування "Асамблея розгортання" проекту.


0

Перемістіть файли jar зі шляху до класу до web-inf / lib та запустіть новий сервер tomcat.


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.