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

时间:2012-06-27 13:30:59

标签: spring maven spring-mvc maven-2

我正在使用 spring 3.1.0.RELEASE ,我的servlet容器是 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

18 个答案:

答案 0 :(得分:226)

您需要在部署程序集中添加“Maven依赖关系”

  • 右键单击您的项目并选择属性。
  • 点击部署程序集。
  • 点击添加
  • 点击“Java Build Path Entries”
  • 选择Maven Dependencies“
  • 点击完成。

重新构建并再次部署

注意:这也适用于非maven 项目。

答案 1 :(得分:28)

两个可能的答案:

1-你的lib中没有包含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上。

答案 2 :(得分:18)

大家好我和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中,您需要转到文件 - &gt;项目设置 - &gt;文物。然后 enter image description here

清洁 - &gt;重建项目 - &gt;构建工件,一切都会好的......

答案 3 :(得分:10)

我发现在部署程序集中,有条目:

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

我将其删除,并添加了maven dependencies条目,现在工作正常。

答案 4 :(得分:7)

这解决了我的问题。简单易懂,简单易懂。

第1步

  • 右键点击项目
  • 点击“属性”

第2步

  • 单击
  • 中的Deployment Assembly选项卡
  • 点击添加...

第3步

  • 单击Java Build Path Entries

第4步

  • 点击Maven Dependencies
  • 单击“完成”按钮

第5步

  • 再次将Spring MVC应用程序重新部署到Tomcat
  • 重启Tomcat
  • 列表项

classnotfoundexception

答案 5 :(得分:4)

我面临同样的问题。当我在本地看到maven存储库.m2文件夹(.... m2 \ repository \ org \ springframework \ spring-webmvc)时,我发现了两个3.2.0.RELEASE文件夹。所以我删除了一个。 然后我去了项目,右键点击 - >&gt;属性 - &gt;部署essembly-&gt;添加maven依赖项。 清理生成然后重新启动服务器。 然后加载了DispatcherServlet。

答案 6 :(得分:4)

如果所有这些建议都不起作用,您应该重新创建服务器(Tomcat或类似的)。这解决了我的问题。

答案 7 :(得分:3)

在pom.xml中包含以下依赖项

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

答案 8 :(得分:2)

您可以使用GlassFish服务器并解决错误。我尝试使用tomcat7和tomcat8,但是这个错误不断出现,但是用GlassFish解决了。我认为这是服务器的问题。

这些是tomcat7的结果: Results with tomcat7

以下是GlassFish的结果: Results with GlassFish

答案 9 :(得分:2)

在我的情况下,使用maven的更新项目实用程序后我遇到了麻烦。 我尝试了你建议的所有解决方法,但似乎没有任何工作。 最后,解决方案只是从服务器中删除项目以确保它是干净的,然后再次添加。然后它有效,我希望这个解决方案可以帮助你们。

答案 10 :(得分:1)

右键单击您的项目并选择属性。 单击Deployement Assembly。 点击添加 点击&#34; Java Build Path Entries&#34; 选择Maven Dependencies&#34; 单击“完成”。

答案 11 :(得分: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>

答案 12 :(得分:0)

我按照以下步骤解决了:

  • 右键单击项目&gt;配置&gt;转换为Maven项目
  • 转换后,右键单击项目&gt; Maven&gt;更新项目

这修复了部署程序集&#34;项目的设置。

答案 13 :(得分:0)

将jar文件从类路径移动到 web-inf / lib ,然后运行新的tomcat服务器。

答案 14 :(得分:0)

我找到了一个简单的解决方案, 只需在WEB-INF - &gt; lib文件夹中添加您的jar ..

答案 15 :(得分:0)

我在WebSphere中也遇到了同样的问题,但是即使我验证了Spring依赖项并在tomcat中也可以正常运行,却找不到解决方案。我最终卸载了该应用程序,但仍然出现错误,因此我认为WebSphere挂在了一些损坏的实例上。

要解决此问题,我必须重新安装该应用程序,将其停止,然后将其卸载,然后重新安装。

答案 16 :(得分:0)

对我来说,在pom.xml中是一个错误-我将<scope>provided<scope>设置为依赖项,这使得它们在mvn package阶段不会被复制。

我的症状是OP发布的错误消息,并且运行程序包后,.war内的WEB-INF / lib路径中未包含jar。当我删除示波器时,罐子出现在输出中,并且现在全部加载正常。

答案 17 :(得分:0)

  1. 转到您工作的项目属性
  2. 选择 Deployment Assembly 菜单,然后单击添加按钮
  3. 选择 Java构建路径条目,然后点击 Maven依赖项
  4. 构建项目并运行

enter image description here