在日志中使用ClassNotFoundException进行静默404

时间:2013-09-10 12:54:15

标签: java spring tomcat spring-mvc

Spring教程,part one,问题三......(facepalm here)

“Silent 404”意味着我从Tomcat获得一个带有空消息字段的标准404。

摘自Tomcat localhost..log:

сен 10, 2013 3:39:51 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet springapp as unavailable
сен 10, 2013 3:39:51 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /springapp threw load() exception
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
<stack trace omitted>

该课程位于spring-webmvc-4.0.0.M3.jar,位于war/WEB-INF/lib/spring

bash-3.1$ pwd
/c/Users/mkumpan/Projects/Spring testing/war/WEB-INF/lib/spring
bash-3.1$ jar -tf ./spring-webmvc-4.0.0.M3.jar | grep DispatcherServlet
org/springframework/web/servlet/DispatcherServlet.class
...

我的build.xml中的classrefs都包含该路径:

<path id="master-classpath">
    <fileset dir="${web.dir}/WEB-INF/lib">
        <include name="*/*.jar"/>
    </fileset>

    <fileset dir="${appserver.lib}">
        <include name="*.jar"/>
    </fileset>

    <pathelement path="${build.dir}"/>
</path>

<path id="catalina-ant-classpath">
    <fileset dir="${web.dir}/WEB-INF/lib">
        <include name="*/*.jar"/>
    </fileset>

    <fileset dir="${appserver.lib}">
        <include name="*.jar"/>
    </fileset>
</path>

不确定其他信息可能相关。 希望提出建议。死路一条。

3 个答案:

答案 0 :(得分:2)

如果在应用程序部署时将spring-webmvc-4.0.0.M3.jar置于WEB-INF / lib / spring下,则tomcat将无法找到它。它必须直接放在WEB-INF / lib下。 (对于Tomcat和任何符合Java EE的servlet容器都是如此。)

答案 1 :(得分:1)

部署到应用服务器spring-webmvc-4.0.0.M3.jar后,应位于/WEB-INF/lib,而不是/WEB-INF/lib/spring。因此,将该jar移至/WEB-INF/lib或修复ant build以将其复制到生成的战争中

答案 2 :(得分:1)

将你的弹簧罐放在/ lib / spring文件夹中 - 一级升级。这将解决您的问题。

/ c / Users / mkumpan / Projects / Spring testing / war / WEB-INF / lib /应该包含你的弹簧罐。