tomcat7.0下jndi的三種配置方式
tomcat配置jndi
有全域性配置和區域性配置。大致的有以下幾種配置方式:
jndi(Java Naming and Directory Interface,Java命名和目錄介面)是一組在Java應用中訪問命名和目錄服務的API。命名服務將名稱和物件聯絡起來,使得我們可以用名稱
訪問物件。目錄服務是一種命名服務,在這種服務裡,物件不但有名稱,還有屬性。
tomcat配置jndi有全域性配置和區域性配置。大致的有以下三種配置方式:
總結:
第一步:
將驅動程式(jar包)放到tomcat安裝目錄下的common\lib資料夾下
第二步:
第一種:區域性配置
在Tomcat的webapps目錄隨便建立一個工程目錄,例如test。在myjdbc目錄下建立META-INF目錄,在此目錄下建立一個context.xml檔案,裡面的內容如下:
<?xml version="1.0" encoding="UTF-8"?> <Context > <Resource name="jdbc/drp" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/drp" username="root" password="123456" maxActive="20" maxIdle="10" maxWait="10000"/> </Context>
附註如下:
Tomcat標準資料來源資源工廠配置項如下:
* driverClassName - 所使用的JDBC驅動類全稱。
* maxActive - 同一時刻可以自資料庫連線池中被分配的最大活動例項數。
* maxIdle - 同一時刻資料庫連線池中處於非活動狀態的最大連線數。
* maxWait - 當連線池中沒有可用連線時,連線池在丟擲異常前將等待的最大時間,單位毫秒。
* password - 傳給JDBC驅動的資料庫密碼。
* url - 傳給JDBC驅動的連線URL。
* user - 傳給JDBC驅動的資料庫使用者名稱。
* validationQuery - 一個SQL查詢語句,用於在連線被返回給應用前的連線池驗證。
* 如果指定了該屬性,則必為至少返回一行記錄的SQL SELECT語句。
jdbc/drp是資料來源的名稱(隨意寫,要和web.xml檔案中 <res-ref-name>jdbc/drp</res-ref-name> 一樣即可),
其他的引數按照自己的實際情況進行修改,例如資料庫的名稱、賬號、密碼。
第三步:
在myjdbc目錄下建立WEB-INF目錄,建立web.xml檔案,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/drp</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app
說明:
<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,試一下吧!(不能再普通java類裡面測試,必須啟動容器在jsp中呼叫)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
Connection conn =null;
try
{
//初始化查詢名稱空間
Context ctx = new InitialContext();
//InitialContext ctx = new InitialContext();亦可
//找到DataSource,對名稱進行定位java:comp/env是必須加的,後面跟你的DataSource名
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/drp");
//取出連線
conn = ds.getConnection();
out.println(conn);
out.println(conn.isClosed());
out.println("</br>");
System.out.println("connection pool connected !!");
} catch (NamingException e) {
System.out.println(e.getMessage());
} catch (SQLException e) {
e.printStackTrace();
}finally
{
//注意不是關閉,是放回連線池.
conn.close();
}
%>
This is my JSP page. <br>
</body>
</html>
我成功了!
以下是配置JNDI的其他方法,個人不建議使用,因為修改伺服器的
server.xml和web.xml,如果有一點錯誤,你的容器就會崩潰~
注:連線資料來源的方法還有很多,在這裡我簡要說之:
比如說第二步還可以這麼做:
第二種 區域性配置 :在/tomcat/conf/Catalina/localhost(或其它主機名)/中新增以
虛擬目錄名稱(你的工程名)命名的XML檔案來配置context.
比如我的主機下有個目錄dbpool其地址為tomcat/webapps/test我可以這樣來配置這個上下文:
在tomcat/conf/Catalina/localhost/目錄下建立test.xml檔案,內容和上面一樣.
第三種 區域性配置:還可以:
在/tomcat/conf/server.xml中<host></host>標籤之間新增
<Context path="/test" docBase="/test">
<Resource name="jdbc/drp"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/drp"
username="root" password="123456"
maxActive="20" maxIdle="10"
maxWait="10000"/>
</Context>
其中path是你的工程路徑(相對或絕對亦可),其中docBase="test"說明,此主機已經指向到webapps目錄下了,回頭來看test這個上下文,它實際目錄是位於webapps的目錄下的,所以
在Context中我們可以將docBase直接設定為test了。如果它在webapps/dbpool/test下,則設定為dbpool/test就可以了。
附:JNDI——Java Naming and Directory Interface是一套提供naming和 directory功能的 API,
Java應用程式開發者透過使用 JNDI,在naming和 directory方面的應用上就有了共通的準則.
還有一種全域性配置是在
1)在tomcat的conf資料夾下的context.xml配置檔案中加入:
<Resource name="jdbc/drp"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/drp"
username="root" password="123456"
maxActive="20" maxIdle="10"
maxWait="10000"/>
其他不變總結:如果要配置區域性的話,推薦使用第一種方式,這樣不依賴tomcat了。但是還是推薦使用最後一種方式好,雖然依賴tomat,但是是全域性的,而且可以配置
多個。對於以後切換使用方便。
在專案的web.xml中新增的資源引用可有可無。