大型网站只有在用户登录成功后才能进行相关操作,本任务要求实现一个如下图所示用户登录功能。用户登录时,需要在数据库中判断是否存在该用户的信息以及用户信息的正确性。用户登录界面如下图所示。
创建名称为jdbc的数据库,然后在该数据库中创建一个tb_user表,并在tb_user表插入用户数据。
在web目录下创建一个名称为login的JSP文件,在该文件中添加用于用户登录时输入用户信息的表单元素。
由于每次操作数据库时,都需要加载数据库驱动、建立数据库连接以及关闭数据库连接,为了避免代码的重复书写,建立一个专门用于操作数据库的工具类GetConnection。
创建LoginServlet类,用于封装用户的登录信息并对用户信息进行校验。
启动Tomcat服务器,然后在浏览器中访问地址,输入用户名密码以判断登录成功与否。
由于本任务需要进行数据库操作,因此需要先在本地安装MySQL数据库,并创建一个名为jdbc的数据库。可以使用以下命令在MySQL中创建jdbc数据库:
CREATE DATABASE jdbc;
创建完数据库后,需要在该数据库中创建一个名为tb_user的表,用于存储用户信息。可以使用以下命令在MySQL中创建tb_user表:
CREATE TABLE tb_user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20),
password VARCHAR(20)
);
INSERT INTO tb_user (username, password) VALUES ('admin', '123456');
以上命令创建了一个包含三个字段(id、username、password)的tb_user表,并向该表中插入了一个用户名为admin,密码为123456的用户数据。
接下来,在web目录下创建一个名为login.jsp的JSP文件,用于实现用户登录界面。
<%!@(MISSING) page contentType="text/html;charset=UTF-8" language="java" %!(MISSING)u003e
上述代码创建了一个包含用户名和密码输入框以及登录按钮的表单。
由于每次操作数据库时都需要加载数据库驱动、建立数据库连接以及关闭数据库连接,为了避免代码的重复书写,可以创建一个专门用于操作数据库的工具类GetConnection。该类的主要作用是封装数据库连接的获取和关闭操作。代码如下:
package com.example.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class GetConnection {
private static final String URL = "jdbc:mysql://localhost:3306/jdbc?useSSL=false&serverTimezone=UTC";
private static final String USER = "root";
private static final String PASSWORD = "123456";
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void closeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
上述代码中,getConnection()方法用于获取数据库连接,closeConnection()方法用于关闭数据库连接。其中,URL、USER和PASSWORD分别表示连接数据库所需的URL、用户名和密码,在实际使用时需要根据实际情况进行调整。
接下来,创建一个名为LoginServlet的Servlet类,用于封装用户的登录信息并对用户信息进行校验。该类的主要作用是从用户提交的表单中获取用户名和密码,并在数据库中查询是否存在该用户信息以及用户信息的正确性。代码如下:
package com.example.servlet;
import com.example.util.GetConnection;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = GetConnection.getConnection();
String sql = "SELECT * FROM tb_user WHERE username=? AND password=?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, username);
stmt.setString(2, password);
rs = stmt.executeQuery();
if (rs.next()) {
response.sendRedirect("success.jsp");
} else {
response.sendRedirect("fail.jsp");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
GetConnection.closeConnection(conn);
}
}
}
上述代码中,doPost()方法用于处理POST请求,主要包含以下步骤:
从HttpServletRequest对象中获取用户名和密码;
获取数据库连接,并根据用户名和密码查询数据库中是否存在该用户信息以及用户信息的正确性;
如果查询结果不为空,则重定向到success.jsp页面,否则重定向到fail.jsp页面;
关闭数据库连接。
最后,创建两个JSP文件success.jsp和fail.jsp,用于在用户登录成功或失败后显示相应的信息。
success.jsp:
<%!@(MISSING) page contentType="text/html;charset=UTF-8" language="java" %!(MISSING)u003e
fail.jsp:
<%!@(MISSING) page contentType="text/html;charset=UTF-8" language="java" %!(MISSING)u003e