Spring MVC配置引发奇怪的异常

时间:2013-02-23 22:50:10

标签: java spring model-view-controller tomcat servlets

我正在尝试部署一个新的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
    
  2. 嗯,是的,这是一个警告,但这个jar没有加载,我需要它。另外,我的应用程序库等没有servlet-api jar。

    1. 此外,控制台抛出了这样的异常:

       SEVERE: Error configuring application listener of class com.sun.faces.config.ConfigureListener
       java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener
      
    2. 我的意思是,这个jar是指JSF和所有这些东西。我根本不使用它,它应该在哪里尝试这样的课程? O_O

      我在tomcat 7上运行应用程序

      任何想法发生了什么?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

谢谢!