org.springframework.web.servlet.DispatcherServlet not found with VMWare vFabric tc Server and maven

13,181

Solution 1

You must include maven dependencies in the deployment assembly - they are not being deployed to the webserver. That's how you fix that error in eclipse, I guess STS will be similar.

Solution 2

In project options you should include Maven Dependencies to your Deployment Assembly enter image description here

  1. Project properties-> Deployment Assembly -> Add..

  2. Java Build Path Entries -> Maven Dependencies

  3. Finish

upd: Please also note that you should set packaging to war in your project pom.xml <packaging>war</packaging> and then use Maven->Update Project.. if you are using eclipse maven plugin to update STS project periodically.

Share:
13,181
Neets
Author by

Neets

Updated on June 11, 2022

Comments

  • Neets
    Neets almost 2 years

    I know that there is a previously posted question that is very similar to this one. But the solution doesn't apply to my problem.

    I'm trying to start a basic Spring project with Maven. This is my pom.xml:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>es.indra</groupId>
      <artifactId>springappUV</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <properties>
        <org.springframework.version>3.1.1.RELEASE</org.springframework.version>
      </properties>
      <packaging>war</packaging>
      <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
      </dependencies>
    </project>
    

    This is my web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>springappUV</display-name>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    
      <servlet>
        <servlet-name>springapp</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>/WEB-INF/spring/app-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>springapp</servlet-name>
        <url-pattern>*.htm</url-pattern>
      </servlet-mapping>
    </web-app>
    

    I am using VMWare vFabric tc Server Developer Edition v2.6 (the one that comes with STS). When I run the webapp with it, I get the following error:

    GRAVE: El Servlet /springappUV lanzó excepción de load()
    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:415)
        at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
        at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
        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)
    06-jul-2012 14:06:56 org.apache.catalina.startup.HostConfig deployDirectory
    

    I know it must have to do with the dependencies, but in the Maven dependencies the jar spring-webmvc-3.1.1.RELEASE.jar contains the class that the error says is missing. So it seems that the server doesn't know that the library is there.

    Does anyone know what could be happening?

    Thanks!