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

87

estou usando spring 3.1.0.RELEASE e meu contêiner de servlet é tomcat 7 e meu IDE é eclipse indigo e o jar spring-webmvc-3.1.0.RELEASE.jar que contém o DispatcherServlet existe na pasta lib, e ainda quando executando o aplicativo, estou recebendo a exceção:

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)

informe por que estou recebendo essa exceção e como corrigi-la.

EDITAR: a seguir estão meus arquivos de configuração:

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>

também ao tentar acessar qualquer página do aplicativo, recebo a exceção:

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
Mahmoud Saleh
fonte
você pode postar seus arquivos de configuração do Spring e nos dizer em qual servidor de aplicativos ele deve ser executado?
Gergely Szilagyi
@Gergely Szilagyi, atualizei a pergunta.
Mahmoud Saleh
excluí minha resposta, porque não foi útil. desculpe :(
Gergely Szilagyi
@iNan, estou usando o eclipse indigo
Mahmoud Saleh
1
Acredito que não seja diretamente um CNF no DispatcherServlet, mas uma classe dependente gerou um erro. Verifique se você vê alguma outra exceção aninhada.
adarshr

Respostas:

246

Você precisa adicionar a "Dependência Maven" no Deployment Assembly

  • clique com o botão direito no seu projeto e escolha as propriedades.
  • clique em Deployment Assembly.
  • clique em adicionar
  • clique em "Java Build Path Entries"
  • selecione Dependências Maven "
  • clique em Concluir.

Reconstruir e implantar novamente

Nota: Isso também se aplica a projetos não maven .

krakos
fonte
Legal - Fiquei confuso ao ver que mesmo depois de adicionar a dependência adequada em meu pom.xml não resolveu o erro até que eu segui como acima ..
srinivas
Boa .. solução perfeita
Prasad VS
1
Por que isso funciona? Quer dizer, todas as dependências do maven não deveriam estar disponíveis? Se eu estivesse usando o Tomcat7 plugando com tomcat7: run, como isso seria feito?
Johnny Bigoode
Funciona como charme!
yrazlik
Isso também é aplicável para projetos não maven. !! Criei um projeto maven e tive o mesmo problema. esta solução funcionou para mim.
Bandham Manikanta 01 de
33

Duas respostas possíveis:

1- Você não incluiu feijões e jars de contexto de primavera em sua biblioteca. Se você estiver usando maven (o que vai ajudar muito) essas duas linhas serão suficientes

<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- Os jars necessários estão em seu classpath, mas não estão implantados no tomcat.

Serkan Arıkuşu
fonte
Bom que você resolveu o problema, mas não acho que pode ser entendido pelo seu problema que você está usando o maven.
Serkan Arıkuşu
1
maven está marcado na pergunta!
Mahmoud Saleh
3
adicionar spring-webmvcao meu pom.xmlresolverá o problema. Obrigado.
OO7 de
19

Olá pessoal, tive o mesmo problema com o Idea Intellij e Spring 4. Corrigi o problema e gostaria de compartilhar a resposta com vocês.

Eu uso o tomcat 7 / idea intellij 13 / spring 4

dependências 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>

No Idea Intellij você precisa ir em Arquivo -> Configurações do projeto -> Artefatos. Então insira a descrição da imagem aqui

limpar -> reconstruir o projeto -> construir o artefato e tudo ficará bem ...

Adelin
fonte
Você é um génio. Você poderia explicar que diferença isso faz? Por que o Maven importa tudo, mas você ainda precisa fazer isso para funcionar?
DMurta
@DMurta quem disse que o maven exporta tudo?
Adelin
12

Isso resolve o problema para mim. É fácil e muito simples explicado.

Passo 1

  • Clique com o botão direito no projeto
  • Clique em Propriedades

Passo 2

  • Clique na guia Deployment Assembly no
  • Clique em Adicionar ...

etapa 3

  • Clique em Java Build Path Entries

Passo 4

  • Clique em Dependências Maven
  • Clique no botão Terminar

Etapa 5

  • Reimplante o aplicativo Spring MVC no Tomcat novamente
  • Reinicie o Tomcat
  • Item da lista

classnotfoundexception

Lycone
fonte
Você reconsideraria a nota que deu à minha proposta?
Lycone
10

descobri que na montagem de implantação , havia a entrada:

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

Eu o removi e adicionei a maven dependenciesentrada, e ele funciona bem agora.

Mahmoud Saleh
fonte
5

Se todos esses conselhos não funcionarem, você deve recriar o seu servidor (Tomcat ou algo semelhante). Isso resolveu meu problema.

Chinbold Gansukh
fonte
5

Inclua a dependência abaixo em seu pom.xml

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

Eu estava enfrentando o mesmo problema. Quando vi a pasta maven repository .m2 (.... m2 \ repository \ org \ springframework \ spring-webmvc) no meu local, encontrei duas pastas 3.2.0.RELEASE. ASSIM, removi um. Então fui para o projeto, clique com o botão direito do mouse-> propriedades-> composição de implantação-> adicionar dependências do maven. limpe a compilação e reinicie o servidor. Em seguida, o DispatcherServlet foi carregado.

TKS
fonte
Sim, isso resolveu meu problema também, alguma ideia de por que é necessário adicionar dependências no assembly de implantação no eclipse?
Freelancer
2

No meu caso, tenho esse problema depois de usar o utilitário de projeto de atualização do maven. Tentei todas as soluções alternativas que você sugeriu, mas nada parecia funcionar. No final, a solução foi simplesmente remover o projeto do servidor para garantir que estava limpo e adicioná-lo novamente. Então funciona, espero que esta solução possa ajudar algum de vocês.

user2947452
fonte
2

Você pode usar o servidor GlassFish e o erro será resolvido. Tentei com tomcat7 e tomcat8, mas esse erro estava ocorrendo continuamente, mas resolvido com GlassFish. Acho que é um problema com o servidor.

Estes são os resultados com tomcat7: Resultados com tomcat7

Aqui estão os resultados com GlassFish: Resultados com GlassFish

Superb Saif
fonte
1

clique com o botão direito no seu projeto e escolha propriedades. clique em Deployement Assembly. clique em adicionar clique em "Java Build Path Entries" selecione Maven Dependencies "clique em Finish.

Vishal Thakur
fonte
1

Pode ser útil para alguém, então vou postar aqui. Eu estava sentindo falta dessa dependência do meupom.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>
luizfzs
fonte
1
  1. Vá para as propriedades do projeto que você está trabalhando
  2. Escolha o menu Deployment Assembly e clique no botão Adicionar
  3. opte pelas entradas do caminho de construção Java e clique nas dependências do Maven
  4. Construa o projeto e execute

insira a descrição da imagem aqui

Lova Chittumuri
fonte
Não tenho a opção Maven Dependencies quando clico em Java Build Path Entries.
Muktadir Khan
Não sei em que aspecto está a fazer esta pergunta. Por favor, tente postar uma nova pergunta.
Lova Chittumuri
0

Resolvi seguindo estas etapas:

  • Clique com o botão direito no projeto> Configurar> Converter para projeto Maven
  • Após a conversão, clique com o botão direito no projeto> Maven> Atualizar projeto

Isso corrige as configurações de "Montagem de implantação" do projeto.

Leo
fonte
0

Mova os arquivos jar do seu classpath para web-inf / lib e execute um novo servidor tomcat.

ajai kumar
fonte
0

Encontrei uma solução simples, basta adicionar seus jars dentro da pasta WEB-INF -> lib ..

Karthik
fonte
0

Tive o mesmo problema no WebSphere, mas não consegui encontrar uma solução, embora tenha verificado que as dependências do Spring estavam lá e ele funcionava bem no tomcat. Acabei desinstalando o aplicativo e ainda estava recebendo o erro, então acho que o WebSphere estava pendurado em alguma instância corrompida.

Para corrigir o problema, tive que reinstalar o aplicativo, interrompê-lo, desinstalá-lo e reinstalá-lo.

flip66
fonte
0

Para mim foi um erro no pom.xml- eu configurei <scope>provided<scope>minhas dependências, e isso estava fazendo com que não fossem copiadas durante o mvn packageestágio.

Meus sintomas foram a mensagem de erro que o OP postou e que os jars não foram incluídos no caminho WEB-INF / lib dentro do .war após a execução do pacote. Quando removi o osciloscópio, os frascos apareceram na saída e tudo carrega bem agora.

Dan Rayson
fonte