JSP模式2 实现用户注册的功能

来源:互联网 发布:石油骚动mac版中文 编辑:程序博客网 时间:2024/06/01 11:54

一  实现的思路:

1.Register.jsp  

负责向用户显示注册的页面,用户名、密码、确认密码、email

2.ControllerServlet.java

用来接收客户端提交的请求,然后进行验证:语法格式的验证和该用户是否是已经存在的用户,如果该用户是合法的,将该用户加入到users表中,然后跳转到loginSuccess.jsp页面上,显示用户信息。否则跳转到register.jsp,将错误信息显示出来

3.RegisterFormBean.java:用来封装用户输入的表单的数据,并可以做基本语法格式的验证

4.UserBean.java :保存用户的信息,包括用户名、密码以及确认密码

5.DbUtil.java: 集合对象 user,<”zhangsan”,user>

              添加用户的方法 insertUser(User user)

6.自定义异常类---提示用户注册错误,写一个异常类 DbUtilException

二  实现的代码:

1.register.jsp

    <%@ page language="java"import="java.util.*" pageEncoding="utf-8"%>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme() + "://"

           + request.getServerName() + ":" + request.getServerPort()

           + path + "/";

%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

       <base href="<%=basePath%>">

 

       <title>My JSP'register.jsp' starting page</title>

 

       <meta http-equiv="pragma" content="no-cache">

       <meta http-equiv="cache-control"content="no-cache">

       <meta http-equiv="expires"content="0">

       <meta http-equiv="keywords"content="keyword1,keyword2,keyword3">

       <meta http-equiv="description"content="This is my page">

       <!--

    <link rel="stylesheet"type="text/css" href="styles.css">

    -->

 

    </head>

 

    <body>

       <jsp:useBean id="registerForm"class="com.csdn.beans.RegisterFormBean"

           scope="request" />

       <jsp:setProperty property="*"name="registerForm" />

 

       <form action="registerServlet"method="post">

           <table>

              <tbody>

                  <tr>

                     <td>

                         用户名:

                     </td>

                     <td>

                         <input type="text"name="name" value="<%=registerForm.getName()%>"/>

                     </td>

                     <td>

                         <%=registerForm.getErrorMsg("name") %>

                     </td>

                  </tr>

                  <tr>

                     <td>

                         密&nbsp;&nbsp;码:

                     </td>

                      <td>

                         <input type="password"name="password1" value="<%=registerForm.getPassword1()%>"/>

                     </td>

                     <td>

                         <%=registerForm.getErrorMsg("password1") %>

                     </td>

                  </tr>

                  <tr>

                     <td>

                         确认密码:

                     </td>

                     <td>

                         <input type="password" name="password2"value="<%=registerForm.getPassword2()%>"/>

                     </td>

                     <td>

                         <%=registerForm.getErrorMsg("password2") %>

                     </td>

                  </tr>

                  <tr>

                     <td>

                         email:

                     </td>

                     <td>

                         <input type="text"name="email" value="<%=registerForm.getEmail()%>"/>

                     </td>

                     <td>

                         <%=registerForm.getErrorMsg("email") %>

                     </td>

                  </tr>

                  <tr>

                     <td>

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

                     </td>

                     <td>

                         &nbsp;

                     </td>

                     <td>

                         &nbsp;

                     </td>

                  </tr>

              </tbody>

           </table>

       </form>

    </body>

</html>

 

2.ControllerServlet.java

    public void doPost(HttpServletRequest request, HttpServletResponseresponse)

           throws ServletException, IOException {

      

       RequestDispatcher rd = null;

 

       //控制器

       //获取表单提交的数据封装在registerFormBean对象中,进行语法格式的验证

       RegisterFormBean registerForm = new RegisterFormBean();

       request.setAttribute("registerForm", registerForm);

       registerForm.setName(request.getParameter("name"));

       registerForm.setPassword1(request.getParameter("password1"));

       registerForm.setPassword2(request.getParameter("password2"));

       registerForm.setEmail(request.getParameter("email"));

       //验证

       if(!registerForm.validte()){

           //转向到register.jsp

           rd = request.getRequestDispatcher("/register.jsp");

           rd.forward(request, response);

           return;

          

       }

      

       //将registerFormBean对象中的数据存储到UserBean对象中,然后调用DbUtil中的insertUtil

      

       UserBean user = new UserBean();

       user.setName(registerForm.getName());

        user.setPassword(registerForm.getPassword1());

       user.setPassword(registerForm.getPassword2());

       user.setEmail(registerForm.getEmail());

       DbUtil db = DbUtil.getInstance();

       try {

           db.insertUser(user);

       } catch (DbUtilException ex) {

           // 处理该异常

           registerForm.setErrorMsg("name", ex.getErrorMsg("name"));

           //转到register.jsp页面中

           rd = request.getRequestDispatcher("/register.jsp");

           rd.forward(request, response);

           return;

       }

      

       //得到session对象

       HttpSession session= request.getSession();

       session.setAttribute("user", user);

       rd = request.getRequestDispatcher("/loginSuccess");

       rd.forward(request, response);

    }

