Struts2与数据源的应用——注册

最近学习了Struts2,然后现在结合以前学过的Tomcat数据源实现一个注册程序。这里省略了一些部分,只写出部分重要代码,也算是一次总结吧。


首先、编写DAO :DAO是数据访问对象,封装了数据访问逻辑,当然这里为了简单起见把他们都写在了一个DAO类,并没有严格按照DAO的开发模式,比如DAO的接口类,DAO的真实主题类,DAO的代理类,数据库连接类,DAO工厂类,这是只是一个简单的UserDAO类。

查找数据源主要分三步:

1、初始化名称查找上下文 :Context ctx = new InitialContext();

2、通过名称查找DataSource对象 :DataSource ds = (DataSource)ctx.lookup(JDDI名称);比如java:comp/env/ jdbc/test;红色部分是固定前缀,为了避免命名冲突。

3、通过DataSource取得一个数据库连接对象 :Connection conn = ds.getConnection();

 

package cn.guet.hj.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import cn.guet.hj.bean.User; /** * * 数据访问对象 DAO * 主要封装数据访问逻辑 */ public class UserDAO { private DataSource dataSource;//数据源对象 /** * 在构造方法中初始化数据源对象 */ public UserDAO(){ Context ctx;//名称查找上下文 try { //第一步 初始化名称查找上下文 ctx = new InitialContext(); //第二步 通过名称查找数据源对象 dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/test"); } catch (NamingException e) { e.printStackTrace(); } } public DataSource getDataSource(){ return this.dataSource; } /** * 实现用户登录功能 */ public User register(User user)throws SQLException{ Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ //第三步 通过DataSource取得一个数据库连接对象 conn = this.getDataSource().getConnection(); String sql = "insert into reg_user(username,password,sex,email,pwd_question,pwd_answer,reg_date) values(?,?,?,?,?,?,?)"; pstmt = conn.prepareStatement(sql); int index = 0; pstmt.setString(++index, user.getUsername()); pstmt.setString(++index, user.getPassword()); pstmt.setBoolean(++index, user.getSex()); pstmt.setString(++index, user.getEmail()); pstmt.setString(++index, user.getPwd_question()); pstmt.setString(++index, user.getPwd_answer()); pstmt.setTimestamp(++index, new java.sql.Timestamp(user.getReg_date().getTime())); pstmt.execute(); }finally{ if(rs!=null) rs.close(); if(pstmt!=null) pstmt.close(); if(conn!=null) conn.close(); } return user; } } 以上的代码还有一点要注意的是时间,注册时间是调用DAO是自动赋值的,但是要时间的类型是Timestamp ,时间戳,这样可以获得精确的时间。

 

 

然后,配置数据源 :在WebRoot/META-INF下新建context.xml配置数据源

 

<?xml version="1.0" encoding="UTF-8"?> <Context reloadable="true"> <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="123" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mldn"/> </Context> 几点说明:注意这里的name与DAO中用于查找数据DataSource对象的name,前面没有java:comp/env

auth是指容器负责资源的连接

type指明数据源对应的类型DataBase

 

接着编写Action类: 这个Action调用了User 和UserDAO。当请求为/register!default.action到来时调用doDefault方法,进入注册界面,正在做具体工作时的是execute方法,这也是默认的。

public class RegisterAction extends ActionSupport { private static final long serialVersionUID = 8995631776199916187L; private User user; private UserDAO userDao; /** * 在构造方法中初始化UserDAO */ public RegisterAction(){ userDao = new UserDAO(); } /** * 处理/register!default.action请求 */ public String doDefault()throws Exception{ return INPUT; } /** * 注册方法 */ public String execute()throws Exception{ user.setReg_date(new Date()); userDao.register(user); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } 几点说明:1、这里Action的属性为User,一定要为他添加setter与getter方法,以便JSP页面通过OGNL自动设置和访问User对象。

2、注意default.action请求可以访问的方法为default或doDefault。

 

最后修改配置文件struts.xml和web.xml

<struts> <constant name="struts.i18n.encoding" value="GBK"/> <package name="default" extends="struts-default"> <action name="register" class="cn.guet.hj.action.RegisterAction"> <exception-mapping result="error" exception="java.lang.Exception"/> <result name="input">/WEB-INF/pages/register.jsp</result> <result name="success">/WEB-INF/pages/success.jsp</result> <result name="error">/WEB-INF/pages/error.jsp</result> </action> </package> </struts> 特别说明:中文乱码的解决方法,设置常量struts.i18n.encoding为GBK。

 

测试:http://localhost/LoginByStruts2/register!default.action

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值