struts2-注册

 

现在我们来做一个用户注册的例子,这个例子会涉及到后台数据库的操作,这在我以前Struts2的文章里面是没有提到过的,为此我们要多做些准备工作:首先我们将MysqlJDBC驱动包拷贝到Tomcat安装目录下的lib目录中,然后在MYSQLtest数据库下建立一张名为reg_user的表(为了避免乱码问题,注意编码方式设置为utf8),创建表的语句如下:

create table reg_user

(

id int auto_increment,

username varchar(20) not null,

password varchar(20) not null,

sex boolean,

email varchar(20),

pwd_question varchar(50),

pwd_answer varchar(20),

reg_date datetime,

last_login_date datetime,

last_login_ip varchar(20),

primary key(id)

)DEFAULT CHARSET=utf8 ;

 

然后配置一下数据源,在WEB根目录的/META-INF子目录下编写配置文件context.xml:

<?xml version="1.0" encoding="UTF-8"?>

<Context reloadable="true">

   <Resource name="jdbc/test" auth="Container"

      type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"

   url="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8"

      username="root" password="123" maxActive="200" maxIdle="30"

      maxWait="-1" />

</Context>

 

有了它们,启动MYSQL服务器,在我们的JAVA应用程序中就可以利用JNDI的方式访问到MYSQLtest数据库了。下面我们一步一步完成咱们的注册程序(以后我们就不特别提醒大家导入jar包和配置web.xml)

 

Step1:准备注册页面:register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

   pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<form action="register.action" method="post">

<table>

   <tr>

      <td>用户名:</td>

      <td><input type="text" name="user.username"></td>

   </tr>

   <tr>

      <td>密码:</td>

      <td><input type="password" name="user.password"></td>

   </tr>

   <tr>

      <td>性别:</td>

      <td><input type="radio" name="user.sex" value="true" checked>

      <input type="radio" name="user.sex" value="false"></td>

   </tr>

   <tr>

      <td>邮件地址:</td>

      <td><input type="password" name="user.email"></td>

   </tr>

   <tr>

      <td>密码问题:</td>

      <td><input type="text" name="user.pwdQuestion"></td>

   </tr>

   <tr>

      <td>密码答案:</td>

      <td><input type="password" name="user.pwdAnswer"></td>

   </tr>

   <tr>

      <td><input type="submit" value="注册"></td>

      <td><input type="reset" value="重填"></td>

   </tr>

</table>

</form>

</body>

</html>

 

success.jsp 用户注册成功,使用<s:property>标签获取用户的注册名,向用户显示成功信息

<%@ page language="java" contentType="text/html; charset=UTF-8"

   pageEncoding="UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<h1><s:property value="user.username" />,恭喜您注册老许的博客(http://www.blog.csdn.net/lenotang)成功。</h1>

</body>

</html>

 

error.jsp 用户注册失败,输出exception对象

<%@ page language="java" contentType="text/html; charset=UTF-8"

   pageEncoding="UTF-8"%>

   <%@ taglib prefix="s" uri="/struts-tags" %>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

注册失败,原因是:<s:property value="exception"/><br>

<a href="<%=basePath%>register!default.action">重新注册</a>!

</body>

</html>

 

Step2:编写与reg_user表对应的实体类

package org.leno.struts2.model;

 

import java.io.Serializable;

import java.util.Date;

 

public class User implements Serializable {

 

   private static final long serialVersionUID = 6663778172288542840L;

   private Integer id;

   private String username;

   private String password;

   private Boolean sex;

   private String email;

   private String pwdQuestion;

   private String pwdAnswer;

   private Date regDate;

   private Date lastLoginDate;

   private String lastLoginIp;

  

 

   public String getUsername() {

      return username;

   }

 

   public void setUsername(String username) {

      this.username = username;

   }

 

   public String getPassword() {

      return password;

   }

 

   public void setPassword(String password) {

      this.password = password;

   }

 

   public Integer getId() {

      return id;

   }

 

   public void setId(Integer id) {

      this.id = id;

   }

 

   public Boolean getSex() {

      return sex;

   }

 

   public void setSex(Boolean sex) {

      this.sex = sex;

   }

 

   public String getEmail() {

      return email;

   }

 

   public void setEmail(String email) {

      this.email = email;

   }

 

   public String getPwdQuestion() {

      return pwdQuestion;

   }

 

   public void setPwdQuestion(String pwdQuestion) {

      this.pwdQuestion = pwdQuestion;

   }

 

   public String getPwdAnswer() {

      return pwdAnswer;

   }

 

   public void setPwdAnswer(String pwdAnswer) {

      this.pwdAnswer = pwdAnswer;

   }

 

   public Date getRegDate() {

      return regDate;

   }

 

   public void setRegDate(Date regDate) {

      this.regDate = regDate;

   }

 

   public Date getLastLoginDate() {

      return lastLoginDate;

   }

 

   public void setLastLoginDate(Date lastLoginDate) {

      this.lastLoginDate = lastLoginDate;

   }

 

   public String getLastLoginIp() {

      return lastLoginIp;

   }

 

