星期四, 10月 24, 2013

Tomcat+JSP+Connection Pool on MySQL database

【目的】建立Connection Pool,不用每一頁JSP開頭都要建立一次Database的Connection。網頁大量被存取的時候不會因為建立連結而嚴重變慢。

最基本的JSP教學,都會教你怎麼連資料庫。
所以下面這些CODE應該大家都不漠生。
(如果很漠生的話...快點找個JSP教學網惡補一下吧 XD)

Class.forName("org.gjt.mm.mysql.Driver"); //mysql jdbc driver可能不一樣的jdbc package會不太一樣。
//不過.jar可以用zip打開來看,哪一個package都可以看一下driver是在哪個路徑。好~這不是本篇重點 XD
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/[資料庫的名字]?user=[資料庫使用者]&password=[密碼]);

至此就是開好MySQL的Connection了。
不過如果每一頁都這樣開,會讓使用時頁與頁的轉換頻繁的網站在建立Connection所需花費計算負擔很重
所以就要建立一個Connection Pool,先把Connections建好存起來,要用的時候拿出來用。
Tomcat剛好有這個功能,就讓我們實作一下吧。
首先,你要先準備好這幾樣東西:

1. 【MySQL JDBC Driver】 這個可以去MySQL的網站下載。應該裡面會有一個.jar檔,沒錯就是它!
2. 【MySQL Driver Name】 就像我剛剛說的,不知道路徑的話...用ZIP打開第一個.jar檔看看他的Driver.class在哪吧~
3. 【資料庫的名字】 你都會用mysql了,總要知道你要連哪一個資料庫吧。
4. 【資料庫使用者】 至少要有個能從本機端控制資料的帳號
5. 【密碼】 帳號的密碼

好了,準備好了,接下來還有四步就能完成了。
基本上最新版的Tomcat本身就有Connection Pool的設計,所以我們就是要去啟動那個設計。
(你可以看看你的[tomcat目錄]/lib裡面有沒有tomcat-dbcp.jar,有的話就沒問題啦~ dbcp應該是DataBaseConnectionPool的縮寫吧~)
找到了嗎?很好...那就...

STEP 1. 把【MySQL JDBC Driver】丟到[tomcat目錄]/lib裡面
STEP 2. 找[tomcat目錄]/conf 裡面context.xml,並用記事本(notepad)打開它。在<Context></Context>之間加入這段設定:


<Resource name="jdbc/【資料庫的名字】"
auth="Container"
type="javax.sql.DataSource"
username="【資料庫使用者】"
password="【密碼】"
driverClassName="【MySQL Driver Name】"
url="jdbc:mysql://localhost:3306/【資料庫的名字】"
maxActive="15"
maxIdle="3"
maxWait="10000" />


STEP 3. 到你的[tomcat目錄]/webapps裡面去,你的網站應該是放在[tomcat目錄]/webapps/[你的APP的名字],但這名字不重要,哈哈。
你如果都沒有使用任何設定,那目錄下可能只有.jsp檔。不過請建立一個資料夾叫WEB-INF。如果有這個資料夾的話就好說了,請找資料夾裡的web.xml檔(沒有的話,也請自己建立一個空白的檔案),用notepad打開填入這些:

<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" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" version="2.4">
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/【資料庫的名字】</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth> </resource-ref>
</web-app>


STEP 4. 最後一步就是,到你的JSP去,將你原先connection的部份改成下面這樣:

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/【資料庫的名字】");
Connection con = ds.getConnection();

忘了說,他要import的東西有這些:

<%@page import="java.sql.*"%>
<%@page import="javax.sql.*"%>
<%@page import="javax.naming.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>

STEP 5... 哈哈,我都說只有四步而以,所以已經完成啦。快點重開Tomcat,確定資料庫是可以連的。然後試試你的JSP會不會動吧。
這只是最基本的設定和介紹,如果要更進階的,網路上有很多資料可以找找。

超簡單教學,咱們下次見~ ^_^ ~