登录注册功能实现

使用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访问测试,展示运行效果

  • 7
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾经不在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值