JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇)
三层架构实现登陆注册
三层思想回顾
注册功能三层架构
开发步骤
- 创建新的数据库数据表
- 创建新的module
- 复制页面
- 创建包:添加jar包,配置文件
- 功能,编写服务器程序
数据库表
创建新module,并配置
前端注册页面
JavaBean
public class User {
private int uid;
private String username;
private String password;
private String email;
private String name;
private String gender;
private String birthday;
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", birthday='" + birthday + '\'' +
'}';
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}
注册功能代码实现
web层
package com.itheima.web;
import com.itheima.domain.User;
import com.itheima.service.UserService;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
@WebServlet(urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
获取客户端提交的数据 Map
把数据封装到JavaBean对象中(User)
调用业务层的方法,传递User
页面重定向到登录页面
*/
request.setCharacterEncoding("utf-8");
//获取客户端提交的数据 Map
Map<String, String[]> map = request.getParameterMap();
//把数据封装到JavaBean对象中(User)
User user = new User();
//apache开发工具类,用于简化JavaBean的开发
//BeanUtils类里面有一个静态方法populate(JavaBean,map集合)
try {
BeanUtils.populate(user,map);
} catch (Exception e) {
e.printStackTrace();
}
//调用业务层方法,传递JavaBean,完成注册
UserService service = new UserService();
service.register(user);
//注册完成,页面到达登陆页面,重定向
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
service层
package com.itheima.service;
import com.itheima.dao.UserDao;
import com.itheima.domain.User;
import java.sql.SQLException;
public class UserService {
/*
注册方法
接收web层传递的JavaBean对象
将JavaBean对象传递到dao层
*/
public void register(User user){
UserDao dao = new UserDao();
try {
dao.register(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
dao层
package com.itheima.dao;
import com.itheima.domain.User;
import com.itheima.utils.C3P0UtilsXML;
import org.apache.commons.dbutils.QueryRunner;
import java.sql.SQLException;
public class UserDao {
/*
注册方法
接收service传递的JavaBean
取出JavaBean中的数据,写入数据表
*/
public void register(User user) throws SQLException {
QueryRunner qr = new QueryRunner(C3P0UtilsXML.getDataSource());
//添加数据的sql语句
String sql = "insert into user values(?,?,?,?,?,?,?)";
//创建数组,存储User对象的数据
Object[] params = {null,user.getUsername(),user.getPassword(),user.getEmail(),
user.getName(),user.getGender(),user.getBirthday()};
//执行sql语句
qr.update(sql,params);
}
}
结果:验证码功能暂未开发
数据库中存储
登录功能三层架构
注意:
- 服务器有数据需要带回客户端显示,使用转发
- 服务器没有数据带回客户端显示,使用重定向
登录功能代码实现
前端
web层
package com.itheima.web;
import com.itheima.service.UserService;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
实现登录的服务器端servlet
接收客户端提交的用户名密码
提交参数传递到业务层
接收业务层的返回结果(boolean)
判断结果:true 登录成功,页面重定向到首页
false 登录失败,把错误数据存储到request域对象,并转发回原有登录页面
*/
String username = request.getParameter("username");
String password = request.getParameter("password");
//调用业务层方法,获取返回值,传递用户名密码
UserService service = new UserService();
boolean b = service.login(username, password);
//判断
if(b){
//true
response.sendRedirect(request.getContextPath());
}else {
//false,把错误信息存储到request域对象
request.setAttribute("msg","用户名密码错误");
//转发回登录页面
RequestDispatcher dispatcher = request.getRequestDispatcher("/login.jsp");
dispatcher.forward(request,response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
service层
package com.itheima.service;
import com.itheima.dao.UserDao;
import com.itheima.domain.User;
import java.sql.SQLException;
public class UserService {
/*
登录的方法
接收Web层传递的用户名密码
参数传递到dao层(数据验证)
获取dao返回值
结果,返回web层一个boolean
*/
public boolean login(String username, String password){
UserDao dao = new UserDao();
User user = null;
try {
user = dao.login(username,password);
} catch (SQLException e) {
e.printStackTrace();
}
//判断返回的user对象,是null,登录失败返回false
if(user==null){
return false;
}
return true;
}
/*
注册方法
接收web层传递的JavaBean对象
将JavaBean对象传递到dao层
*/
public void register(User user){
UserDao dao = new UserDao();
try {
dao.register(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
dao层
package com.itheima.dao;
import com.itheima.domain.User;
import com.itheima.utils.C3P0UtilsXML;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import java.sql.SQLException;
public class UserDao {
/*
登录方法
接收service传递的用户名密码
查询数据表,获取结果集
结果集封装User对象,返回业务层
*/
public User login(String username,String password) throws SQLException {
QueryRunner qr = new QueryRunner(C3P0UtilsXML.getDataSource());
String sql = "select * from user where username=? and password=?";
User user = qr.query(sql, new BeanHandler<User>(User.class), username, password);
return user;
}
/*
注册方法
接收service传递的JavaBean
取出JavaBean中的数据,写入数据表
*/
public void register(User user) throws SQLException {
QueryRunner qr = new QueryRunner(C3P0UtilsXML.getDataSource());
//添加数据的sql语句
String sql = "insert into user values(?,?,?,?,?,?,?)";
//创建数组,存储User对象的数据
Object[] params = {null,user.getUsername(),user.getPassword(),user.getEmail(),
user.getName(),user.getGender(),user.getBirthday()};
//执行sql语句
qr.update(sql,params);
}
}