使用servlet来实现登录功能
1.创建数据库表 mysql
2.创建web project
3. 在web目录下创建登录页面 login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>登录页面</h1>
<!--前端访问后台资源 不加/-->
<form action="login" method="post">
用户名: <input type="text" name="username"><br/>
密码: <input type="password" name="password"><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
4.编写实体类User
public class User {
private int id;
private String username;
private String password;
public User() {
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public User(String username, String password) {
this.username = username;
this.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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
5.编写数据访问层 UserDao接口 和 接口实现类
导入mysql依赖,复制到web--web-inf下的lib目录底下:
注意: web项目中mysql依赖包必须复制到web-inf下面的lib目录里面
把mysql依赖引入到该工程里面
数据库连接工具类 DBUtil
public class DBUtil {
private static String driverClassName="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql://localhost:3306/test?characterEncoding=utf8";
private static String username="root";
private static String password="123456";
static{
try {
Class.forName(driverClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
try {
return DriverManager.getConnection(url, username, password);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs){
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
public static void close(Connection conn, PreparedStatement pstmt){
try {
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
}
UserDao
package com.jishou.dao;
import com.jishou.pojo.User;
public interface UserDao {
public User queryOneUser(User user) ;
public int insertUser(User user);
}
UserDaoImpl
public class UserDaoImpl implements UserDao{
/*@Override
public User queryOneUser(User user) throws SQLException, ClassNotFoundException {
//1.加载驱动 建厂
String driverClassName="com.mysql.jdbc.Driver";
String url="jdbc://mysql:localhost:3306/test?characterEncoding=utf8";
String username="root";
String password="123456";
String sql="select * from user where username=? and password=?";
User u=null;
Class.forName(driverClassName);
//2.获取连接 修路
Connection conn = DriverManager.getConnection(url, username, password);
//3.创建PreparedStatement 造车
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,user.getUsername());
pstmt.setString(2,user.getPassword());
//4.执行操作 拉货
ResultSet rs = pstmt.executeQuery();
//5.处理结果集 查询会有结果集 增删改 没有 处理货物
if(rs.next()){
int id = rs.getInt(1);
String name = rs.getString(2);
String pass = rs.getString(3);
u=new User(id,name,pass);
}
//6. 关闭资源 路 砸了 货物 毁了 车 砸了
if(rs!=null){
rs.close();
}
if(pstmt!=null){
pstmt.close();
}
if(conn!=null){
conn.close();
}
return u;
}*/
public User queryOneUser(User user) {
//1.加载驱动 建厂
String sql="select * from user where username=? and password=?";
User u=null;
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
//2.获取连接 修路
conn= DBUtil.getConnection();
//3.创建PreparedStatement 造车
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
//4.执行操作 拉货
rs = pstmt.executeQuery();
//5.处理结果集 查询会有结果集 增删改 没有 处理货物
if (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
String pass = rs.getString(3);
u = new User(id, name, pass);
}
}catch (SQLException e){
e.printStackTrace();
}
//6. 关闭资源 路 砸了 货物 毁了 车 砸了
DBUtil.close(conn,pstmt,rs);
return u;
}
@Override
public int insertUser(User user) {
return 0;
}
}
6.编写service层接口和实现类
UserService
public interface UserService {
//登录
public User login(User user);
//注册
public boolean register(User user);
}
UserServiceImpl
public class UserServiceImpl implements UserService{
private UserDao userDao=new UserDaoImpl();
@Override
public User login(User user) {
return userDao.queryOneUser(user);
}
@Override
public boolean register(User user) {
return false;
}
}
7.编写Servlet的登录实现逻辑
LoginServlet
@WebServlet(name = "LoginServlet",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
private UserService userService=new UserServiceImpl();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 取参数
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
User qtUser=new User(username,password);
//连数据库查询
User htUser = userService.login(qtUser);
//响应
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//判断是否登录成功
if(htUser!=null){
out.println("<h1>登录成功</h1>");
}else{
out.println("<h1>登录失败</h1>");
}
out.flush();
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
使用Servlet实现注册功能
在web目录下新建register.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>注册页面</h1>
<!--前端访问路径都不加/ -->
<form action="register" method="post">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
编写数据访问层UserDao和实现类里面的注册逻辑
UserDao接口
public int insertUser(User user);
UserDaoImpl接口实现类
@Override
public int insertUser(User user) {
String sql="INSERT INTO user (username, password) VALUES ( ?, ?)";
Connection conn = DBUtil.getConnection();
PreparedStatement pstmt=null;
int row=0;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
row = pstmt.executeUpdate();
}catch(SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(pstmt,conn);
}
return row;
}
编写service层注册逻辑
UserService接口:
public boolean register(User user);//注册
UserServiceImpl接口实现类
@Override
public boolean register(User user) {
int row = userDao.insertUser(user);
if(row>0){
return true;
}
return false;
}
编写RegisterServlet注册实现逻辑
RegisterServlet
@WebServlet(name = "RegisterServlet",urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {
private UserService userService=new UserServiceImpl();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//取参
req.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
User qtUser=new User(username,password);
//链接数据库添加
boolean flag = userService.register(qtUser);
/*resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
//响应
if(flag){
out.println("<h1>注册成功<h1>");
}else {
out.println("<h1>注册失败<h1>");
}
out.flush();
out.close();*/
//注册成功 需要跳转到登录页面,注册失败 需要 回到注册页面,继续注册
if(flag){
//重定向 就表示重新定位到一个地址
resp.sendRedirect("login.html");
}else{
resp.sendRedirect("register.html");
}
}
}
浏览器url访问测试,展示运行效果