在WEB开发中,有没有数据库连接池对WEB性能的影响非常大,Tomcat有自带的连接池,这一节就来配置Tomcat的连接池。
1、复制JDBC连接包
将JDBC连接包mysql-connector-java-3.1.10-bin.jar复制到D:/Program Files/Apache Software Foundation/Tomcat 5.0/common/lib目录下,common/lib是Tomcat的全局引用库的所在目录,Tomcat在启动时会自动加载这个目录中的所有JAR包。
有些网上的文章说也可以将数据库连接包复制到WEB应用的WEB-INF/lib中(本例的myweb/hello/WEB-INF/lib目录),这个目录是hello模块发布时会自动加载的一个包目录。但经笔者实验,如果连接包将放在此目录中,不用数据库连接池方式来访问数据库,则连接包可以正常使用;如果使用Tomcat连接池,则会出错误,连接包无法使用。
2、进入Tomcat的配置页面
用IE浏览器输入地址:http://127.0.0.1:8080/admin/ ,打开Tomcat服务器配置的登录页面,再输入用户名admin、密码123,进入Tomcat的配置页面,如下图9.31所示:
图9.31 连接池设置
单击左边的树结点“Data Source”→选择右上角的下拉框的“Create New Data Source”项,然后在表格中输入相应的连接池配置信息:
l JNDI Name:jdbc/mysql - 设置连接池的JNDI名,在Java程序会用到此名。
l Data Source URL:jdbc:mysql://localhost/testdb - 数据库连接字串,testdb是数据库。
l JDBC Driver Class:com.mysql.jdbc.Driver - JDBC连接类。
l User Name:root - 数据库登录用户名。
l Password:****** - 数据库登录密码。本例为123。
l Max. Active Connections:4 - 最大连接数。实际应用时,应该根据WEB使用情况设置得大一些;开发时,4个连接足够了。
l Max. Idle Connections:2 - 最大空闲连接数。
l Max. Wait for Connection:5000 - 最大等待连接限制。
l Validation Query:验证用的查询语句,可以不填。
填写完以上信息之后,单击右下角的“Save”按钮保存修改,再单击右上角的“Commit Changes”按钮提交修改。
3、修改Tomcat的server.xml文件
server.xml文件的具体路径:C:/Program Files/Apache Software Foundation/Tomcat 5.0/conf/server.xml,在原来的<Context>项中加入一个子项< ResourceLink>:
<Context path="/hello"
reloadable="true"
docBase="d:/eclipse/workspace/myweb/hello"
workDir="d:/eclipse/workspace/myweb/bin">
<ResourceLink name="jdbc/mysql"
global="jdbc/mysql"
type="javax.sql.DataSource"/>
</Context>
4、测试数据库连接池
将以下测试程序命名为test.jsp,创建在hello模块的根目录下,然后通过IE地址:http://127.0.0.1:8080/hello/test.jsp来访问。这个测试程序从数据库连接池中获得一个数据库连接对象Connection,然后再查询数据库的test表,并用test1,test2列的数据打印出来.
test.jsp源代码如下:
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
Connection con=null;
Statement sm=null;
ResultSet rs=null;
try{
InitialContext ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql");
con = ds.getConnection();
sm = con.createStatement();
rs = sm.executeQuery("select * from test");
while(rs.next())
out.println(rs.getString("test1")+","+rs.getString("test2"));
}catch(Exception e){
e.printStackTrace();
}finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {}
rs = null;
}
if (sm != null) {
try {
sm.close();
} catch (SQLException e) {}
sm = null;
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {}
con = null;
}
}
%>
程序说明:
l <%@ page contentType="text/html; charset=GBK"%> 这一行是设置网页的字符集,也是解决中文乱码问题的关键一句。如果是纯html页面,则应在</HEAD>项之前加入这样一句:<META http-equiv=Content-Type content="text/html; charset=GBK">。
l <%@ page import="java.sql.*"%> 这一句类似于Java中的import java.sql.*。
l ctx.lookup("java:comp/env/jdbc/mysql"); 这一句中comp/env是固定不变的,jdbc/mysql是前面连接池设置的JNDI Name。
l 在程序最后一定要关闭数据库连接(实际是将连接返回给连接池,并没有真正关闭),否则,很快就会因连接数耗尽,而无法再正常显示JSP页面。