本例使用的數據庫爲Ms SQL Server 2005,對於其它數據庫只是修改一下相應的參數即可,
服務器是Tomcat7.0, 與之間的版本配置連接池最簡便
自己總結了一下,希望起到一個拋磚引玉的作用
總結:
第一步:
將驅動程序(jar包)放到tomcat安裝目錄下的common\lib文件夾下(注意:我一開始是將jar包加在工程目錄WEB-INF的lib裏面,所以提示找不到對應的驅動。其實只要在common\lib加入驅動jar包就可以了。)
第二步:
在Tomcat的webapps目錄隨便創建一個工程目錄,例如JNDITest。在JNDITest目錄下創建META-INF目錄,在此目錄下創建一個context.xml文件,裏面的內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/test" <!--這個與等會web配置中的value/name對應-->
auth="Container"
<!--這個可以不用(可選屬性)-->
type="javax.sql.DataSource" <!--這個與等會web配置中的type對應-->
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa" password=""
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=JNDITest"/>
</Context>
附註如下:
Tomcat標準數據源資源工廠配置項如下:
* driverClassName - 所使用的JDBC驅動類全稱。
* maxActive - 同一時刻可以自數據庫連接池中被分配的最大活動實例數。
* maxIdle - 同一時刻數據庫連接池中處於非活動狀態的最大連接數。
* maxWait - 當連接池中沒有可用連接時,連接池在拋出異常前將等待的最大時間,單位毫秒。
* password - 傳給JDBC驅動的數據庫密碼。
* url - 傳給JDBC驅動的連接URL。
* user - 傳給JDBC驅動的數據庫用戶名。
* validationQuery - 一個SQL查詢語句,用於在連接被返回給應用前的連接池驗證。
* 如果指定了該屬性,則必爲至少返回一行記錄的SQL SELECT語句。
*auth:指定管理Resource的Manager,由兩個可選值:Container和Application。Container表示由容器來創建和管理Resource,Application表示由WEB應用來創建和管理Resource。如果在web application deployment descriptor中使用<resource-ref>,這個屬性是必需的,如果使用<resource-env-ref>,這個屬性是可選的。
jdbc/test是數據源的名稱(隨意寫,要和web.xml文件中 <res-ref-name>jdbc/test</res-ref-name> 一樣即可),
其他的參數按照自己的實際情況進行修改,例如數據庫的名稱、賬號、密碼。
第三步:
在JNDITest目錄下創建WEB-INF目錄,創建web.xml文件,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--配置jstl標籤:這個需要將jstl.jar、standar.jar導入WEB-INF的lib裏面-->
<jsp-config>
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-html</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-logic</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-nested</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-tiles</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>
</taglib>
</jsp-config>
<!--database JNDI name configuration 配置1-->
<env-entry>
<env-entry-name>JNDIname</env-entry-name>
<env-entry-type>javax.sql.DataSource</env-entry-type>
<env-entry-value>jdbc/test</env-entry-value>
</env-entry>
<!--database JNDI name configuration 配置1-->
<!--database JNDI name configuration 配置2
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
配置2-->
</web-app>
配置1類似配置2,兩種選其一。
配置2說明:
<resource-ref>
<descrtiption>引用資源說明</descrtiption>
<res-ref-name>引用資源的JNDI名</res-ref-name>
<res-type>引用資源的類名</res-type>
<res-auth>管理者(Container)</res-auth><!--Container-容器管理 Application-Web應用管理-->
</resource-ref>
第四步:
寫個jsp,試一下吧!
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*,com.DBConnection" %>
<%
try
{
//初始化查找命名空間
Context ctx = new InitialContext();
//InitialContext ctx = new InitialContext();亦可
//找到DataSource,對名稱進行定位java:comp/env是必須加的,後面跟你的DataSource名
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/test");
//取出連接
Connection conn = ds.getConnection();
System.out.println("connection pool connected !!");
} catch (NamingException e) {
System.out.println(e.getMessage());
} catch (SQLException e) {
e.printStackTrace();
}finally
{
//注意不是關閉,是放回連接池.
conn.close();
}
}
%>
或寫個JSP用標籤庫測試一下:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ 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/test">
select * from test
</sql:query>
<html>
<head>
<title>DB Test</title>
</head>
<body>
<c:forEach var="row" items="${rs.rows}">
${row.id}<br/>
</c:forEach>
</body>
</html>