Request登录案例
准备
1.创建数据库
CREATE DATABASE day14;
USE day14;
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT
username VARCHAR(32) UNIQUE NOT NULL
PASSWORD VARCHAR(32) NOT NULL
);
2.创建项目request_test
3.导入html、配置文件、jar包
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/day14_text/loginServlet" method="post">
用户名:<input type="text" name="username">
<br>
密 码:<input type="password" name="password">
<br>
<input type="submit" value="登录">
</form>
</body>
</html>
4.数据库和表创建好了,项目也搭建好了就可以——创建表对应的实体类了
创建cn.itcast.domain包和user类,user类对应着user表
package cn.itcast.domain;
/**
* @author 旗木五五开
* @create 2020-03-01 15:22
* 用户的实体类
*/
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
决定先写servlet还是先写dao操作数据库的代码。一般先写dao
5.创建cn.itcast.dao,创建UserDao,提供login方法
package cn.itcast.dao;
import cn.itcast.domain.User;
import cn.itcast.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
/**
* @author 旗木五五开
* @create 2020-03-01 15:57
* 提供操作数据库中User表的类。增删改的方法都应该放在这里
*/
public class UserDao {
// 声明公用的JDBCTemplate对象
// JdbcTemplate需要通过数据库连接池对象创建
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
/**
* 登录方法
* @param loginUser 用户在页面上填写只有用户名密码的对象
* @return user包含用户全部数据
*/
public User login(User loginUser){
// 1.编写SQL
String sql = "select * from user where username = ? and password = ?";
// 调用query方法,并封装对象
User user = template.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.class),
loginUser.getUsername(), loginUser.getPassword());
return user;
}
}
6.测试
package cn.itcast.test;
import cn.itcast.dao.UserDao;
import cn.itcast.domain.User;
import org.junit.Test;
/**
* @author 旗木五五开
* @create 2020-03-03 15:53
*/
public class UserDaoTest {
@Test
public void testLogin() {
// 3.创建user对象
User loginuser = new User();
// 4.给对象赋值
loginuser.setUsername("superbaby");
loginuser.setPassword("123");
/**
* 密码填写错误会报错,需要处理异常,要不然程序无法继续执行
* try/catch UserDao
*/
// 1.创建UserDao对象
UserDao dao = new UserDao();
// 2.调用方法,需要传入user对象
User user = dao.login(loginuser);
System.out.println(user);
}
}
7.修改UserDao
package cn.itcast.dao;
import cn.itcast.domain.User;
import cn.itcast.util.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
/**
* @author 旗木五五开
* @create 2020-03-01 15:57
* 提供操作数据库中User表的类。增删改的方法都应该放在这里
*/
public class UserDao {
// 声明公用的JDBCTemplate对象
// JdbcTemplate需要通过数据库连接池对象创建
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
/**
* 登录方法
* @param loginUser 用户在页面上填写只有用户名密码的对象
* @return user包含用户全部数据,没有查询到返回null
*/
public User login(User loginUser){
try {
// 1.编写SQL
String sql = "select * from user where username = ? and password = ?";
// 调用query方法,并封装对象
User user = template.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.class),
loginUser.getUsername(), loginUser.getPassword());
return user;
} catch (DataAccessException e) {
e.printStackTrace();
return null;
}
}
}
8.编写cn.itcat.web.servlet.LoginServlet类,完成登录的具体逻辑
package cn.itcast.web.servlet;
import cn.itcast.dao.UserDao;
import cn.itcast.domain.User;
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;
/**
* @author 旗木五五开
* @create 2020-03-03 17:43
*/
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.设置编码(防止乱码)
req.setCharacterEncoding("utf-8");
// 2.获取请求参数
String username = req.getParameter("username");
String password = req.getParameter("password");
// 3.封装user对象
User loginuser = new User();
loginuser.setUsername(username);
loginuser.setPassword(password);
// 4.调用UserDao的login方法,匹配数据库里的数据
UserDao dao = new UserDao();
User user = dao.login(loginuser);
// 5.判断user
if(user==null){
// 登录失败,跳转到failServlet
req.getRequestDispatcher("/failServlet").forward(req,resp);
}else {
// 登录成功
// 1.存储数据,起名user,值就是user这个对象
req.setAttribute("user",user);
// 2.转发
req.getRequestDispatcher("/successServlet").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
跳转到失败页面
package cn.itcast.web.servlet;
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;
/**
* @author 旗木五五开
* @create 2020-03-03 18:05
*/
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 给页面写一句话
// 设置编码
response.setContentType("text/html;charset=utf-8");
// 输出到页面上
response.getWriter().write("登录失败,用户名或密码错误");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
跳转到成功页面
package cn.itcast.web.servlet;
import cn.itcast.domain.User;
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;
/**
* @author 旗木五五开
* @create 2020-03-03 18:05
*/
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.获取request域中共享的数据
// 强制类型转换
User user =(User) request.getAttribute("user");
// 4.防止空指针异常
if (user != null){
// 给页面写一句话
// 2.设置编码
response.setContentType("text/html;charset=utf-8");
// 3.输出到页面上
response.getWriter().write("登录成功"+user.getUsername()+",欢迎您");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
编写完成
页面测试
随便输入
9.简化数据封装,BeanUtils工具类
今天比昨天晚,却比明天早