2013-04-09 87 views
0

我想创建我的第一个连接池。我正在用Tomcat 7和MySQL DB创建一个Java Web应用程序,并且我想创建一个实现连接池的Servelet。我尝试了一个网络代码,但出现了一个持久的HTTP 500问题。我搜索了很多关于它,但仍然没有解决方案,所以请没有其他讨论的链接,因为我已经检查了他们所有! 这里是我的代码: 的context.xml中:HTTP状态500 - 异常访问数据库:连接池 - Servlet Tomcat - MySQL

<?xml version="1.0" encoding="UTF-8"?> 
    <Context antiJARLocking="true" path="/My_First_WEB" 
    reloadable="true" 
docBase="\My_First_WEB" > 

<Resource 
    name="jdbc/TutoPool" 
    auth="Container" 
    type="javax.sql.DataSource"/> 

<ResourceParams name="jdbc/TutoPool"> 
    <parameter> 
     <name>username</name> 
     <value>root</value> 
    </parameter> 
    <parameter> 
     <name>password</name> 
     <value>""</value> 
    </parameter> 
    <parameter> 
     <name>driverClassName</name> 
     <value>com.mysql.jdbc.Driver</value> 
    </parameter> 
    <parameter> 
     <name>url</name> 
     <value>jdbc:mysql://localhost/TutoPool</value> 
    </parameter> 
       <parameter> 
    <name>maxActive</name> 
    <value>8</value> 
</parameter> 
<parameter> 
    <name>maxIdle</name> 
    <value>8</value> 
</parameter> 
<parameter> 
    <name>maxWait</name> 
    <value>10000</value> 
</parameter> 
<parameter> 
    <name>validationQuery</name> 
    <value>select 1</value> 
</parameter> 
<parameter> 
    <name>removeAbandoned</name> 
    <value>true</value> 
</parameter> 
<parameter> 
    <name>removeAbandonedTimeout</name> 
    <value>20</value> 
</parameter> 
<parameter> 
    <name>logAbandoned</name> 
    <value>true</value> 
</parameter> 
</ResourceParams>   
</Context> 

在web.xml如下:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <servlet> 
    <servlet-name>TutoPool</servlet-name> 
    <servlet-class>MyServelets.TutoPool</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>TutoPool</servlet-name> 
    <url-pattern>/TutoPool</url-pattern> 
</servlet-mapping> 
<resource-ref> 
    <description> 
     reference a la ressource BDD pour le pool 
    </description> 
    <res-ref-name>jdbc/TutoPool</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 
<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 

终于TutoPool.java如下:

package MyServelets; 

import java.io.*; 
import java.sql.*; 
import javax.naming.*; 
import javax.servlet.ServletException; 
import javax.servlet.UnavailableException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.*; 
import javax.sql.DataSource; 


@WebServlet(name = "TutoPool", urlPatterns = {"/TutoPool"}) 
public class TutoPool extends HttpServlet { 
    private DataSource ds; //la source de données 



/** 
* Processes requests for both HTTP 
* <code>GET</code> and 
* <code>POST</code> methods. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    try { 
     /* TODO output your page here. You may use following sample code. */ 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet TutoPool</title>");    
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Servlet TutoPool at " + request.getContextPath() + "</h1>"); 
     out.println("</body>"); 
     out.println("</html>"); 
    } finally {    
     out.close(); 
    } 
} 

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
/** 
* Handles the HTTP 
* <code>GET</code> method. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 

    out.println("<html><head></head>"); 
    out.println("<body>"); 

    Connection con=null; 
    Statement s=null; 
    ResultSet rs=null; 

    try { 
     //récupération de la Connection depuis le DataSource 
     con = ds.getConnection(); 
     s = con.createStatement(); 
     rs = s.executeQuery("SELECT * FROM table1"); 
     while (rs.next()) { 
      out.println(rs.getString(1) + "  "); 
      out.println(rs.getString(2) + "<br/>"); 
     } 
    } catch (SQLException e) { 
     response.sendError(500, "Exception sur l'accès à la BDD " + e); 
    }finally { 
     if (rs != null) 
     { 
      try { 
       rs.close(); 
      } catch (SQLException e) {} 
      rs = null; 
     } 
     if (s != null) { 
      try { 
       s.close(); 
      } catch (SQLException e) {} 
      s = null; 
     } 
     if (con != null) { 
      try { 
       con.close(); 
      } catch (SQLException e) {} 
      con = null; 
     } 
    } 
    out.println("</body>"); 
    out.println("</html>"); 
    out.close(); 
} 

/** 
* Returns a short description of the servlet. 
* 
* @return a String containing servlet description 
*/ 
@Override 
public String getServletInfo() { 
    return "Short description"; 
}// </editor-fold> 

/** 
* 
* @throws ServletException 
*/ 
@Override 
public void init() throws ServletException { 
    try { 
     //récupération de la source de donnée 
     Context initCtx = new InitialContext(); 
     ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/TutoPool"); 
    } catch (Exception e) { 
     throw new UnavailableException(e.getMessage()); 
    } 
} 

}

和最后出现的错误是:

type Rapport d''état 

message Exception sur l'accès à la BDD org.apache.tomcat.dbcp.dbcp.SQLNestedException:  Cannot create JDBC driver of class '' for connect URL 'null' 

description Le serveur a rencontré une erreur interne (Exception sur l'accès à la BDD org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null') qui l'a empêché de satisfaire la requête. 

我在图书馆查出使用mysql-connector这个建议立即进行删除工作!仍然没有。 请问,AnyOne有这个想法吗?我在这里溺水! :( 感谢。

+0

你可以转换异常消息为英语 – Ankit 2013-04-09 10:05:27

+0

在你将最后一行的末尾? F用英文消息指出'SQLNestedException'。 – mthmulders 2013-04-09 10:11:58

回答

1

据消息,连接池没有找到你的驱动程序类的名称,也不是为你的数据库的URL。所以我想这是一个配置问题。

根据到Tomcat 7 documentation,你应该配置连接池是这样的:?

<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" 
      maxActive="100" maxIdle="30" maxWait="10000" 
      username="root" password="" driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost/TutoPool"/> 

你有没有试过,以及

+0

它的作品!非常感谢你们。事实上,似乎我错误配置了Tomcat,并且给定的配置运行良好。 thx @mthmulders。 – Vtik 2013-04-16 09:49:46

相关问题