NoInitialContextException错误Tomcat

我一直试图在这里找到一个解决方案,但我不能……我有以下代码,我得到这个错误。

我错过了什么吗? 谢谢 :)

package src; import java.sql.DriverManager; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.sql.Wrapper; import java.util.Hashtable; import java.util.Properties; import java.io.*; import javax.*; import javax.activation.DataSource; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import oracle.jdbc.pool.OracleDataSource; public class TestServlet { @SuppressWarnings("unused") public static void main(String[] argv) throws SQLException, NamingException { Context initialContext = new InitialContext(); if ( initialContext == null){System.out.println("initialContext null");} else {System.out.println("initialContext");} // Get DataSource Context environmentContext = (Context)initialContext.lookup("java:/comp/env"); if ( environmentContext == null){System.out.println("envContext null.");} else {System.out.println("envContext");} DataSource ds = (DataSource)environmentContext.lookup("jdbc/testdb"); System.out.println("\n -------- Oracle JDBC Connection Testing ------"); try { Connection jdbcConnection = ((Statement) ds).getConnection(); OracleDataSource ods = ((Wrapper) ds).unwrap(OracleDataSource.class); jdbcConnection.close(); } catch (SQLException e) { System.out.println("Connection Failed! Check output console"); e.printStackTrace(); return; } String message = "You are connected!"; System.out.println(message); } } 

的context.xml

    

错误

 Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.lookup(Unknown Source) at src.TestServlet.main(TestServlet.java:34) 

如果您需要更多信息,请告诉我们!

您需要一个初始上下文工厂。 对于Tomcat,它是org.apache.naming.java.javaURLContextFactory

  System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory"); 

那么部署在服务器上的代码是什么? 您似乎尝试使用标准java访问Context,因为您调用静态main(因此我猜您从运行时调用TeestServlet.main)。 上下文将由Web服务器(Tomcat)设置,因此只有在将Web应用程序部署到Web服务器后才能使用它。

请注意您使用的driverClassName不正确。 如果您尝试连接到Oracle数据库,它应该是“oracle.jdbc.OracleDriver”。