tomcat jndi sqlserver2005 配置

 

本例使用的數據庫爲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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章