取得 DataSource


在J2EE的架構藍圖中,Struts應是屬於Web層,在Web層中,基本上不應涉及資料存儲的邏輯,Web負責客戶端的請求轉發,並適當的將一些工作交給業務邏輯層,如果需要存取資料庫,則由業務邏輯層呼叫資料存儲層的物件來進行。

不過並不是每一個程式都要設計為三層式的架構,視您的需求而定,如果您只是想利用Struts的 MVC 職責分配,區隔程式碼與視圖元件,並且想要直接在Struts的元件中進行資料庫的存取,也沒有人會阻止您這麼作(通常這發生在您開發一個小型的程式時, 中大型程式的話,並不鼓勵這麼作)。

視您的需求而定,您可以直接在Struts中適當的元件中呼叫JDBC來完成您的資料庫存取。

您也許會需要連接池,您可以使用自己的連接池元件,然後透過 Plugin 介面 來掛上連接池並用以取得DataSource,例如:
<plug-in className="onlyfun.caterpillar.MyConnectionPool">
    <set-property
         property="configFile"
         value="/WEB-INF/conf/yourConnectionConfig.xml"/>
 </plug-in>
 

另一個方式是使用 Jakarta Commons DBCP 來取得DataSource,您可以在struts-config.xml中如下設定:
  • struts-config.xml
 ....
<struts-config>
<data-sources>
<data-source
key="dataSource"
type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="description"
value="some database"/>
<set-property property="driverClassName"
value="com.mysql.jdbc.Driver"/>
<set-property property="username"
value="caterpillar"/>
<set-property property="password"
value="123456"/>
<set-property property="url"
value="jdbc:mysql://localhost:3306/TestDB"/>
</data-source>
</data-sources>
...

<struts-config>
...

然後您就可以在 Action 中使用getDataSource(request, "dataSource")來取得DataSource物件。