一、 输入用户名与密码提交到服务器后端(数据库),用户名与密码正确就登录成功,否则登录失败。
1.导包:导入(打印日志的jar包)(mybatis的jar包)(数据库连接的jar包
2.配置文件:日志配置文件,数据库配置文件,mybatis核心配置文件
3.面向三层架构开发:
dao,数据访问层Data Access Object,专门负责操作数据库增、删、改、查数据
service,处理业务逻辑,举例子:一个业务方法可以操作调用dao多个方法,实现操作多条sql语句
web,表现层,专门负责与用户浏览器交互
依赖关系: 表现层依赖业务层, 业务层依赖数据访问层
二、创建数据库
create database day05 charset utf8;
use day05;
create table `user`(
id int primary key auto_increment,
username varchar(20),
password varchar(32)
);
insert into `user`(username, password) values ('Jack','123'),('Rose','456');
select * from `user`;
创建用户登录界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录界面</title>
</head>
<body>
<h3>用户登录</h3>
<form action="LoginServlet" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="name" placeholder="请输入用户名"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" placeholder="请输入密码"></td>
</tr>
<tr>
<td><input type="submit" name="登录"></td>
</tr>
</table>
</form>
</body>
</html>
三、创建实体类
package com.login.entity;
/**
* @create 2020 -09 -17 -22:03
*/
public class User {
private Integer id;
private String username;
private String password;
public User() {
}
public Integer getId() {
return id;
}
public void setId(Integer 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 + '\'' +
'}';
}
}
四,dao数据库访问层
package com.login.dao;
import com.login.entity.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
* Created by MyPC on 2020/9/17
*/
public interface UserDao {
//根据用户名和密码查询数据库,由于是传入多个参数,采用别名
@Select("select * from user where username=#{username} and password=#{password}")
User find(@Param("username")String username,@Param("password")String password);
}
五、实现用户业务处理层UserService
package com.login.Servlet;
import com.login.dao.UserDao;
import com.login.entity.User;
import com.login.util.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
/**
* @create 2020 -09 -17 -22:47
*/
public class UserServlet {
//从登录业务(LoginServlet)获取到的用户用户名和密码
public User find(String username,String password){
//调用dao层对数据进行查询
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user = mapper.find(username,password);
MybatisUtils.closeSqlSession(sqlSession);
//返回用户数据
return user;
}
}
六、实现LoginServlet代码
package com.login.web;
import com.login.Servlet.UserServlet;
import com.login.entity.User;
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;
/**
* Created by MyPC on 2020/9/17
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//不管是get还是post都是进入了get请求
doGet(request, response);
}
private UserServlet userServlet = new UserServlet();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决中文乱码问题
request.setCharacterEncoding("utf8");
response.setContentType("text/html;charset=utf8");
//获取到用户界面提交的数据
String username = request.getParameter("name");
String password = request.getParameter("password");
//获取用户提交的数据进行用户业务(UserServlet)处理
User user = userServlet.find(username, password);
//处理的结果判断
if (user != null) {
//把用户名存在作用域中
request.setAttribute("loginName", user.getUsername());
//请求页面转发跳转
request.getRequestDispatcher("/SucceedServlet").forward(request, response);
} else {
//重定向页面跳转,跳转到失败页面
response.sendRedirect(request.getContextPath() + "/Failure.html");
}
}
}
七、用户登录成功(SucceedServlet)
package com.login.web;
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;
/**
* Created by MyPC on 2020/9/17
*/
@WebServlet("/SucceedServlet")
public class SucceedServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取作用域中的用户名
String loginName = (String) request.getAttribute("loginName");
//在浏览器上打印出信息
response.getWriter().println("欢迎"+loginName+"登录");
}
}
八、用户登录失败界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3 style="color: red">登录失败</h3>
</body>
</html>```