使用数据库连接池可以提高数据库的访问性能。Tomcat的数据库连接池是使用Jakarta-Commons项目中Database Connection Pool,包含下列组件:Jakarta-Commons DBCP 、Jakarta-Commons Collections和Jakarta-Commons Pool。这些库文件包必须和JDBC驱动程序一起安装在$CATALINA_HOME/common/lib这个目录下。如果检查发现没有,请到http://jakarta.apache.org/中下载相应的库文件包。
在$CATALINA_HOME/common/lib必须有下列包:
• commons-collections.jar。
• commons-dbcp.jar。
• commons-pool.jar。
• mysql-connector-java-3.0.7-stable-bin.jar //MySQL的驱动程序。
确定这些库文件包确实无误后,进行Tomcat的配置。
我使用的环境为Tomcat 5.08,数据库为Sqlserver2000 ;
有两种配置方法:
第一种:仅为一个具体的工程所使用而配置的数据源
第一步:打开%Tomcat_Home%/conf/server.xml,在</Context>和</host>前添加描述
<Context path="/friend" docBase="e:/snail" debug="0" reloadable="true">
<Resource name = "jdbc/mydatasource" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name ="jdbc/mydatasource">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=pubs</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>sa</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>
注释: “friend”是工程名,JNDI name 是 “jdbc/mydatasource”
用户名和密码都是"sa"
第二步,一旦Tomcat容器配置完成后,就可以在应用系统通过JNDI访问到这个数据库连接池。
在工程friend里更改web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mydatasource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
这样在Web容器中,通过java:comp/env/jdbc/mydatasource就可以寻找到jdbc/mydatasource的连接池。注意,在Java代码中写JNDI Name时,要加上java:comp/env/,这也是通用规定。
第三步,重新启动tomcat。
第四步,可以在工程friend里写个测试页面test.jsp:
<%@pageimport="java.sql.*"%>
<%@pageimport="javax.sql.*"%>
<%@pageimport="javax.naming.*"%>
<%
DataSource ds=null;
try{
InitialContext ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mydatasource");
Connection conn=ds.getConnection();
Statement stmt=conn.createStatement();
String strSql="select * from authors";
ResultSet rs=stmt.executeQuery(strSql);
while(rs.next()){
out.println(rs.getString(1)+"<br>");
}
}
catch(Exception ex){
out.println("出错啦!!!");
ex.printStackTrace();
}
%>
如果能正常显示多行数据则测试成功,否则失败。
第二种是针对Tomcat中所有的工程进行的配置,可以使用Tomcat图形界面进行设置
第一步,通过IE浏览器进入Tomcat Administration ,用户名和密码就是安装tomcat时设置的密码.,然后选择create New DataSource.
输入如下:
JNDI name :jdbc/allds
可根据实际修改密码
第二步 :在%tomcat_home%/conf/Catalina/localhost目录下找到要使用此数据源的工程同名的xml文件.
在Context一节中加入以下代码:
<ResourceLink name="jdbc/allds" global="jdbc/allds" type="javax.sql.DataSourcer"/>
第三步,在%tomcat_home%'/common/lib中添加要用到的sqlserver的驱动包,重新启动tomcat.
第四步,测试.在刚才要使用数据源的工程中添加test.jsp,代码如下:
<%@pageimport="java.sql.*"%>
<%@pageimport="javax.sql.*"%>
<%@pageimport="javax.naming.*"%>
<%
DataSource ds=null;
try{
InitialContext ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/allds");
Connection conn=ds.getConnection();
Statement stmt=conn.createStatement();
String strSql="select * from authors";
ResultSet rs=stmt.executeQuery(strSql);
while(rs.next()){
out.println(rs.getString(2)+"<br>");
}
}
catch(Exception ex){
out.println("出错啦!!!");
ex.printStackTrace();
}
%>
至此.tomcat中配置连接池的两种方法都全写出来了.
首先,要去Apache的官方网站下载两个软件包,分别是:
commons-dbcp-1.2.1和commons-pool-1.3
将其中的jar文件拷贝到Struts项目的lib文件夹中。
对struts-config文件进行配置,在其中加入如下内容:
<data-sources>
<data-source type="org.apache.commons.dbcp.BasicDataSource">
<set-property
property="driverClassName"
value="com.mysql.jdbc.Driver" />
<set-property
property="url"
value="jdbc:mysql://localhost/test" />
<set-property
property="username"
value="root" />
<set-property
property="password"
value="123456" />
<set-property
property="maxActive"
value="10" />
<set-property
property="maxWait"
value="5000" />
<set-property
property="defaultAutoCommit"
value="false" />
<set-property
property="defaultReadOnly"
value="false" />
<set-property
property="validationQuery"
value="SELECT COUNT(*) FROM student" />
</data-source>
</data-sources>
最后,在你写的Action类中可以使用如下代码访问数据库:
DataSource ds = null;
Connection cn = null;
try{
ds = getDataSource(request);
cn = ds.getConnection();
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery("select * from student");
rs.next();
String s = rs.getString(1);
System.out.println(s);
return mapping.findForward("showresult");
}catch(Exception e){
e.printStackTrace();
}