JSP+Tomcat+SQL2000数据库连接池的配置方法

来源:互联网  作者:本站整理
摘要:测试环境:1. 数据库:Microsoft SQL Server 20002. 数据库驱动程序:net.sourceforge.jtds.jdbc.DriverJNDI(Java Naming and Directory Interface……

下面是一些参数的说明:

<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">

其中:

1) path  指定路径,这里设定的是$CATALINA_HOME/webapps下的quality目录;
2) docBase 文件根目录。
3) reloader  当网页被更新时是否重新编译。
4) maxActive 连接池的最大数据库连接数。设为0表示无限制。
5) maxIdle  数据库连接的最大空闲时间。超过此空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
6) maxWait 最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
7) removeAbandoned 回收被遗弃的(一般是忘了释放的)数据库连接到连接池中。
8) removeAbandonedTimeout 数据库连接过多长时间不用将被视为被遗弃而收回连接池中。
9) logAbandoned 将被遗弃的数据库连接的回收记入日志。
10) driverClassName JDBC驱动程序。
11) url   数据库连接字符串

在$CATALINA_HOME/webapps/quality/WEB-INF/web.xml里设置被引用的资源:

下面是配置代码,必须放在<web-app>和</web-app>里。

<!-- Database Config start -->
<resource-ref>
<description>connectDB test</description>
<res-ref-name>jdbc/connectDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!-- Database Config end -->

下面是一下参数的必要说明:

1) description  对被引用的资源的描述。
2) res-ref-name  资源名称。见上面的<ResourceParams name="jdbc/connectDB">
3) res-type  资源类型。见上面的<Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>

在JSP中使用资源:

这是在$CATALINA_HOME/webapps/quality下的某级子目录里的jsp网页文件部分代码:

<%@ page contentType="text/html;charset=GBK"%>
<%@ page errorPage="error.jsp"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*"%>
<html>
 <head>
 </head>
 <body>
  <%
   ………………
   ………………
   // 数据库操作
   Context ctx=null;
   Connection cnn=null;
   Statement stmt=null;
   ResultSet rs=null;
   try
   {
  ctx=new InitialContext();
  if(ctx==null)
  throw new Exception("没有匹配的环境");
  DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
  if(ds==null)
  throw new Exception("没有匹配数据库");
  
  cnn=ds.getConnection();
  stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
  rs=stmt.executeQuery("select * from table1");

………………
  ………………

}
   finally
   {
  if(rs!=null)
  rs.close();
  if(stmt!=null)
  stmt.close();
  if(cnn!=null)
  cnn.close();
  if(ctx!=null)
  ctx.close();
   }
  %>
 </body>
</html>

代码说明:

DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
上面这句应用了刚才设的资源。

资源使用完要释放,尤其是Context资源,见try-catch-finally部分的finally代码段,这是一种好的习惯。资源释放时如果释放了上级资源,下级资源将先被释放。如:释放了ctx,那么资源释放顺序将是rs,stmt,cnn,ctx。换句话说,如果释放了ctx,那么rs,stmt和cnn都将不可用了。

这里的释放资源只是将数据库连接返回连接池中,并不是把资源真正释放掉,见数据库连接池概述。

【相关文章】好搜一下
揭秘金山网盾破钓鱼骗局的四大核心技术

揭秘金山网盾破钓鱼骗局的四大核心技术

一款大小不到2M,安装后占用系统资源仅为1M的免费软件,金山网盾在推出一周后,安…