2011-05-19 45 views
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 

回答

7

那是因爲你還沒有包括含類com.mongodb.MongoException(所以爲什麼你有java.lang.ClassNotFoundException罐子)。您的應用程序不需要使用jar來運行MongoDB。在您的WEB-INF/lib文件夾或您的webapp服務器/容器lib文件夾中添加相關的Mongo jars。

+0

好的,非常感謝你,^ _ ^但你能告訴我什麼是複製到/ lib和「使用添加外部jar」方法之間的區別。爲什麼會發生? – MouJian 2011-05-19 13:09:53

+0

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

+0

添加外部jar只會指向jar而將jar複製到lib意味着您的項目/應用程序完全包含jar。部署指向外部jar的應用程序永遠不會將jar複製到項目中,因此它會丟失jar引用,而lib中的jar由類加載器或Web容器加載以供Web應用程序使用。我希望我儘可能清楚地解釋。 :) – 2011-05-19 13:20:48

相關問題