Tomcat+mysql+eclipse数据库连接池配置

来源:互联网 发布:seo课程大纲 编辑:程序博客网 时间:2024/06/05 11:51
 

一、开发工具

1.tomcat版本:tomcat5.5.27

2.mysql版本:mysql 5.1

3.数据库驱动程序:mysql-connector-java-5.1.9

4.eclipse版本:eclipse 3.4.1

5.JDK版本:JDK 1.6

二、准备工作

1.在Eclipse里创建Dynamic Web Project,名称为test。在WebContent\META-INF下创建context.xml文件。应用目录如下图所示:

2.把数据库驱动程序mysql-connector-java-5.1.9拷贝到WEB-INF\lib和tomcat-5.5.27\common\lib目录下。

三、配置数据源

1.配置context.xml文件

context.xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true">
 <Resource name="jdbc/BookDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000"
 username="root" password="cwx2009" driverClassName="com.mysql.jdbc.Driver"
 url="jdbc:mysql://127.0.0.1:3306/BookDB?autoReconnect=true">
 </Resource>
</Context>

<Resource属性说明>

1)name:指定Resource的JNDI名字。

2)auth:指定管理Resource的Manager,它有两个可选值:Container和Application。Container表示由容器来创建和管理Resource,Application表示由web应用来创建和管理Resource。

3)type: 指定Resource的Java类名。

4)username:指定连接数据库的用户名。

5)password:指定连接数据库的口令。

6)driverClassName:指定连接数据库的JDBC驱动器中的Driver实现类的名字。

7)url:指定连接数据库的URL,127.0.0.1是要连接的数据库服务器的ip,3306是数据库服务器端口,BookDB是数据库名称。

8)maxActive:指定数据库连接池中处于活动状态的数据库连接的最大数目,取值为0,表示不受限制。

9)maxIdle:指定数据库连接池中处于空闲状态的数据库连接的最大数目,取值为0,表示不受限制。

10)maxWait:指定数据库连接池中的数据库连接处于空闲状态的最长时间(以毫秒为单位),超过这一时间,将会抛出异常。取值为-1,表示可以无限期等待。

2.配置web.xml文件

        如果web应用访问了有Servlet容器管理的某个JNDI资源,那么必须在web.xml文件中声明对这个JNDI资源的引用。表示资源引用的元素为<resource-ref>,以下是声明引用jdbc/BookDB数据源的代码:

<resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/BookDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>

<resource-ref>属性说明:

1)description:对所引用的资源的说明。

2)res-ref-name:指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应。

3)res-type:指定所引用资源的类名,与<Resource>元素中的type属性对应。

4)res-auth:指定管理所引用资源的Manager,与<Resource>元素中的auth属性对应。

3.配置server.xml文件

       在tomcat-5.5.27\conf下找到server.xml文件,在<GlobalNamingResources></GlobalNamingResources>之间加入如下内容:

<Resource name="jdbc/BookDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="cwx2009" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/BookDB?autoReconnect=true" />

在<Host></Host>之间加入如下内容:

<Context docBase="D:\develop\java\eclipse\workspace\test\WebContent" path="/test" reloadable="true" source="org.eclipse.jst.j2ee.server:test">
         <ResourceLink global="jdbc/BookDB" name="jdbc/BookDB" type="javax.sql.DataSource"/>
</Context>

<Context>属性说明:

1)docBase:指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase属性的相对路径。如果Web应用采用开放目录结构,则指定Web应用的根目录;如果Web应用是个WAR文件,则指定WAR文件的路径。

2)path:指定访问该Web应用的URL入口。

3)reloadable:如果这个属性为true,Tomcat服务器会在运行状态下监视classes下文件的改动和WEB-INF/web.xml文件的改动,监测到文件被改动,服务器会自动重新加载Web应用。

4)source:

<ResourceLink>属性说明:

1)global:被连接的连接全局资源的名称。

2)name:创建的资源连接的名称,相对于java:comp/env context。

3)type:当web应用在该资源连接上进行查找时,返回的Java类名的全称。

四、通过数据源连接数据库的JSP范例程序

创建JSP范例:tdsaccess.jsp

<%@ page language="java" contentType="text/html; charset=GB2312"
    pageEncoding="GB2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">

<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>

<html>
<head>

<title>使用tomcat自带的数据库连接池</title>
</head>
<body>
 <%
 try{
  Connection conn;
  Statement stmt;
  ResultSet rs;
  //从数据源中获得数据库连接
  Context ctx = new InitialContext();
  DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");
  conn = ds.getConnection();
  
  //创建一个SQL声明
  stmt = conn.createStatement();
  //查询记录
  rs = stmt.executeQuery("select ID,NAME,TITLE,PRICE from BOOKS");
  //输出查询结果
  out.println("<table border=1 width=400>");
  while (rs.next()){
   String col1 = rs.getString(1);
   String col2 = rs.getString(2);
   String col3 = rs.getString(3);
   float col4 = rs.getFloat(4);
   
   //转换字符编码
   //col1 = new String(col1.getBytes("ISO-8859-1"),"GB2312");
   //col2 = new String(col2.getBytes("ISO-8859-1"),"GB2312");
   //col3 = new String(col3.getBytes("ISO-8859-1"),"GB2312");
   
   //打印显示的数据
   out.println("<tr><td>"+col1+"</td><td>"+col2+"</td><td>"+col3+"</td><td>"+col4+"</td></tr>");
  }
  out.println("</table>");
  
  //关闭结果集、SQL声明和数据库连接
  rs.close();
  stmt.close();
  conn.close();
 }catch(Exception e){
  out.println(e.getMessage());
  e.printStackTrace();
 }
 %>
</body>
</html>

         在浏览器中输入http://localhost:8080/test/tdsaccess.jsp,即可查看结果。

 

四、问题

在查看结果时,可能遇到以下问题:

1.Cannot create PoolableConnectionFactory (Could not create connection to database server. Attempted reconnect 3 times. Giving up.)

.....

.....

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
 Could not create connection to database server. Attempted reconnect 3 times. Gi
ving up.

        原因:

        在编写mysql的URL时,写错了IP、端口号或数据名称,将导致这个错误;若MYSQL的服务没有启动,在查看结果时,也将导致这个错误。

 

原创粉丝点击