[小结]Java数据库连接 - 配置 Struts 数据源

 

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");

    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值