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

打印 上一主题 下一主题

主题 865|帖子 865|积分 2595

目录
Java Web实现用户登录
实现步调 
1、创建数据库表
2、Web项目搭建
3、编写登录页面
4、登录乐成页面
5、编写工具类
6、创建实体类
7、实现登录功能的 LoginServlet
8、运行项目,检察效果

 
Java Web实现用户登录

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

实现步调 

1、创建数据库表

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

2、Web项目搭建

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

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




        看到web目录即为乐成: 

        导入完组件后,在web/WEB-INF目录下,粘贴lib包(包罗mysql驱动包、servlet-api包):
【lib包资源可前往本专栏第一篇文章“初识JDBC”下载】



3、编写登录页面

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


         编写代码如下:
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4.     <title>登录页面</title>
  5. </head>
  6. <body>
  7.     <form action="LoginServlet" method="post">
  8.         用户名:<input type="text" name="username" />
  9.         <br />
  10.         密  码:<input type="password" name="password" />
  11.         <br />
  12.         <input type="submit" value="登 录" class="submit" />
  13.     </form>
  14. </body>
  15. </html>
复制代码
4、登录乐成页面

        在web目录下创建一个名称为loginSuccess.jsp文件,在该文件中添加用户登录乐成后的页面内容。代码如下:
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3.   <head>
  4.     <title>登录成功</title>
  5.   </head>
  6.   <body>
  7.     欢迎登录!${user.name}
  8.   </body>
  9. </html>
复制代码
5、编写工具类

        由于每次操作数据库时,都需要加载数据库驱动、创建数据库毗连以及关闭数据库毗连,为了避免代码的重复书写,下面创建一个专门用于操作数据库的工具类。
        在src目录的com.example.utils包下创建一个JDBCUtils工具类。编写代码如下:
  1. package com.example.utils;
  2. import java.sql.*;
  3. public class JDBCUtils {
  4.     // 加载驱动,并建立数据库连接
  5.     public static Connection getConnection() throws SQLException,
  6.             ClassNotFoundException {
  7.         Class.forName("com.mysql.cj.jdbc.Driver");
  8.         String url = "jdbc:mysql://localhost:3306/jdbc?serverTimezone=GMT%2B8&useSSL=false";
  9.         String username = "root";
  10.         String password = "root";
  11.         Connection conn = DriverManager.getConnection(url, username, password);
  12.         return conn;
  13.     }
  14.     // 关闭数据库连接,释放资源
  15.     public static void release(PreparedStatement pstmt, Connection conn) {
  16.         if (pstmt != null) {
  17.             try {
  18.                 pstmt.close();
  19.             } catch (SQLException e) {
  20.                 e.printStackTrace();
  21.             }
  22.             pstmt = null;
  23.         }
  24.         if (conn != null) {
  25.             try {
  26.                 conn.close();
  27.             } catch (SQLException e) {
  28.                 e.printStackTrace();
  29.             }
  30.             conn = null;
  31.         }
  32.     }
  33.     public static void release(ResultSet rs, PreparedStatement pstmt, Connection conn){
  34.         if (rs != null) {
  35.             try {
  36.                 rs.close();
  37.             } catch (SQLException e) {
  38.                 e.printStackTrace();
  39.             }
  40.             rs = null;
  41.         }
  42.         release(pstmt, conn);
  43.     }
  44. }
复制代码
6、创建实体类

        在src目录的com.example.domain包下创建一个User实体类,运用于封装User对象。编写代码如下:
  1. package com.example.domain;
  2. public class User {
  3.     Integer id;
  4.     String username;
  5.     String password;
  6.     String name;
  7.     public Integer getId() {
  8.         return id;
  9.     }
  10.     public void setId(Integer id) {
  11.         this.id = id;
  12.     }
  13.     public String getUsername() {
  14.         return username;
  15.     }
  16.     public void setUsername(String username) {
  17.         this.username = username;
  18.     }
  19.     public String getPassword() {
  20.         return password;
  21.     }
  22.     public void setPassword(String password) {
  23.         this.password = password;
  24.     }
  25.     public String getName() {
  26.         return name;
  27.     }
  28.     public void setName(String name) {
  29.         this.name = name;
  30.     }
  31. }
复制代码
7、实现登录功能的 LoginServlet

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

        编写代码如下: 
  1. package com.example.servlet;
  2. import com.example.domain.User;
  3. import com.example.utils.JDBCUtils;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.io.PrintWriter;
  11. import java.sql.Connection;
  12. import java.sql.PreparedStatement;
  13. import java.sql.ResultSet;
  14. import java.sql.SQLException;
  15. @WebServlet("/LoginServlet")
  16. public class LoginServlet extends HttpServlet {
  17.     @Override
  18.     protected void doPost(HttpServletRequest request, HttpServletResponse response)
  19.             throws ServletException, IOException {
  20.         // 有中文数据传输,需设置请求编码、响应方式和编码方式
  21.         request.setCharacterEncoding("UTF-8");
  22.         response.setCharacterEncoding("UTF-8");
  23.         response.setContentType("text/html");
  24.         PrintWriter out = response.getWriter();
  25.         //获取页面输入框的值
  26.         String loginUsername = request.getParameter("username");
  27.         String loginPassword = request.getParameter("password");
  28.         try {
  29.             //获取连接
  30.             Connection conn = JDBCUtils.getConnection();
  31.             //sql语句
  32.             String sql = "select * from tb_user where username=?";
  33.             //执行sql语句
  34.             PreparedStatement pstmt = conn.prepareStatement(sql);
  35.             pstmt.setString(1, loginUsername);
  36.             ResultSet rs = pstmt.executeQuery();
  37.             //处理结果
  38.             User user = new User();
  39.             while (rs.next()){
  40.                 user.setUsername(rs.getString("username"));
  41.                 user.setPassword(rs.getString("password"));
  42.                 user.setName(rs.getString("name"));
  43.             }
  44.             String dbUsername = user.getUsername();
  45.             String dbPassword = user.getPassword();
  46.             //判断用户名是否存在
  47.             if (dbUsername != null) {
  48.                 // 用户名存在,则要去判断密码是否正确
  49.                 if (loginPassword.equals(dbPassword)) {
  50.                     //user对象存储
  51.                     request.getSession().setAttribute("user", user);
  52.                     //重定向到登陆成功的页面loginSuccess.jsp
  53.                     response.sendRedirect("loginSuccess.jsp");
  54.                 } else {
  55.                     out.println("密码错误,请重新输入");
  56.                 }
  57.             } else {
  58.                 out.println("用户名不存在");
  59.             }
  60.             //释放资源
  61.             JDBCUtils.release(rs, pstmt, conn);
  62.         } catch (SQLException e) {
  63.             throw new RuntimeException(e);
  64.         } catch (ClassNotFoundException e) {
  65.             throw new RuntimeException(e);
  66.         }
  67.         out.flush();
  68.         out.close();
  69.     }
  70. }
复制代码
8、运行项目,检察效果

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

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


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


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


 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表