Spring MVC配置引发奇怪的exception

我正在尝试部署一个新的Spring MVC应用程序,我已经完成了十几次,但现在我运行了一个非常奇怪的错误,甚至无法弄清楚发生了什么:

  1. 我的javaee-api与servlet-api冲突。 在控制台中它写道:

    INFO: validateJarFile(E:\development\workspace\conference\src\main\webapp\WEB- INF\lib\javaee-api-6.0.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class 

嗯,是的,这是一个警告,但这个jar子没有加载,我需要它。 另外,我的应用程序库中没有servlet-api jar等。

  1. 此外,控制台抛出这样的exception:

      SEVERE: Error configuring application listener of class com.sun.faces.config.ConfigureListener java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener 

我的意思是,这个jar是指JSF和所有这些东西。 我根本不使用它,它应该在哪里尝试这样的课程? O_O

我在tomcat 7上运行应用程序

有什么想法发生了什么?

jar文件的问题是Tomcat的类加载器validation所有clases,它加载到JVM。 在你的情况下,它面临来自servlets API的一个类 – javax.servlet.Servlet 。 您的应用程序代码不得WEB-INF/lib 包含此类。 这些类随servlet容器本身一起提供。 如果您使用maven,只需将javax.servlet:servlet-api的范围更改为provided

修复此问题后,尝试重新加载整个应用程序,因为可能会发生类加载器完全阻止javaee-api-6.0.jar ,不允许从中加载任何其他类。

您可以通过设置其依赖项中provided的作用域,从webapps的WEB-INF / lib目录中删除javaee-api-6.0.jar文件。

Spec指的是Servlet容器(这里,Tomcat)将提供Java EE规范的实现类。 具有特定于应用程序的实现是spec / Tomcat不允许的稳定性和安全性问题。

谢谢!