登录案例的需求分析以及代码实现
用户登录案例需求:
1.编写login.html登录页面
username & password 两个输入框
2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表
3.使用JdbcTemplate技术封装JDBC
4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误

开发步骤:
1、创建项目,导入html文件、配置文件、jar包
druid.properties配置文件:
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/day14
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
login.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> 用户名:<input type="text" name="username"> <br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html>
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、创建User类
/** * 用户的实体类 */ public class User { private int id; private String username; private String password; @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + 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; } public User() { } public User(int id, String username, String password) { this.id = id; this.username = username; this.password = password; } }
4、编写JDBCUtils工具类
/** * JDBC工具类,使用Druid连接池 */ public class JDBCUtils { private static DataSource ds; static { try { //1、加载配置文件 Properties pro = new Properties(); //使用ClassLoader加载配置文件,获取字节输入流 InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"); pro.load(is); //2、初始化连接池对象 ds = DruidDataSourceFactory.createDataSource(pro); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * 获取连接池对象 */ public static DataSource getDataSource(){ return ds; } /** * 获取连接Connection对象 */ public static Connection getConnection() throws SQLException { return ds.getConnection(); } }
5、创建包dao,创建UserDao类,提供login方法
/** * 操作数据库中User表的类 */ public class UserDao { //声明JdbcTemplate对象共用 private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); /** * 登陆方法 * @param loginUser * @return */ public User login(User loginUser){ try { //编写sql String sql = "select * from USER where username = ? and password = ?"; //调用query方法 User user = template.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), loginUser.getUsername(), loginUser.getPassword()); return user; } catch (DataAccessException e) { e.printStackTrace(); return null; } } }
6、编写LoginServlet类
@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 userDao = new UserDao();
User user = userDao.login(loginuser);
//5、判断user
if (user==null){
//登陆失败
req.getRequestDispatcher("/failServlet").forward(req,resp);
}else {
//登陆成功
//存储数据
req.setAttribute("user",user);
//转发
req.getRequestDispatcher("/successServlet").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
7、login.html中form表单的action路径的写法
虚拟目录+Servlet的资源路径
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/loginServlet" method="post"> 用户名:<input type="text" name="username"> <br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html>
8、编写SuccessServlet登陆成功页面和FailServlet登陆失败页面
SuccessServlet登陆成功页面:
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取Request域中共享的user对象
User user = (User) req.getAttribute("user");
if (user!=null){
//给页面写一句话
resp.setContentType("text/html;charset=utf-8");
//输出
resp.getWriter().write("登陆成功!"+user.getUsername()+",欢迎您");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
FailServlet登陆失败页面:
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//给页面写一句话
resp.setContentType("text/html;charset=utf-8");
//输出
resp.getWriter().write("登陆失败,用户名或密码错误");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}

浙公网安备 33010602011771号