请教大虾:如何在struts2中实现datasource的方式访问mysql数据库

sunruyu 2008-02-20 03:19:15
在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访问数据库的方式,不想将每次访问数据库的代码都放到不同的文件,跪求大师!!!
...全文
435 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhu410289616 2009-03-18
  • 打赏
  • 举报
回复
dsName = (String) ActionContext.getContext().getApplication().get("StudentDataSource"); //get datasource from web.xml
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());

本人实际操作的到的结果。记得给分噢噢!!
sunruyu 2008-03-11
  • 打赏
  • 举报
回复
自己顶一下
sunruyu 2008-02-26
  • 打赏
  • 举报
回复
我想用jsp和struts加上java实现这个功能,不知道spring是个什么工具。另外也请帮忙把在java类中的实现方法给出
sunwei_07 2008-02-25
  • 打赏
  • 举报
回复
用spring,把datasource写在xml,读取下
<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>
sunruyu 2008-02-25
  • 打赏
  • 举报
回复
自己顶一下
sunruyu 2008-02-22
  • 打赏
  • 举报
回复
谢谢楼上说的,我想我通过简单的方式能够把数据源里的字段里的关键字提取出来就可以了。。。谢谢!!!
yzj520hyy 2008-02-20
  • 打赏
  • 举报
回复
这个代码手写的,写垃圾了。
public static String USERNAME ="";
public static String PASSWORD ="";
这两个用不到
yzj520hyy 2008-02-20
  • 打赏
  • 举报
回复
我提供你四条路..不过不一定合你心意哈。毕竟现在的MVC框架都不象以前那样,把数据访问功能集成了。

1.将DataSource内置到Web容器类,比如Tomcat的话需要配置context.xml和web.xml,见Tomcat文档.
然后自己做工具类来取得.

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连接池.配置也不是很复杂.

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