目录
Java Web实现用户登录
实现步调
1、创建数据库表
2、Web项目搭建
3、编写登录页面
4、登录乐成页面
5、编写工具类
6、创建实体类
7、实现登录功能的 LoginServlet
8、运行项目,检察效果
Java Web实现用户登录
大型网站只有在用户登录乐成后才能进行相干操作,本任务要求实现一个如下图所示用户登录功能。用户登录时,需要在数据库中判定是否存在该用户的信息以及用户信息的正确性。用户登录界面如下图所示。
实现步调
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');
复制代码
2、Web项目搭建
新建一个Web项目chapter12(以IDEAIU 2024.2.1为例)
创建乐成后,为chapter12添加web组件:
看到web目录即为乐成:
导入完组件后,在web/WEB-INF目录下,粘贴lib包(包罗mysql驱动包、servlet-api包):
【lib包资源可前往本专栏第一篇文章“初识JDBC”下载】
3、编写登录页面
在web目录下创建一个名称为login.jsp的文件,在该文件中添加用于用户登录时输入用户信息的表单位素。
编写代码如下:
- <%@ 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类,用于封装用户的登录信息并对用户信息进行校验。思路如图:
编写代码如下:
- 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界面如下面图所示。
①用户名、密码分别输入“张三”和“123”(乐成)
②用户名、密码分别输入“张三”和“111”(失败,密码错误)
③用户名、密码分别输入“lisi”和“123”(失败,用户名不存在)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |