2016-07-03 11 views
0

Ich lerne, wie man ein Servlet durch Zugriff auf die JNDI-Datenquelle verwendet und die Verbindung konnte jedoch nicht ' t sein established.Here ist mein Code:Kann JDBC-Treiber der Klasse '' für Verbindungs-URL 'null' nicht erstellen und ich weiß nicht, was mit meinem Tomcat falsch ist

Tomcat Server.xml:

**<Resource name="jdbc/testDB" 
    auth="Container" 
    type="javax.sql.DataSource" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://192.168.56.101:3306/testDB?characterEncoding=utf-8" 
    username="test" 
    password="123" 
    maxActive="200" 
    maxIdle="50" 
    maxWait="3000"/>** 

Tomcat context.xml:

**<Resource name="jdbc/testDB" 
    auth="Container" 
    type="javax.sql.DataSource" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://192.168.56.101:3306/testDB?characterEncoding=utf-8" 
    username="test" 
    password="123" 
    maxActive="200" 
    maxIdle="50" 
    maxWait="3000"/>** 

und letzte web.xml:

<servlet-mapping> 
    <servlet-name>ViewDictionary</servlet-name> 
    <url-pattern>/servlet/ViewDictionary</url-pattern> 
</servlet-mapping> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
**<resource-ref> 
    <description>DB Connection</description> 
    <res-ref-name>jdbc/testDB</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref>** 

Das Problem tritt hier:

javax.naming.Context ctx = new javax.naming.InitialContext(); 
javax.sql.DataSource ds = (javax.sql.DataSource)ctx. 
    lookup("java:/comp/env/jdbc/testDB"); 
    **Connection conn = ds.getConnection(); //Couldn't get the Connection** 

Fehler-Stack-Trace:

java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'null' 
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2160) 
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2032) 
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532) 
at chapter4.ViewDictionary.doGet(ViewDictionary.java:28) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.sql.SQLException: No suitable driver 
at java.sql.DriverManager.getDriver(DriverManager.java:315) 
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2144) 
... 26 more 
+0

Könnten Sie bitte den vollständigen stracktrace posten, damit wir sehen können, woher die Ausnahme stammt. –

+0

der volle stracktrace wurde dort gesetzt. –

+0

Class.forName ("com.mysql.jdbc.Driver"); "Diese Anweisung könnte funktionieren, aber ich möchte das nicht tun. Und ich weiß immer noch nicht, wie ich die Verbindung durch JNDI bekommen kann. Außerdem ist es mir bereits gelungen, die Verbindung durch den JDBC-Kontext zu bekommen. –

Antwort

1

Meine letzte Lösung ist eine context.xml, wo der "Ressource" Tag findet an und dann bewegen zu erzeugen es in das Verzeichnis "/ WebContent/META-INF". Meine IDE ist Eclipse. Hier

ist der Code:

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
<Resource name="jdbc/testDB" auth="Container" type="javax.sql.DataSource" 
    maxActive="100" maxIdle="30" maxWait="10000" username="test" password="123" 
    driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.56.101:3306/testDB" /> 
</Context> 

Das Verzeichnis ist:

enter image description here

Schließlich funktioniert es. Ich kann jedoch immer noch nicht den richtigen Weg finden, die Dateien server.xml und context.xml im Tomcat direkt zu verbinden, um die Verbindung herzustellen.

+0

. Die XML-Datei sollte sich im Ordner META-INF befinden –