注册功能
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");