当前位置:首页 » 《关于电脑》 » 正文

Java Web实现用户登录:servlet+JDBC

17 人参与  2024年12月28日 10:02  分类 : 《关于电脑》  评论

点击全文阅读


目录

Java Web实现用户登录

实现步骤 

1、创建数据库表

2、Web项目搭建

3、编写登录页面

4、登录成功页面

5、编写工具类

6、创建实体类

7、实现登录功能的 LoginServlet

8、运行项目,查看效果


 

Java Web实现用户登录

        大型网站只有在用户登录成功后才能进行相关操作,本任务要求实现一个如下图所示用户登录功能。用户登录时,需要在数据库中判断是否存在该用户的信息以及用户信息的正确性。用户登录界面如下图所示。

6600d15b225346109efcabcef6329902.png

实现步骤 

1、创建数据库表

CREATE DATABASE jdbc;USE jdbc;CREATE TABLE tb_user (    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,-- id主键        username VARCHAR(40) NOT NULL,-- 账户名称,设置不为空    PASSWORD VARCHAR(40) NOT NULL,-- 密码,设置不为空    NAME VARCHAR(40) DEFAULT NULL,-- 用户真实姓名,默认为空    gender VARCHAR(20) DEFAULT NULL,-- 用户性别,默认为空    phonenumber    VARCHAR(30) DEFAULT NULL, -- 用户手机号码,默认为空    identitycode VARCHAR(30) DEFAULT NULL-- 用户身份证号码,默认为空);INSERT INTO tb_user VALUES(1,'张三','123','张三','male','13888888888','110202107075023');

9ba4777b3c634dab82bf9a6d47a8227c.png

2、Web项目搭建

         新建一个Web项目chapter12(以IDEAIU 2024.2.1为例)

1dbea7bc86a8436ca6bb641747a7143b.png

        创建成功后,为chapter12添加web组件:

 14624a00d3fd4baaa53d1c3455ca4f92.png

4a2eeb5688224774885644caaad625e5.png

a6c52ea151fc4ebf942e0cf4eceb67e3.png

a672a9177a594699b044307d932f1476.png

        看到web目录即为成功: 

19044c3c1e174878b7cd5cf03db034d0.png

        导入完组件后,在web/WEB-INF目录下,粘贴lib包(包含mysql驱动包、servlet-api包):

【lib包资源可前往本专栏第一篇文章“初识JDBC”下载】

0ced1aa1f86941138d2d1c10677e1517.png

bb791396a7cb4f4cae663014ba48e355.png

3、编写登录页面

        在web目录下创建一个名称为login.jsp的文件,在该文件中添加用于用户登录时输入用户信息的表单元素。

94cd2cb5829b4b2590c4372f81b79bc5.png

7de333d5810244a29873657571a866cd.png

         编写代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <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="登 录" class="submit" />    </form></body></html>

4、登录成功页面

        在web目录下创建一个名称为loginSuccess.jsp文件,在该文件中添加用户登录成功后的页面内容。代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html>  <head>    <title>登录成功</title>  </head>  <body>    欢迎登录!${user.name}  </body></html>

5、编写工具类

        由于每次操作数据库时,都需要加载数据库驱动、建立数据库连接以及关闭数据库连接,为了避免代码的重复书写,下面建立一个专门用于操作数据库的工具类。

        在src目录的com.example.utils包下创建一个JDBCUtils工具类。编写代码如下:

package com.example.utils;import java.sql.*;public class JDBCUtils {    // 加载驱动,并建立数据库连接    public static Connection getConnection() throws SQLException,            ClassNotFoundException {        Class.forName("com.mysql.cj.jdbc.Driver");        String url = "jdbc:mysql://localhost:3306/jdbc?serverTimezone=GMT%2B8&useSSL=false";        String username = "root";        String password = "root";        Connection conn = DriverManager.getConnection(url, username, password);        return conn;    }    // 关闭数据库连接,释放资源    public static void release(PreparedStatement pstmt, Connection conn) {        if (pstmt != null) {            try {                pstmt.close();            } catch (SQLException e) {                e.printStackTrace();            }            pstmt = null;        }        if (conn != null) {            try {                conn.close();            } catch (SQLException e) {                e.printStackTrace();            }            conn = null;        }    }    public static void release(ResultSet rs, PreparedStatement pstmt, Connection conn){        if (rs != null) {            try {                rs.close();            } catch (SQLException e) {                e.printStackTrace();            }            rs = null;        }        release(pstmt, conn);    }}

6、创建实体类

        在src目录的com.example.domain包下创建一个User实体类,运用于封装User对象。编写代码如下:

package com.example.domain;public class User {    Integer id;    String username;    String password;    String name;    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;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

7、实现登录功能的 LoginServlet

        在项目src目录的com.example.servlet包下创建LoginServlet类,用于封装用户的登录信息并对用户信息进行校验。思路如图:

8e2cc982f58f42ad8e481e1b7cdea06d.png

        编写代码如下: 

package com.example.servlet;import com.example.domain.User;import com.example.utils.JDBCUtils;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;import java.io.PrintWriter;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;@WebServlet("/LoginServlet")public class LoginServlet extends HttpServlet {    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // 有中文数据传输,需设置请求编码、响应方式和编码方式        request.setCharacterEncoding("UTF-8");        response.setCharacterEncoding("UTF-8");        response.setContentType("text/html");        PrintWriter out = response.getWriter();        //获取页面输入框的值        String loginUsername = request.getParameter("username");        String loginPassword = request.getParameter("password");        try {            //获取连接            Connection conn = JDBCUtils.getConnection();            //sql语句            String sql = "select * from tb_user where username=?";            //执行sql语句            PreparedStatement pstmt = conn.prepareStatement(sql);            pstmt.setString(1, loginUsername);            ResultSet rs = pstmt.executeQuery();            //处理结果            User user = new User();            while (rs.next()){                user.setUsername(rs.getString("username"));                user.setPassword(rs.getString("password"));                user.setName(rs.getString("name"));            }            String dbUsername = user.getUsername();            String dbPassword = user.getPassword();            //判断用户名是否存在            if (dbUsername != null) {                // 用户名存在,则要去判断密码是否正确                if (loginPassword.equals(dbPassword)) {                    //user对象存储                    request.getSession().setAttribute("user", user);                    //重定向到登陆成功的页面loginSuccess.jsp                    response.sendRedirect("loginSuccess.jsp");                } else {                    out.println("密码错误,请重新输入");                }            } else {                out.println("用户名不存在");            }            //释放资源            JDBCUtils.release(rs, pstmt, conn);        } catch (SQLException e) {            throw new RuntimeException(e);        } catch (ClassNotFoundException e) {            throw new RuntimeException(e);        }        out.flush();        out.close();    }}

8、运行项目,查看效果

        在IDEA中启动Tomcat服务器,然后在浏览器中访问地址http://localhost:8080/chapter12/login.jsp,用户登录界面和登录成功的Servlet界面如下面图所示。

a322ad56cfd04f189031c3fd3dc9f326.png

①用户名、密码分别输入“张三”和“123”(成功)

adce024178714a419f8053800833b43e.png

②用户名、密码分别输入“张三”和“111”(失败,密码错误)

f18a336298c64c3a887f50b3750a4aa8.png

③用户名、密码分别输入“lisi”和“123”(失败,用户名不存在)

ea0c7c02886c45088d8f6dce0135c4b6.png

 


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/208108.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1