在struts框架中配置SqlSserver数据源
运行环境:ecilpes3.2+Tomcat 5.5+SqlServer2000
呵呵,今天在热身时,又练习了下struts框架,想起第一次自己拿着书边看边练时首先遇到的问题就是在struts-config.xml文件里配置数据库了,下面与大家下自己的排错过程,思路有点乱还望大家批评指正!
常见问题javax.servlet.UnavailableException: Initializing application data source dataSource
1, 排除JDBC驱动的问题
2,定位问题原因 确定所用struts版本,struts版本不同连接数据库的配置参数就有所差异。
3, 排除连接数据库配置参数
-------------------------------------------------------------------
为避免发生错误建议按以下步骤链接sql数据库
1. 准备数据源配置所需要的jar文件
在struts框架中配置SqlServer数据源,除了需要连接sqlserver数据库的那三个jar包之外,还需要commons-collections-2.1.1.jar,commons-dbcp-1.2.1.jar,commons-pool-1.2.jar和struts-legacy.jar。而struts-legacy.jar包需要自己下载(有需要的留言留下邮箱地址)。
将struts-legacy.jar也拷贝到tomcat5.x\common\lib里去,注意:这4个jar包除了要放在tomcat中,还要在web程序的module中的lib文件加中拷贝一份,还要在web程序的WebRoot\WEB-INF\lib中拷贝一份
2、 编写struts-config.xml文件,在里面加上数据源配置的一系列标记,例如:
以下为struts1.2版本
<!--开始定义数据源 -->
<data-sources >
<data-source key ="dataSource" type="org.apache.commons.dbcp.BasicDataSource">
<set-property value="com.microsoft.jdbc.sqlserver.SQLServerDriver"
property="driverClassName"/>
<set-property value="jdbc:Microsoft:sqlserver://localhost:1433;databasename=news_Data"
property="url"/>
<set-property value="sa" property="username"/>
<set-property value="123456" property="password"/>
</data-source>
</data-sources>
<!-- 数据源配置完毕 -->
这段标记比较简单,就不一一解释了,只要记住数据源名称就行了 ,比如我这里自己起的数据源名称是“dataSource”,在struts2.0中,部分标记的属性会有所不同
3、在Action中获得数据源连接.
现拿用户登陆为引介绍下数据源的链接
/**
* @see 登陆验证函数
* @param username
* @param password
* @author 耀阳科技
* @deprecated 修改时请注明修改起始位置及时间
* @version 1.0
*/
public class LoginBean {
//获得数据库连接
public Connection getDBConnection(DataSource db){
try{
return db.getConnection();
}catch(SQLException e){
System.out.println("获得数据库连接失败! "+ e.toString());
return null;
}
}
//检查用户身份是否合法
public Boolean checkUser (Connection conn,String tableName,String username,String
password)
throws SQLException{
Boolean returnresult = false;
PreparedStatement pstmt = null;
ResultSet rs = null;
if(conn != null){
//检索用户名和密码是否正确
String strsql = "select * form "+tableName+" where username = ?";
pstmt = conn.prepareStatement(strsql);
pstmt.setString(1, username);
rs = pstmt.executeQuery();
if(rs.next()){
if(password.equals(rs.getString(password))){
returnresult = true;
}else{
returnresult = false;
}
}else{
returnresult = false;
}
}
try{
if(rs!=null){
rs.close();
}
if(pstmt!=null){
pstmt.close();
}
if(rs!=null){
rs.close();
}
}catch(SQLException sqle){
sqle.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
return returnresult;
}
}