ITEEDU

Struts Gossip: 取得 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对象。