3.RegisterFormBean.java

package com.csdn.beans;

 

import java.util.Hashtable;

 

public class RegisterFormBean {

    private String name = "";

    private String password1 = "";

    private String password2 = "";

    private String email = "";

 

    public RegisterFormBean() {

       super();

       // TODO Auto-generatedconstructor stub

    }

 

    public RegisterFormBean(String name, String password1, Stringpassword2,

           String email) {

       super();

       this.name = name;

       this.password1 = password1;

       this.password2 = password2;

       this.email = email;

    }

 

    public String getName() {

       return name;

    }

 

    public void setName(String name) {

       this.name = name;

    }

 

    public String getPassword1() {

       return password1;

    }

 

    public void setPassword1(String password1) {

       this.password1 = password1;

    }

 

    public String getPassword2() {

       return password2;

    }

 

    public void setPassword2(String password2) {

       this.password2 = password2;

    }

 

    public String getEmail() {

       return email;

    }

 

    public void setEmail(String email) {

       this.email = email;

    }

 

    @Override

    public String toString() {

       return "RegisterFormBean[email=" + email + ",name=" + name

              + ",password1=" + password1 + ",password2=" + password2 + "]";

    }

 

    // 基本格式的验证

    private Hashtable errors = newHashtable();

 

    @SuppressWarnings("unchecked")

    public boolean validte() {

       boolean okAll = true;

       // 语法格式的验证

       if (name.trim().equals("")) {

           errors.put(name, "请重新输入");

           okAll = false;

       }

       if (password1.length() > 10 || password1.length() < 6) {

           errors.put("password1", "密码必须包含6-10个字符");

           okAll = false;

       }

       if (!password2.equals("password1")) {

           errors.put("password2", "密码不一致");

           okAll = false;

       }

       if (!email.matches("[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+")) {

           errors.put("email", "邮箱格式不正确");

           okAll = false;

       }

 

       return okAll;

    }

 

    public void setErrorMsg(String err, String errMsg) {

       if (err != null && errMsg !=null) {

           errors.put(err, errMsg);

       }

    }

 

    public String getErrorMsg(String err) {

       Object  message =(String) errors.get(err);

       return (String) ((message == null) ? "" : message);

    }

 

}

4. UserBean.java

package com.csdn.beans;

public class UserBean {

    private String name;

    private String password;

    private String email;

    public UserBean() {

       super();

       // TODO Auto-generatedconstructor stub

    }

    public UserBean(String name, String password, String email) {

       super();

       this.name = name;

       this.password = password;

       this.email = email;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public String getPassword() {

       return password;

    }

    public void setPassword(String password) {

       this.password = password;

    }

    public String getEmail() {

       return email;

    }

    public void setEmail(String email) {

       this.email = email;

    }

    @Override

    public String toString() {

       return "UserBean[email=" + email + ",name=" + name + ",password="

              + password + "]";

    }

    //验证方法

    public boolean validatePassword(String password){

       if(this.password.equals(password)){

           return true;

       }else{

           return false;

       }

    }

}

5. DbUtil.java

package com.csdn.util;

import java.util.Hashtable;

import sun.security.jca.GetInstance;

import com.csdn.beans.UserBean;

import com.csdn.exception.DbUtilException;

 

//单利类的实现

public class DbUtil {

    private Hashtable users = newHashtable();

    static DbUtil instance = new DbUtil();

    private DbUtil(){

       UserBean user1 = new UserBean();

       user1.setName("张三");

       user1.setPassword("1234567");

       user1.setEmail("zhangsan@163.com");

      

       UserBean user2 = new UserBean();

       user2.setName("李四");

       user2.setPassword("1234567");

       user2.setEmail("zhangsan@163.com");

      

       UserBean user3 = new UserBean();

       user3.setName("王五");

       user3.setPassword("1234567");

       user3.setEmail("zhangsan@163.com");

      

       users.put(user1.getName(), user1);

       users.put(user2.getName(), user2);

       users.put(user3.getName(), user3);

    }

    public static DbUtil getInstance(){

       return instance;

    }

    public UserBean getUser(String name){

       UserBean user =(UserBean) users.get(name);

       return user;

    }

    public void insertUser(UserBean user) throws DbUtilException{

       if(user==null){

           return;

       }

       String userName=user.getName();

       if(users.get(userName)!=null){

           //说明该用户名已经存在

           DbUtilException ex = new DbUtilException();

           ex.setErrorMsg("name","该用户已经存在");

           throw ex;

       }

       //说明该用户不存在,添加

       users.put(userName, user);

    }

   

}

6.自定义异常类

package com.csdn.exception;

 

import java.util.Hashtable;

 

//异常处理类

public class DbUtilException extends Exception {

    // 存储错误消息

    private Hashtable errors = newHashtable();

 

    public void setErrorMsg(String err, String msg) {

       if (err != null && msg !=null) {

           errors.put(err, msg);

       }

    }

 

    public StringgetErrorMsg(String err) {

       Object message = (String) errors.get(err);

       return (String) ((message == null) ? "" : message);

    }

}