需求
🌏1.
编写login.html登录界面
🌏2.
使用Druid数据库连接池技术,操作mysql.
🌏3.
使用JDBCTemplate技术封装JDBC
🌏4.
页面跳转
分析
开发步骤
1.创建项目,导入📄html页面,配置文件,📁jar包.
libs
Login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>欢迎登陆</title>
</head>
<body>
<form action="/UserLogin/LoginServlet" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登陆">
</form>
</body>
</html>
2.创建数据库环境
sql语句
CREATE DATABASE USERINFO;
USE USERINFO;
CREATE TABLE USER{
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(32) UNIQUE NOT NULL,
password VARCHAR(32) NOT NULL
};
用户数据库
3.创建包📁com.tw.domain,创建类📄user
文件架构
User类
package com.tw.domain;
/*
*用户的JavaBean
* */
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 "domain{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
4.创建包📁com.tw.dao.创建UserDao,提供login方法
UserDao类
package com.tw.domain.dao;
import com.tw.domain.user;
import com.tw.domain.util.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
/*
* 操作数据库中user表
* */
public class userdao {
//声明JDBCTemplate对象共用
private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
/*
* 登陆方法
* @param loginuser 只有用户名和密码
* @return user 包含用户全部数据,没有查询到,返回null
* */
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>(user.class), loginuser.getUsername(), loginuser.getPassword());
return user;
} catch (DataAccessException e) {
e.printStackTrace();//记录日志
return null;
}
}
}
5.编写 📄 com.tw.web.servlet.LoginServlet类
package com.tw.domain.web.servlet;
import com.tw.domain.dao.userdao;
import com.tw.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;
@WebServlet(urlPatterns = "/LoginServlet")
public class LoginServlet 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 {
//设置编码
request.setCharacterEncoding("UTF-8");
//获取请求参数
String username = request.getParameter("username");
String password = request.getParameter("password");
//封装user对象
user loginuser = new user();
loginuser.setUsername(username);
loginuser.setPassword(password);
//调用logindao的login方法
userdao dao = new userdao();
user user = dao.login(loginuser);
if (user==null){
//登录失败
request.getRequestDispatcher("/failServlet").forward(request,response);
}else {
//存储数据
request.setAttribute("user",user);
//登录成功
request.getRequestDispatcher("/successServlet").forward(request,response);
}
}
}
6.📄login.html中📄form表单的action路径写法虚拟目录+servlet的资源路径
< form action="/UserLogin/LoginServlet" method=“post”>
7.登录成功,登录失败页面
successServlet类
package com.tw.domain.web.servlet;
import com.tw.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;
@WebServlet(urlPatterns = "/successServlet")
public class successServlet 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);
}
}
failServlet类
package com.tw.domain.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;
@WebServlet(urlPatterns = "/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);
}
}
问题
注意:com.mysql.jdbc.Driver
是 mysql-connector-java 5
中的,
com.mysql.cj.jdbc.Driver
是 mysql-connector-java 6
中的,properties文件中应使用com.mysql.cj.jdbc.Driver
相关知识
【Mark学Java】Java Web(一)
【Mark学Java】Java Web(二)
【Mark学Java】Java Web(三)
【Mark学Java】 JDBC连接池
【Mark学Java】 Spring-JDBC