1、連接池
Connection的取得和開放是代價比較高的處理,解決這個問題的方法是連接池。
連接池就是事先取得一定數量的Connection,程序執行處理的時候不是新建Connection,而是取得預先准備好的Connection的使用權。
2、DataSource
提供連接池機能的技術叫DataSource。 Javax.sql.DataSource
一般web服務器會提供。比如Tomcat5.5。
DataSource可以通過new來取得,但通常是通過 JNDI 用 lookup 取得。
3、JNDI (Java Naming and Directory Interface)
Java 命名和目錄服務接口(Java Naming and Directory Interface,JNDI)。
命名服務: 可以類比為Session屬性的Map的高級版。實現指定名字的對象的,取得和登錄。一般Web服務器會提供。
目錄服務: 和命名服務類似,但是對象的管理是層次性的。
在命名服務里登錄的對象,可以用lookup()取得。
4、基於Tomcat利用DataSource
1)JDBC驅動配置
直接利用JDBC編程的話,JDBC驅動放在Web app的WEB-INF/lib下就可以了。
利用DataSource的話,JDBC需要放在app服務器的類目錄下:
<Tomcat安裝目錄>/lib
2)修改context.xml文件
在Tomcat登錄DataSource有很多辦法,在context.xml里追加<Resource>是最簡單的。
文件: <Tomcat安裝目錄>/conf/Catalina/localhost/<ProjectName.xml>
內容: 追加<Resource>要素
Resource要素
- name,名字。用這個名字取得DataResource
- type,類名。一般javax.sql.DataSource
- auth,認證種類,Application或Container。Application的話,需要寫認證代碼。
- username
- password
- driverClassName,JDBC驅動的類名
- url,JDBC的URL
例如:
<Context>
、、、、、、
<Resource name="jdbc/myds" auth="Container"
type="javax.sql.DataSource"
username="sa" password=""
driverClassName="org.hsqldb.jdbcDriver"
url="jdbc:hsqldb:hsql://localhost"/>
、、、、、、
</Context>
3)使用DataSource
例子:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
**********
try{
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/名字");
Connection con = ds.getConnection();
*******
}catch(Exception e){
throw new ServletException(e);
}
}