1
我正在制作java web项目,并尝试使用mongodb。 但是我发现一个问题,为什么我不能在Servlet中初始化Mongo
Mongo mongo = new Mongo("localhost", 27017)
,当我在一个主要方法使用它,它是确定的。 但是当我在使用它的Servlet的init()或的doGet,doPost方法 它会抛出异常,它是这样的:
Allocate exception for servlet RegServlet
java.lang.ClassNotFoundException: com.mongodb.MongoException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1116)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
2011-5-19 20:44:39 org.apache.catalina.startup.HostConfig checkResources
好的,非常感谢你,^ _ ^但你能告诉我什么是复制到/ lib和“使用添加外部jar”方法之间的区别。为什么会发生? – MouJian 2011-05-19 13:09:53
Web应用程序容器使用特定的类加载层次结构,而在Eclipse中使用外部jar **方法则不使用。当你从Eclipse的'main'方法运行它时,Eclipse会创建一个合适的类路径。当您从servlet运行它时,servlet类加载器不会使用任何Eclipse的构建/运行类路径设置。您需要将其添加到WEB-INF/lib中,并且可以在http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html上的classpath结构中进行阅读。 – Femi 2011-05-19 13:15:52
添加外部jar只会指向jar而将jar复制到lib意味着您的项目/应用程序完全包含jar。部署指向外部jar的应用程序永远不会将jar复制到项目中,因此它会丢失jar引用,而lib中的jar由类加载器或Web容器加载以供Web应用程序使用。我希望我尽可能清楚地解释。 :) – 2011-05-19 13:20:48