在struts1。0中按照如下的方式可以实现利用datasource访问数据库,但是在struts2。0中似乎不支持getDatasource方法,请各位大虾明示如何在struts2中实现datasource访问mysql数据库:(另外在struts2中我的loginaction继承的是actionsupport类,而不是在struts1中那样继承的是action类)
LoginBean.java源代码:
package dummies.struts;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
public class LoginBean
{
private DataSource dataSource = null;
public LoginBean(DataSource dataSource)
{
this.dataSource = dataSource;
{
public boolean validateUser(String username, String password)
{
boolean valid = false;
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try
{
con = dataSource.getConnection();
stmt = con.createStatement();
rs = stmt.executeQuery(
“SELECT * FROM Users “ +
“WHERE username = ‘“ + username + “‘ “ +
“AND password = ‘“ + password + “‘“);
if (rs.next())
valid = true;
}
catch(SQLException e) {
e.printStackTrace();
}
finally {
try { if (rs != null) rs.close(); } catch (SQLException e) {};
try { if (stmt != null) stmt.close(); } catch (SQLException e) {};
try { if (con != null) con.close(); } catch (SQLException e) {};
}
return valid;
}
}LoginAction.java源代码:
package dummies.struts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class LoginAction extends Action
{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception
{
// create a new LoginBean with valid users in it
LoginBean lb = new LoginBean(getDataSource(request,
“musiccollection”));
// check to see if this user/password combination are valid
if(lb.validateUser(((LoginForm)form).getUserName(),
((LoginForm)form).getPassword()))
{
request.setAttribute(“userName”,((LoginForm)form).getUserName());
return (mapping.findForward(“success”));
}
else // username/password not validated
{
// create ActionError and save in the request
ActionErrors errors = new ActionErrors();
ActionError error = new ActionError(“error.login.invalid”);
errors.add(“login”,error);
saveErrors(request,errors);
return (mapping.findForward(“failure”));
}
}
}struts-config.xml Data Source Definition
<struts-config>
<!-- ========== Data Source Definitions ================================ --
>
<data-sources>
<data-source key=”musiccollection”
type=”org.apache.commons.dbcp.BasicDataSource”>
<set-property property=”description” value=”Music Collection
Database”/>
<set-property property=”driverClassName” value=”com.mysql.jdbc.Driver”/>
<set-property property=”username”
value=”theDatabaseUserName”/>
<set-property property=”password”
value=”theDatabaseUserPassword”/>
<set-property property=”url”
value=”jdbc:mysql://localhost/musiccollection”/>
<set-property property=”maxCount” value=”8”/>
<set-property property=”minCount” value=”2”/>
</data-source>
</data-sources>
...
</struts-config>
我就希望在struts2中使用如struts1中datasource访问数据库的方式,不想将每次访问数据库的代码都放到不同的文件,跪求大师!!!
LoginBean.java源代码:
package dummies.struts;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
public class LoginBean
{
private DataSource dataSource = null;
public LoginBean(DataSource dataSource)
{
this.dataSource = dataSource;
{
public boolean validateUser(String username, String password)
{
boolean valid = false;
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try
{
con = dataSource.getConnection();
stmt = con.createStatement();
rs = stmt.executeQuery(
“SELECT * FROM Users “ +
“WHERE username = ‘“ + username + “‘ “ +
“AND password = ‘“ + password + “‘“);
if (rs.next())
valid = true;
}
catch(SQLException e) {
e.printStackTrace();
}
finally {
try { if (rs != null) rs.close(); } catch (SQLException e) {};
try { if (stmt != null) stmt.close(); } catch (SQLException e) {};
try { if (con != null) con.close(); } catch (SQLException e) {};
}
return valid;
}
}LoginAction.java源代码:
package dummies.struts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class LoginAction extends Action
{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception
{
// create a new LoginBean with valid users in it
LoginBean lb = new LoginBean(getDataSource(request,
“musiccollection”));
// check to see if this user/password combination are valid
if(lb.validateUser(((LoginForm)form).getUserName(),
((LoginForm)form).getPassword()))
{
request.setAttribute(“userName”,((LoginForm)form).getUserName());
return (mapping.findForward(“success”));
}
else // username/password not validated
{
// create ActionError and save in the request
ActionErrors errors = new ActionErrors();
ActionError error = new ActionError(“error.login.invalid”);
errors.add(“login”,error);
saveErrors(request,errors);
return (mapping.findForward(“failure”));
}
}
}struts-config.xml Data Source Definition
<struts-config>
<!-- ========== Data Source Definitions ================================ --
>
<data-sources>
<data-source key=”musiccollection”
type=”org.apache.commons.dbcp.BasicDataSource”>
<set-property property=”description” value=”Music Collection
Database”/>
<set-property property=”driverClassName” value=”com.mysql.jdbc.Driver”/>
<set-property property=”username”
value=”theDatabaseUserName”/>
<set-property property=”password”
value=”theDatabaseUserPassword”/>
<set-property property=”url”
value=”jdbc:mysql://localhost/musiccollection”/>
<set-property property=”maxCount” value=”8”/>
<set-property property=”minCount” value=”2”/>
</data-source>
</data-sources>
...
</struts-config>
我就希望在struts2中使用如struts1中datasource访问数据库的方式,不想将每次访问数据库的代码都放到不同的文件,跪求大师!!!
解决方案 »
- 考 sun java EE 系统认证师有用吗?
- Struts 问题 急
- 为什么客户端调用抛出java.lang.NullPointerException异常?
- 请问查找某个类位于哪个jar包的搜索引擎网址是多少
- 请问SUN APPSERVER 7 的默认管理员用户和口令是什么?
- easyUI 中下拉框无法显示
- 关于struts数据库的问题,在线等,麻烦高手指点一下。
- Hibernate的问题,解决马上给50分
- 今天买了一张教程,microsoft visual j++ 大家说说看怎么样啊?
- EJB的问题(Weblogic+jb8)
- 关于进程间通信方式、web http server 间的通信方式
- MYECLIPSE 通过xfire 向导生成客户端 时碰到Array类型转换错误
然后自己做工具类来取得.public class DataSourceUtil
{
private static DataSourceUtil DSUtil;
private DataSource ds;
public static String URL = "";
public static String USERNAME ="";
public static String PASSWORD ="";
private DataSourceUtil()
{}
public static DataSourceUtil getInstance()
{
if(DSUtil==null)
DSUtil = new DataSourceUtil();
return DSUtil;
}
public DataSource getDataSource()
{
if(this.ds==null)
this.ds = (DataSource)new InitContext().lookup(URL);
return this.ds;
}
}
2.集成Hibernate/Ibatis.查看Hibernate/ibatis的文档能得到代码,毕竟现在数据访问的事情还是由框架来做可以省事一些.
3.集成Spring.这个查看Spring的文档能得到代码,现在Spring做得很广,对这些都进行了支持.
4.不集成大的框架,自己引入DBCP连接池.配置也不是很复杂.
public static String USERNAME ="";
public static String PASSWORD ="";
这两个用不到
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"> <property name="driverClass">
<value>com.jnetdirect.jsql.JSQLDriver</value>
</property> <property name="jdbcUrl">
<value>jdbc:JSQLConnect://localhost/database=red</value>
</property> <property name="user">
<value>sa</value>
</property> <property name="password">
<value>password</value>
</property> <property name="initialPoolSize">
<value>10</value>
</property>
<property name="minPoolSize">
<value>5</value>
</property>
<property name="maxPoolSize">
<value>30</value>
</property>
<property name="acquireIncrement">
<value>5</value>
</property>
<property name="maxIdleTime">
<value>10</value>
</property>
<property name="maxStatements">
<value>0</value>
</property> </bean>
System.out.println("dsName = " + dsName);
ds = DataSourceContext.getInstance().getDataSource(dsName);
System.out.println("get datasource = " + ds.toString());
con = ds.getConnection();
System.out.println("get con = " + con.toString());本人实际操作的到的结果。记得给分噢噢!!