我正在尝试部署一个新的Spring MVC应用程序,我已经完成了十几次,但现在我遇到了一个非常奇怪的错误,甚至无法弄清楚发生了什么:
我的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。
此外,控制台抛出了这样的异常:
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上运行应用程序
任何想法发生了什么?
答案 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不允许的稳定性和安全性问题。
谢谢!