大家都知道C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。最近在学struts2框架,所以一时来了兴趣,将c3p0与struts2配置在一起了。
网上查的资料中基本都是采用mysql数据库,由于本人的mysql没装,故采用SQLServer 2008数据库,基本配置都类似,功能实现也能完成!在操作数据库时采用apache的DBUtiils组件,对数据库进行CRUD操作。接下来说配置了:
一、导入的jar包:c3p0-0.9.1.2.jar,commons-dbutils-1.4.jar,连接sqlserver数据库的sqljdbc4.jar,另外加struts2的11个jar。
二、c3p0的配置:方法有两种,一种是采用配置文件:文件名为c3p0-config.xml(有且只有这一个),另一种方法是创建java类,然后在进行配置,网上资源很多,这里就采用配置文件的方式:
c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <!-- 注释部分采用jtds.jar连接sqlserver数据库 --> <!-- <property name="driverClass">net.sourceforge.jtds.jdbc.Driver</property> --> <!-- <property name="jdbcUrl">jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=Demo</property> --> <property name="driverClass">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> <property name="jdbcUrl">jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Demo</property> <property name="user">sa</property> <property name="password">123456</property> <!-- 当连接池耗尽时候,一次获得连接数--> <property name="acquireIncrement" value="5" /> <property name="minPoolSize" value="0" /> <property name="maxPoolSize" value="15" /> <property name="maxIdleTime" value="1800" /> <property name="maxStatements" value="0" /> <!-- 当连接池连接耗尽时,客户端getConnection(),所等待的时间--> <property name="idleConnectionTestPeriod" value="120" /> <!-- 当连接失效时,获得连接的次数,0为无限次(重连)--> <property name="acquireRetryAttempts" value="30" /> </default-config> </c3p0-config>
二、DBUtils.java负责得到数据库的连接
三、LodginAction.java;判断用户输入的用户名及密码是否正确,在查询数据库时用到DBUtils中QueryRunner类的query查询方法,关于QuerryRunner的用法这里不再详细解释。package it.jsw.struts.dbutils; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class Dbutils { private static DataSource datasource= new ComboPooledDataSource(); public static DataSource getDateSource(){ return datasource; } public static Connection getConnection() throws SQLException{ return datasource.getConnection(); } }
package it.jsw.struts.action; import java.beans.PropertyVetoException; import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; import it.jsw.struts.dbutils.Dbutils; import it.jsw.struts.entity.Users; public class LoginAction extends ActionSupport{ public String execute() throws SQLException, PropertyVetoException { String username = ServletActionContext.getRequest().getParameter("username"); String password=ServletActionContext.getRequest().getParameter("password"); System.out.println(username+password); QueryRunner queryrunner=new QueryRunner(Dbutils.getDateSource()); String sql="select * from users where name='"+username+"'"+"and password='"+password+"'"; Users user=null; user=queryrunner.query(sql, new BeanHandler<Users>(Users.class)); System.out.println(user); if(user!=null){ ServletActionContext.getRequest().getSession().setAttribute("user", username ); return SUCCESS; } else { ServletActionContext.getRequest().setAttribute("msg","<font color='red'>您输入的用户名或密码有误!</font>"); return INPUT; } } }
四、struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> <constant name="struts.action.extension" value="action,,"></constant> <constant name="struts.i18n.encoding" value="UTF-8"></constant> <!-- struts2的包 --> <package name="default" namespace="/" extends="struts-default"> <action name="login" class="it.jsw.struts.action.LoginAction"> <result name="input">/login.jsp</result> <result name="success" type="">/wel.jsp</result> </action> </package> </struts>
五、Users实体类,仅有两个属性,用户名和密码,加上get与set方法,数据库中users表也为这两个属性六、登录页面与成功页面,登录页面提交表单到LoginAction,用户名密码正确跳转到欢迎页面,若错误则回到登录页面并提示错误信息。
完成以上配置基本功能已经实现,博文为博主学习过程中所写,框架知目前识还有限,若有不足,欢迎批评指正!!!