登录和注册功能思路

注册功能

1.创建一个package  domain  在里面创建一个User对象(开发一个Javabean) 添加username password  email等属性

 自动生成get set方法和构造函数

2.创建一个package service  来处理User对象,在里面提供一个registUser方法,返回一个User对象

3.在registUser方法检测用户名是否重复,就要调用数据库

  A.在里面创建一个UsrDao对象,让UsrDao对象提供一个findByUserName方法 

    a..在package dao 包里创建一个findUserByUsername方法,用来在数据库中通过姓名查找数据,返回一个User对象

    b.    Connection conn = null;

      PreparedStatement ps = null;

        ResultSet rs = null;

        try { conn = JDBCUtils.getConnection();

      ps = conn.prepareStatement("select * from user where username = ?");

      ps.setString(1, username);

      rs = ps.executeQuery();

      if(rs.next()){

      //rs结果集中如果有数据则证明查询到了用户

//创建一个

user对象并向其中封装数据

      User user = new User(); user.setId(rs.getInt("id"));

      user.setUsername(rs.getString("username"));                                           user.setPassword(rs.getString("password"));                                                                 user.setNickname(rs.getString("nickname"));

                      user.setEmail(rs.getString("email")); return user;

                       }else{

                       //没有查询到用户。

                        return null;

                         }

                         } catch (SQLException e) {

                         e.printStackTrace();

        throw new RuntimeException(e);//dao层异常往上抛,谁调用就抛给谁

        }finally{

        JDBCUtils.close(conn, ps, rs); }

        }

  B.判断findByUserName是否为空,不为空就是名字存在,就抛异常

    if(findUser != null){
    /重复则抛出异常
    throw new MsgException("用户名已存在");

    a.创建一个package exception 来自定义异常

      package com.easymall.exception;

      public class MsgException extends RuntimeException{

      public MsgException(){

      }
      //准备的参数是为了让用户自己将异常信息传入,以便在页面中做出提示。
      public MsgException(String msg){
      super(msg);
      }

      }

    b.如果用户名不存在就插入数据,在dao层中完成addUser方法

      conn = JDBCUtils.getConnection();

      ps = conn.prepareStatement("insert into user values(null,?,?,?,?)");

//将用户信息通过user

这个javabean对象依次获取

      ps.setString(1, user.getUsername());

      ps.setString(2, user.getPassword());       

      ps.setString(3, user.getNickname());

      ps.setString(4,user.getEmail());

      ps.executeUpdate();

4.如果用户存在则请求转发异常,因为是web层所以异常没地方抛,直接把错误显示在页面

  User user = new User(0,username,password,nickname,email);
  UserService userService = new UserService();
  try{
  userService.registUser(user);
  }catch(MsgException e){
  //提示红字用户名已存在,调用异常信息做提示
  request.setAttribute("msg", e.getMessage());
  request.getRequestDispatcher("/regist.jsp").forward(request, response);
  return;
  }

登录功能

1.web层loginServlet类 因为要判断user所以又要在service层的userService创建一个loginUser的方法,参数是用户名和密码

2.在service层的userService的loginUser方法,要在dao层查询数据库,则需要在dao层创建一个findUserByUsernameAndPassword方法,返回的是一个User对象

  ps = conn.prepareStatement("select * from user where username = ? and password = ?");

  ps.setString(1, username);
  ps.setString(2, password);
  rs = ps.executeQuery();

3.如果findUserByUsernameAndPassword方法反回数据为null,则在service层的userService的loginUser方法里抛出(用户名和密码错误)的异常到web层loginServlet类,如果不为null就返回User对象

4.如果(用户名和密码错误)就把异常显示到JSP页面

  request.setAttribute("msg", e.getMessage());
  request.getRequestDispatcher("/login.jsp").forward(request, response);

5.(用户名和密码正确)从web层把user回显到JSP页面,并且跳到主页

  //发送user对象到jsp页面。
  request.getSession().setAttribute("user", user);
  //跳转到主页
  response.sendRedirect(request.getContextPath()+"/index.jsp");

猜你喜欢

转载自www.cnblogs.com/akic/p/10722905.html