用户登录案例需求:
1.编写login.html页面:usename&password两个输入框;
2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表;
3.使用JDBCTemplate技术封装JDBC;
4.登陆成跳转到SusscessServlet展示:登陆成功!用户名,欢迎您。
5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误。
分析:
- loginServlet:
1.设置编码(解决中文乱码)
2.获取username和password
3.将username 和password封装为一个对象;
4.调用Username的login方法查询,获取返回值User对象;
5.判断user是否为null:*是:登录失败 *否:登录成功
- UserDao(操作数据库的类)
public User login(User user) { select*from user where user name=? and password =? }
开发步骤:
1.创建项目,导入配置文件和jar包;
2.创建数据库环境;
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
);
3.创建包cn,创建user类-对应user表:
[注意]:Alt+Insert:生成getter setter方法 —— 再来一次toString
package cn;
//用户的实体类
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 + '\'' +
'}';
}
}
4.创建cn.dao包,创建类UserDao(操作数据库中user表的类),提供login方法;
package cn.dao;
import cn.User;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import util.JDBCUtil;
//操作数据库中User表的类
public class UserDao {
/*
登录方法:
1.登录时只有用户名和密码;
2.返回是信息全部;
*/
//使用成员template共用
private JdbcTemplate template=new JdbcTemplate(JDBCUtil.getDataSource());
public User login(User loginUser){
try {
//1.编写sql
String sql="select* from user where username = ? and password = ?";
//2.调用query方法
User user=template.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.class),
loginUser.getUsername(),loginUser.getPassword());
return user;
} catch (DataAccessException e) {
e.printStackTrace();//记录日志
return null;
}
}
}
//测试一下是否成功
package test;
import cn.User;
import cn.dao.UserDao;
import jdk.jfr.StackTrace;
import org.junit.Test;
public class UserDaotest {
@Test(Alt+Enter)
public void test(){
User loginuser=new User();
loginuser.setUsername("baby");
loginuser.setPassword("123");
UserDao dao=new UserDao();
User user=dao.login(loginuser);
System.out.println(user);
}
}
6.编写login.Servlet类:
import cn.User;
import cn.dao.UserDao;
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("/lgoinServlet")
public class lgoinServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// this.doPost(request, response);
//1.设置编码
request.setCharacterEncoding("utf-8");
//2.获取请求参数
String username= request.getParameter("username");
String password=request.getParameter("password");
//3.封装user对象
User loginUser=new User();
loginUser.setUsername(username);
loginUser.setPassword(password);
//4.调用User的login方法
UserDao dao=new UserDao();
User user=dao.login(loginUser);
//5.判断user
if(user==null)
//登录失败
request.getRequestDispatcher("failServlet").forward(request,response);
else
//登录成功
//存储数据
request.setAttribute("user",user);
//转发
request.getRequestDispatcher("/successServlet").forward(request,response);
}
}
//FailServlet:
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("/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);
}
}
//successServlet:
import cn.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;
@WebServlet("/successServlet")
public class sucessServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user = (User) request.getAttribute("user");
if (user != null) {
//设置编码
response.setContentType("text/html;charset=utf-8");
//输出
response.getWriter().write("登录成功!" + user.getUsername() + "欢迎您");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
优化部分:
BeanUtils工具类:
作用:简化数据封装
修改部分:
//2.获取所有请求参数
Map<String,String[]> map=request.getParameterMap();
//3.创建User对象
User loginUser=new User();
//3.2 使用BeanUtil封装
try {
BeanUtils.populate(loginUser,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}