Java數據庫連接 – 配置 Struts 數據源 – JAVA編程語言程序開發技術文章

7. 配置 Struts 數據源
 
一般步驟:
7.1 配置JNDI數據源
在struts-config.xml配置文件<struts-config>標簽下加入類似如下配置內容
<data-source>屬性type用來定義數據源javax.sql.DataSource實現類:org.apache.commons.dbcp.BasicDataSource
<set-property>標簽各屬性設置可參考實現類:org.apache.commons.dbcp.BasicDataSource中各數據庫連接相關屬性的定義.<set-property>的作用就是根據實現類中的setXXX()方法,設置其內容.這就好像<jsp:setProperty>用來設置bean屬性一樣.
    <data-sources>
       <data-source type="org.apache.commons.dbcp.BasicDataSource">
           <set-property property="driverClassName" value="com.mysql.jdbc.Driver" />
           <set-property property="url" value="jdbc:mysql://localhost:3306/mydb" />
           <set-property property="username" value="root" />
           <set-property property="password" value="root" />
           <set-property property="maxActive" value="30" />
           <set-property property="maxIdle" value="10" />
           <set-property property="maxWait" value="1000" />
       </data-source>
    </data-sources>
 
7.2 獲取數據源實例
通過org.apache.struts.action.Action類中定義的二個方法:
protected DataSource getDataSource(HttpServletRequest request, String key)
protected DataSource getDataSource(HttpServletRequest request)
 
關鍵代碼:
    DataSource ds = this.getDataSource(request);
 
查看org.apache.struts.action.Action類源代碼:
    /**
     * <p>Return the specified data source for the current module.</p>
     *
     * @param request The servlet request we are processing
     * @param key     The key specified in the <code>&lt;data-sources&gt;</code>
     *                element.
     *
     * @since Struts 1.1
     */
    protected DataSource getDataSource(HttpServletRequest request, String key) {
 
        // Identify the current module
        ServletContext context = getServlet().getServletContext();
        ModuleConfig moduleConfig =
            ModuleUtils.getInstance().getModuleConfig(request, context);
 
        return (DataSource) context.getAttribute(key + moduleConfig.getPrefix());
    }
 
    protected DataSource getDataSource(HttpServletRequest request) {
 
        return (getDataSource(request, Globals.DATA_SOURCE_KEY));
 
    }
 
由此可知,數據源需要在自定義的Action處理類(繼承自Action)中獲取數據源.
參數說明:
request    一次用戶請求
key    <data-source>標簽設置的key屬性.未設置key屬性時,默認值為Globals.DATA_SOURCE_KEY
       通過protected DataSource getDataSource(HttpServletRequest request)方法獲取數據源
       默認調用key值為Globals.DATA_SOURCE_KEY的數據源
 
引用自struts-config_1_2.dtd
     key             Servlet context attribute key under which this data source
                     will be stored.  Default is the value specified by string
                     constant defined by Globals.DATA_SOURCE_KEY. The application
                     module prefix (if any) is appended to the key
                     (${key}$prefix}).
                     [org.apache.struts.Globals.DATA_SOURCE_KEY]
 
註: 該方法權限是protected,因為可以在不同包的子類中使用,無法在不同包非子類中被調用.另外,自定義的Action處理類構造函數隻在第一次請求時,被調用.因此,自定義的Action處理類的實例化很可能用到單例模式.
 
7.3 數據庫操作
 
一般步驟:
a) 通過數據源實例建立數據庫連接
b) 創建Statement對象
c) 獲取結果集
d) 關閉數據庫連接資源(包括ResultSet,Statement,Connection實例)
 
關鍵代碼:
    Connection conn = ds.getConnection();
    PreparedStatement stmt = conn.prepareStatement(sql);
 
    stmt.setString(1, username);
    stmt.setString(2, password);
    ResultSet rs = stmt.executeQuery();
 
    if(rs.next())
    {
       request.setAttribute("hint", bundle.getString("login.check.hint.success"));
       return mapping.findForward("success");
    }
 

發佈留言