   public void setLastLoginIp(String lastLoginIp) {

      this.lastLoginIp = lastLoginIp;

   }

}

 

Step3:编写数据访问类UserDAO封装数据访问细节

package org.leno.struts2.model;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Timestamp;

import java.util.ArrayList;

import java.util.List;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;

 

public class UserDAO {

 

   private DataSource dataSource;

   /**

    * 切记:由于采用数据源连接池的方式(利用Tomcat提供的数据源实现)获取数据库的连接,因此需要

    * MysqlJDBC驱动包拷贝到Tomcat安装目录下的lib目录中

    */

   public UserDAO() {

      try {

         Context ctx = new InitialContext();

         dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/test");

      } catch (NamingException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

      }

   }

 

   public boolean register(User user) throws SQLException {

      boolean flag = false;

      Connection con = null;

      PreparedStatement ps = null;

      ResultSet rs = null;

      try {

         con = dataSource.getConnection();

         String sql = "insert into reg_user(username,password,sex,email,pwd_question,pwd_answer,reg_date) values(?,?,?,?,?,?,?)";

         ps = con.prepareStatement(sql);

         int index = 0;

         ps.setString(++index, user.getUsername());

         ps.setString(++index, user.getPassword());

         ps.setBoolean(++index, user.getSex());

         ps.setString(++index, user.getEmail());

         ps.setString(++index, user.getPwdQuestion());

         ps.setString(++index, user.getPwdAnswer());

         ps

                .setTimestamp(++index, new Timestamp(user.getRegDate()

                      .getTime()));

         ps.execute();

         rs = ps.executeQuery("select last_insert_id()");

         if (rs.next()) {

            user.setId(rs.getInt(1));

            flag = true;

         } else {

            return flag;

         }

      } catch (SQLException e) {

         throw e;

      } finally {

         closeResultSet(rs);

         closePreparedStatement(ps);

         closeConnection(con);

      }

      return flag;

   }

 

   public List findAll() throws SQLException {

      List list = new ArrayList();

      Connection con = null;

      PreparedStatement ps = null;

      ResultSet rs = null;

      try {

         con = dataSource.getConnection();

         String sql = "select * from reg_user";

         ps = con.prepareStatement(sql);

         rs = ps.executeQuery();

         while (rs.next()) {

            User user = new User();

            user.setId(rs.getInt(1));

            user.setUsername(rs.getString(2));

            list.add(user);

         }

      } catch (SQLException e) {

         throw e;

      } finally {

         closeResultSet(rs);

         closePreparedStatement(ps);

         closeConnection(con);

      }

      return list;

   }

 

   private void closeResultSet(ResultSet rs) {

      if (rs != null) {

         try {

            rs.close();

         } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

         }

      }

   }

 

   private void closePreparedStatement(PreparedStatement ps) {

      if (ps != null) {

         try {

            ps.close();

         } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

         }

      }

   }

 

   private void closeConnection(Connection con) {

      try {

         if (con != null && !con.isClosed()) {

            con.close();

         }

      } catch (SQLException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

      }

   }

 

}

 

Step4:编写RegisterAction,调用UserDao来实现用户注册功能

package org.leno.struts2.action;

 

import java.util.Date;

import java.util.Iterator;

import java.util.List;

import org.apache.struts2.dispatcher.RequestMap;

import org.leno.struts2.model.User;

import org.leno.struts2.model.UserDAO;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

 

public class RegisterAction extends ActionSupport{

 

   private static final long serialVersionUID = 6254310773139650886L;

   private User user;

   private UserDAO userDao;

  

   public RegisterAction() {

      super();

      this.userDao = new UserDAO();

   }

 

   public User getUser() {

      return user;

   }

  

   public void setUser(User user) {

      this.user = user;

   }

 

   /**

    *请求/register!default.action,调用doDefault方法

    */

   @Override

   public String doDefault() throws Exception {

      return INPUT;

   }

 

   public String execute() throws Exception {

      user.setRegDate(new Date());

      System.out.println("**********"+user.getUsername());

      userDao.register(user);

//    List userList = userDao.findAll();

//    Iterator it = userList.iterator();

//    while(it.hasNext()){

//       User u = (User) it.next();

//       System.out.println(u.getUsername());

//    }

//    ActionContext context = ActionContext.getContext();

//    RequestMap request = (RequestMap) context.get("request");

//    request.put("userList", userList);

      return SUCCESS;

   }

}

 

Step5:当然是在struts.xml上配置RegisterAction

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

   "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

   <package name="default" extends="struts-default">

      <action name="register"

         class="org.leno.struts2.action.RegisterAction">

         <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>

         <result name="success">/success.jsp</result>

            <result name="input">/register.jsp</result>

            <result name="error">/error.jsp</result>

      </action>

   </package>

</struts>

 

这样,我们一个简单的用户注册程序就开发完毕了。大家跑出来后就记住它,我们以后做的验证和I18N例子都会使用到这个程序。

                             

posted @ 2008-08-20 22:21  CharmingDang  阅读(87)  评论(0编辑  收藏  举报