it-roy-ru.com

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

я использую 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
80
Mahmoud Saleh

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

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

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

10
Mahmoud Saleh

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

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

Перестройте и разверните снова

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

222
krakos

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

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- Необходимые банки находятся в вашем classpath, но не развернуты на Tomcat. 

28
Serkan Arıkuşu

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

Я использую Tomcat 7/идея Intellij 13/весна 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 вам нужно перейти в File -> Project Settings -> Artifacts. Затем enter image description here

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

18
Adelin

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

Шаг 1

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

Шаг 2

  • Нажмите на вкладку «Сборка развертывания» в 
  • Нажмите Добавить ...

Шаг 3

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

Шаг 4

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

Шаг 5

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

classnotfoundexception

4
Lycone

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

4
Chinbold Gansukh

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

4
TKS

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

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

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

2
user2947452

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

Вот результаты с Tomcat7:  Results with Tomcat7

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

2
Superb Saif

щелкните правой кнопкой мыши по своему проекту и выберите свойства . нажмите на Deployement Assembly . нажмите addclick на «Записи пути сборки Java» выберите Maven Dependencies » нажмите Finish.

1
Vishal Thakur

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

0
Karthik

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

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

0
flip66

Это может быть полезно для кого-то, поэтому я опубликую это здесь . Мне не хватало этой зависимости от моего 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>
0
luizfzs

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

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

0
Dan Rayson

Переместите файлы jar из вашего пути к классам в web-inf/lib и запустите новый сервер Tomcat.

0
ajai kumar

Я решил, выполнив следующие действия:

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

Это исправляет настройки «Deployment Assembly» проекта.

0
leo