2016-04-09 45 views
0

サーブレットを使用して接続プーリングを実装しようとしています。私は似たような質問がたくさんあることを知っていますが、誰も助けることはできません。ここで接続プーリングで適切なドライバ例外がありません

は例外です:

ます。java.sql.SQLException: org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactoryで接続URLのヌルのためのクラスのJDBCドライバを作成できません(BasicDataSource.java: 2160) org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2032で) org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532で) で connection.CityInfoServlet.showCityInformation(CityInfoServlet.java:104)(CityInfoServlet.java:76) の場合、 のjavax.servlet.http.HttpServlet.service(HttpServlet.java:722)の場合、javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) でorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) でorg.apache.tomcatました。 org.apache.catalina.core.ApplicationFilterChain.doFilterでwebsocket.server.WsFilter.doFilter(WsFilter.java:52) でorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) ( ApplicationFilterC hain.java:206) でorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) でorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) で org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) でorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) org.apache.catalina.valvesで.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catal org.apache.coyote.http11.AbstractHttp11Processor.processでina.core.StandardEngineValve.invoke org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521)で(StandardEngineValve.java:88) ( org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRunで org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:674) (NioEndpoint.javaでAbstractHttp11Processor.java:1096) : 1500) でorg.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1456)java.util.concurrent.ThreadPoolExecutor.runWorkerで (不明なソース)java.util.concurrentので 。 ThreadPoolExe cuter $ Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source)原因: ます。java.sql.SQLException: org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2144) で java.sql.DriverManager.getDriver(不明なソース)ではありません、適切なドライバ...ます。java.sql.SQLException:によって引き起こさ

:いいえ、適切なドライバ

27より私がなぜこの例外ショーを知りません。

WEB-INF/libフォルダにjarファイルを追加しました。ここで

は私のサーブレットコード:

package connection; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.sql.DataSource; 

@WebServlet("/CityInfoServlet") 
public class CityInfoServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 

DataSource dataSource = null; 

public void init(ServletConfig config) { 
    try{ 
     Context initContext = new InitialContext(); 
     Context envContext = (Context) initContext.lookup("java:/comp/env"); 
     dataSource = (DataSource) envContext.lookup("jdbc/worldDB"); 
    } 
    catch(Exception exe) 
    { 
     exe.printStackTrace(); 
    } 
} 

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 
    response.setContentType("text/html"); 

    PrintWriter out = response.getWriter(); 
    String title = "City Information From Mysql Database"; 
    out.print("<html><body bgcolor=\"#f0f0f0\">"); 
    out.print("<h1 align=\"center\">" + title + "</h1>\n"); 
    showCityInformation(out); 

    out.print("</body></html>"); 
} 

private void showCityInformation(PrintWriter out) 
{ 
    Connection connection = null; 
    PreparedStatement preparedStatement = null; 
    try { 

     String sql = "select * from city limit ?"; 
     connection = dataSource.getConnection(); 

     preparedStatement = connection.prepareStatement(sql); 
     preparedStatement.setInt(1, 10); 

     ResultSet rs = preparedStatement.executeQuery(); 

     while(rs.next()) 
     { 
      int id = rs.getInt(1); 
      String name = rs.getString(2); 
      String countryCode = rs.getString(3); 
      String district = rs.getString(4); 
      int population = rs.getInt(5); 

      out.print("ID: " + id + "<br>"); 
      out.print("Name: " + name+ "<br>"); 
      out.print("CountryCode: " + countryCode+ "<br>"); 
      out.print("District: " + district+ "<br>"); 
      out.println("Population: " + population+ "<br>"); 
      out.println("--------------------------------------"+ "<br>"); 
     } 

     rs.close(); 

    } 

    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     try { 
      if(preparedStatement != null) { 
       preparedStatement.close(); 
      } 
     } 
     catch(SQLException sqlException){ 
      sqlException.printStackTrace(); 
     } 
     try 
     { 
      if(connection != null) 
      { 
       connection.close(); 
      } 
     } 
     catch(SQLException sqlException) 
     { 
      sqlException.printStackTrace(); 
     } 
    } 
    } 
} 

これは、接続のためのURLが設定されていないので、JDBCライブラリはできませんされたcontext.xmlファイル

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
<Resource name="jdbc/worldDB" auth="Container" type="javax.sql.DataSource" 
    maxTotal="100" maxIdle="30" maxWaitMillis="10000" 
    username="root" password="12345" driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/world"/> 
</Context> 
+0

はい私は実際のデータからそれを正確にコピーしました。 @RadLexus –

+0

リソースのコンテキストで何が間違っていますか? @RadLexus –

+1

はタイプミスでした。そして、その@RadLexusについて申し訳ありません –

答えて

0
Cannot create JDBC driver of class for connect URL null 

ですロードするドライバを決定します。

+0

URLがcontext.xmlに追加されます –

+0

問題ではありません。実行時にURLがnullの場合、nullです。それがnullでないと予想される場合、解決のために検索psaceを縮小したばかりです。 –

0

私はそれを考える..

1 - [サーバー/ libフォルダに

2を、適切なドライバをコピーする必要があります - あなたのプロジェクトのMETA-INFに作成したデータソース接続のcontext.xmlに持っている場合は、変更

3 - あなたはこのようなプロジェクトのweb.xmlの

<resource-ref> 
    <description>MySQLDatasource</description> 
    <res-ref-name>jdbc/worldDB</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

は、その後、あなたがこのアプリhttp://localhost:8080/app_nameを実行することができます(これを追加) - OK しかし、あなたは、あなたが

1に持ってhttp://localhost:8080

からこのアプリを呼び出したい場合は - あなたのサーバ/ confに/ server.xmlファイル

2にコンテキストタグを追加する - これを追加あなたのサーバー/ confに/ context.xmlにまでライン

<Resource name="jdbc/worldDB" auth="Container" type="javax.sql.DataSource" 
    maxTotal="100" maxIdle="30" maxWaitMillis="10000" 
    username="root" password="12345" driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/world"/> 

3 - 再起動サーバ

この接続はサーバーコンテキストから検出されます。

関連する問題