java.lang.ClassNotFoundException:org.springframework.web.servlet.DispatcherServlet
我使用的是Spring 3.1.0.RELEASE ,而我的servlet容器是tomcat 7,而我的IDE是eclipse indigo ,而包含DispatcherServlet的jar spring-webmvc-3.1.0.RELEASE.jar存在于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)
请告知为什么我得到这个exception,以及如何解决这个问题。
编辑:以下是我的configuration文件:
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>
也试图访问应用程序中的任何页面时,我得到的exception:
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
您需要在部署程序集中添加“Maven Dependency”
- 右键单击您的项目并select属性。
- 点击部署程序集。
- 点击添加
- 点击“Java Build Path Entries”
- selectMaven Dependencies“
- 单击完成。
重新构build并再次部署
注意:这也适用于非Maven项目。
两个可能的答案:
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包在你的类path中,但不在tomcat上部署。
嗨,大家好,我和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你需要去文件 – >项目设置 – >工件。 然后
清洁 – >重build项目 – >build立神器,一切都会好的…
我发现在部署程序集中,有条目:
[persisted container] org.maven.ide.eclipse.maven2_classpath_container
我删除它,并添加了maven dependencies
项,现在工作正常。
我正面临同样的问题。 当我在我的本地看到Maven仓库.m2文件夹(…. m2 \ repository \ org \ springframework \ spring-webmvc)时,我发现了两个3.2.0.RELEASE文件夹。 所以我删除了一个。 然后我去了项目,右键单击 – >属性 – >部署essembly->添加Maven依赖项。 清理生成,然后重新启动服务器。 然后DispatcherServlet被加载。
如果所有这些build议都不起作用,您应该重新创build您的服务器(Tomcat或类似的)。 这解决了我的问题。
在我的情况下,使用Maven的更新项目实用程序后,我遇到了这个麻烦。 我尝试了所有你build议的解决办法,但似乎没有任何工作。 最后,解决scheme只是从服务器上删除项目,以确保它是干净的,并重新添加。 然后,它的作品,我希望这个解决scheme可以帮助你们任何一个。
右键单击您的项目并select属性。 点击Deployement Assembly。 点击添加点击“Java Build Path Entries”selectMaven Dependencies“点击Finish。
在你的pom.xml中包含下面的依赖关系
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>{spring-version}</version> </dependency>
您可以使用GlassFish服务器,错误将被解决。 我尝试了tomcat7和tomcat8,但是这个错误不断出现,但是用GlassFish解决了。 我认为这是服务器的问题。
这些是tomcat7的结果:
以下是GlassFish的结果:
我find了一个简单的解决scheme,只需在WEB-INF – > lib文件夹中添加你的jar。
我通过以下步骤解决:
- 右键单击项目>configuration>转换为Maven项目
- 转换后,右键单击项目> Maven>更新项目
这可以修复项目的“部署程序集”设置。
将jar文件从classpath移到web-inf / lib ,然后运行一个新的tomcat服务器。
- Eclipse / Maven错误:“在此环境中没有提供编译器”
- 有没有一个单一的Git命令来获取当前的标签,分支和提交?
- 如何访问资源过滤的maven.build.timestamp
- 为什么我们需要Maven或Ant,如果我们已经有Eclipse了?
- 如何configurationmaven install来跳过eclipse中的testing?
- 执行JaCoCo时是否因执行数据文件丢失而跳过JaCoCo?
- ant到Maven – 多个构build目标
- 类path条目org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER不会被导出
- 在Android Studio中,Gradle错误“Attribute”xxx“已被定义”