我有一个非常示例的web.xml,如下所示:
问题是......如果我删除 org.springframework.web.servlet.DispatcherServlet 部分,我可以成功在Tomcat7中将我的项目部署为一个简单的JSP- Servlet应用程序。但是,一旦我使用Spring MVC,我的部署将 FAIL - 遇到异常org.apache.catalina.LifecycleException:无法启动组件[StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ WebMVCProj2]]
如何解决此错误?
<?xml version="1.0" encoding="UTF-8"?>
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd” id =“WebApp_ID”version =“3.0”&gt; Spring Web MVC应用程序
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
<!-- I can remove the part below to make deployment successful -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
我从Enterprise Bundle Repository(EBR)添加Spring MVC依赖项。我还使用了Tomcat7应该支持的Eclipse Dynamic Web Module 3.0。我的jre是Tomcat和我的项目使用的1.6.x 64位。我还在Eclipse中使用Web部署程序集。
这是我的完整例外:
严重:部署Web应用程序存档时出错E:\ MyServers \ apache-tomcat-7.0.30 \ webapps \ WebMVCProj2.war java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:无法启动组件[StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ WebMVCProj2]] 在org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904) 在org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 在org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618) 在org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:963) 在org.apache.catalina.startup.HostConfig $ DeployWar.run(HostConfig.java:1600) at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:303) 在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) 在java.lang.Thread.run(Thread.java:662)
答案 0 :(得分:2)
你应该在web-inf文件夹中有applicationContext.xml,或者你必须在web.xml中定义contextConfigLocation
<!-- Spring Context -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/application-contexts/*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
如果您可以发布异常跟踪,那将会更有帮助。
答案 1 :(得分:0)
你可以检查你的servlet类是否有任何注释,如 @WebServlet(&#34; 。我通过删除servlet类中的注释解决了类似的问题。