Tomcat6.0比较新,对于数据库连接池的配置方法,比以前更容易理解,此处实用的数据库是MySQL,其他的也都大同小异。
$CATALINA_HOME为Tomcat的安装目录。
方法一:
这就是以前修改
$CATALINA_HOME/conf/server.xml的方法,修改后就可以全局性的使用。在server.xml中的<context></context>中进行配置。
官方给出的配置方法如下:
【简要说明一下要用到的参数:path是你的工程(程序)的相对路径】
<Context path="/DBTest" docBase="DBTest"
debug="5" reloadable="true" crossContext="true">
【Resource中:name:你的此资源的名称,在这里是数据库连接,一般使用
jdbc/xxx的形式;auth是拥有者,设置成容器(Container)就可以;type是类型,数据资源就是javax.sql.DataSource;maxActive就是连接池中最大连接数,这个根据自己情况设置,保证足够就行,0的话表示不限制;maxIdle是连接池中最大空闲的连接数,-1表示不限制;maxWait是最大等待时间,单位是毫秒(ms),-1表示无限等待;username是连接数据库用的用户名;password是连接数据库用的与用户名对应的密码;driverClassName是连接驱动程序的名称,MySQL数据库的连接驱动名称就是com.mysql.jdbc.Driver(下载地址:http://dev.mysql.com/downloads/connector/j/5.0.html)下载完解压缩后把那个.jar文件拷贝到$CATALINA_HOME/lib目录下,最好在你
的
程序目录/WEB-INF/lib目录中也拷贝一份;url是连接数据库实用的地址,jdbc:mysql://localhost:3306/javatest?autoReconnect=true前面是固定的,localhost是本机ip地址,如果在别的机器上可以输入其ip,:3306表示MySQL数据库的端口号,javatest表示的是实用的数据库(Database)的名称,后面那个标示是否自动重新连接
】
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/>
</Context>
上面配置好了之后配置你的 程序目录/WEB-INF/web.xml
内容如下:
【是在<web-app></web-app>中配置,前面的这些一般照抄就可以】
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
【description是描述,就是说明内容,个人喜好随便写;res-ref-name是上面配置里面写的那个数据资源的名称,res-type是上面写的那个数据资源类型,res-auth是上面写的那个拥有者,总之全都和上面匹配就对啦】 <description>MySQL Test App</description> <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> </web-app> 【然后可以测试一下,官方给出的例子如下】
【我只写了个测试用函数,servlet主体你自己写去吧^_^】
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <sql:query var="rs" dataSource="jdbc/TestDB"> select id, foo, bar from testdata </sql:query> <html> <head> <title>DB Test</title> </head> <body> <h2>Results</h2> <c:forEach var="row" items="${rs.rows}"> Foo ${row.foo}<br/> Bar ${row.bar}<br/> </c:forEach> </body> </html> 【例子用到了JSTl 的SQL和Core标签库,自己从Sun网站下载吧
Java Web Services Developer Pack 或 Jakarta Taglib Standard 1.1 】
如果在Servlet中怎么用呢,我给出个我用的测试例子
【插入包根据个人需要自行定义,不用插这么多】
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
private Context ctx;//上下问环境
private DataSource dsource;//数据资源
private Connection conn;//数据库连接
private void getCon()
{
try
{
ctx = new InitialContext();//这里用到import javax.naming.*;
if(ctx == null)
{
throw new Exception("Context Look Up Error");
}
dsource = (DataSource)ctx.lookup("java:/comp/env/jdbc/TestDB");/**这里就是寻找刚才定义的数据资源的名字,看看jdbc/TestDB是不是就是刚才定义的数据资源名字,前面java:/comp/env/是固定的,把这两部分分开找也可以)*/
if(dsource != null)
{
conn = dsource.getConnection();//获取连接
if(conn != null)
{
System.out.println("OK");
/**这里你自己随便写,你可以Statement stmt = conn.CreateStatement();
然后stmt.execute(sql语句),慢慢试验去了,我就懒得写了^_^*/
}
}
}
catch(NamingException ne)
{
ne.printStackTrace();
}
catch(SQLException sqle)
{
sqle.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
}
【最后说明一下Tomcat6.0中的新的配置,就是把第一部分取出来<context>。。。。。。</context>全都取出来,然后在
工程目录/META-INF/context.xml中写明就可以了,例子如下:】
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/工程目录">
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/TestDB" password="javadude" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true" username="javauser"/>
<ResourceLink global="jdbc/TestDB" name="jdbc/TestDB" type="javax.sql.DataSource"/>
</Context>
【这样配置比较好,把context标签里的单独取出来看着比较明白,最后提醒的就是数据库的驱动一定要放正确位置,实在不行就在所有的lib目录里都放上就可以了,o(∩_∩)o...哈哈】
另外水平有限,就凑活着看吧(*^__^*) 嘻嘻……