Java基于Servlet和JSP實現(xiàn)登錄功能
引言
在 Web 開發(fā)中,用戶登錄功能是非常常見的模塊之一。本文將通過使用 Java Servlet 和 JSP 實現(xiàn)一個簡單的用戶登錄功能,展示如何創(chuàng)建登錄頁面、處理用戶登錄請求,并使用數(shù)據(jù)庫驗證用戶信息。還將介紹如何在 IntelliJ IDEA 中創(chuàng)建 Servlet 項目,引入 MySQL 連接器,并將 login.jsp 設置為項目的默認主頁。
一、開發(fā)目標
1. 開發(fā)環(huán)境
- 開發(fā)工具: IntelliJ IDEA
- 開發(fā)語言: Java
- Web 容器: Apache Tomcat
- 數(shù)據(jù)庫: MySQL
- JDK 版本: JDK 8 或以上
- 依賴管理: Maven
2. 目標功能
實現(xiàn)用戶在login.jsp輸入賬號密碼后跳轉到result.jsp的結果頁,并提示登錄是否成功。
3. 目標項目結構
servlet-study/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── com/example/LoginServlet.java │ │ │ └── com/example/utils/DBUtil.java │ │ └── resources/ │ │ └── db.properties ├── webapp/ │ ├── login.jsp │ ├── result.jsp │ └── WEB-INF/ │ └── web.xml └── pom.xml
二、創(chuàng)建 Servlet JSP 項目
1. 創(chuàng)建 Maven 項目
打開 IntelliJ IDEA,選擇 New Project,填寫項目名稱,選擇 Maven,點擊 Create。

File 菜單欄里選擇 Project Structure。

Project Settings 選擇 Modules,點擊上方加號,新增一個 Web 模塊。

點擊 OK。

創(chuàng)建結果如圖:

2. 配置 Tomcat 服務器
啟動按鈕旁邊,點擊 Edit Configurations。

添加 Tomcat Server > Local。

如果下方有紅色提示,請點擊 Fix。

Project Settings 選擇 Artifacts,添加 Web Application Exploded,選擇 From Modules。

后面全部點擊 OK。

回到 Deployment 配置,將 Application context 的路徑設置為 /。

3. 引入 MySQL 連接器依賴
在 pom.xml 中添加以下依賴:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
右鍵點擊項目根目錄,選擇 Maven > Reload Project 更新依賴。

安裝成功如圖:

三、配置數(shù)據(jù)庫連接與表結構
1. 創(chuàng)建數(shù)據(jù)庫與用戶表
創(chuàng)建 servlet_study 數(shù)據(jù)庫,新建 users 表。
CREATE DATABASE IF NOT EXISTS servlet_study DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE servlet_study;
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (username, password) VALUES ('admin', 'root');

2. 配置數(shù)據(jù)庫工具類 (DBUtil.java)
java 目錄下創(chuàng)建 com > example > utils 文件夾下工具類文件 DBUtil.java。


編寫 DBUtil.java 文件。
package com.example.utils;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class DBUtil {
private static String url;
private static String username;
private static String password;
private static String driverClassName;
static {
try (InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties")) {
Properties properties = new Properties();
properties.load(input);
url = properties.getProperty("jdbc.url");
username = properties.getProperty("jdbc.username");
password = properties.getProperty("jdbc.password");
driverClassName = properties.getProperty("jdbc.driverClassName");
Class.forName(driverClassName);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
}
3. 創(chuàng)建數(shù)據(jù)庫配置文件 (db.properties)
src > main > java > resources 目錄下創(chuàng)建數(shù)據(jù)庫配置文件 db.properties。

文件內容:
jdbc.url=jdbc:mysql://localhost:3306/servlet_study?useSSL=false&serverTimezone=UTC jdbc.username=your_username jdbc.password=your_password jdbc.driverClassName=com.mysql.cj.jdbc.Driver
提示: 請將 your_username 和 your_password 替換為實際的數(shù)據(jù)庫賬號、密碼。

四、編寫登錄頁面與接口代碼
1. 創(chuàng)建登錄頁面 (login.jsp)
web 目錄下創(chuàng)建 login.jsp 文件。

編寫代碼:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>用戶登錄</title>
</head>
<body>
<h2>用戶登錄</h2>
<form action="/Login" method="post">
<label for="username">賬號:</label>
<input type="text" id="username" name="username" required>
<label for="password">密碼:</label>
<input type="password" id="password" name="password" required>
<input type="submit" value="登錄">
</form>
</body>
</html>

2. 創(chuàng)建登錄結果頁面 (result.jsp)
web 目錄下創(chuàng)建 result.jsp 文件。
編寫代碼:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>登錄結果</title>
</head>
<body>
<h2>登錄結果</h2>
<%
String message = (String) request.getAttribute("message");
%>
<p><%= message %></p>
<a href="/login.jsp" rel="external nofollow" >返回登錄頁面</a>
</body>
</html>

3. 創(chuàng)建后端 Servlet 接口 (LoginServlet.java)
src/main/java 下創(chuàng)建新的 java 類 LoginServlet.java。


編寫 LoginServlet.java 代碼:
package com.example;
import com.example.utils.DBUtil;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.sql.*;
@WebServlet(name = "LoginServlet", urlPatterns = "/Login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
if (validateUser(username, password)) {
req.setAttribute("message", "登錄成功!");
} else {
req.setAttribute("message", "賬號或密碼錯誤!");
}
req.getRequestDispatcher("/result.jsp").forward(req, resp);
}
private boolean validateUser(String username, String password) {
String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
try (Connection connection = DBUtil.getConnection();
PreparedStatement ps = connection.prepareStatement(sql)) {
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
}
新建的代碼會有報錯,我們需要在 pom.xml 文件里引入 javax 的包。
在 pom.xml 中添加以下依賴:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>

回到 LoginServlet.java 文件,可以看到已經(jīng)沒有報錯了。

4. 編輯配置文件 (web.xml)
web.xml 里設置首頁為 login.jsp,將 LoginServlet 的接口url /Login 配置到路由里。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.example.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>

五、啟動和測試
啟動項目。

在瀏覽器中訪問項目根路徑:http://localhost:8080/
看到我們首頁自動跳轉的登錄頁。

輸入錯誤的賬號或密碼時,顯示 "賬號或密碼錯誤!"。

輸入正確的賬號密碼時,顯示 "登錄成功!"。

六、常見問題
1. jsp頁面報404錯誤
解決方法:
① 檢查路徑是否正確;
② Tomcat 的Deployment 配置里 Application context 的路徑設置為 /(參考文章里配置 Tomcat 的最后一步)
2. /Login接口報404錯誤
解決方法:
① 檢查接口上方注解內url是否正確;
② web.xml 文件是否正確配置(參考第四章第4節(jié)配置文件)
3. 連接不上數(shù)據(jù)庫
解決方法:
① 檢查賬號、密碼、數(shù)據(jù)庫連接信息 (db.properties) 有沒有寫錯;
② Tomcat 運行的 jar 包來自其自身的libs文件夾,需要把 mysql-connector-java.jar 拷貝到 Tomcat 的安裝路徑下的 lib 文件夾下面。
mysql-connector-java.jar 在 external libraries 目錄下,它是由 Maven 自動導入的。

復制到 Tomcat 的安裝路徑下的 lib 文件夾下面。

重新啟動項目,即可順利連接數(shù)據(jù)庫。
以上就是Java基于Servlet和JSP實現(xiàn)登錄功能的詳細內容,更多關于Java Servlet和JSP登錄的資料請關注腳本之家其它相關文章!
相關文章
SpringBoot+JSON+AJAX+ECharts+Fiddler實現(xiàn)前后端分離開發(fā)可視化
這篇文章主要介紹了SpringBoot+JSON+AJAX+ECharts+Fiddler實現(xiàn)前后端分離開發(fā)可視化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06
SpringSecurity集成第三方登錄過程詳解(最新推薦)
在ThirdAuthenticationFilter 類的attemptAuthentication()方法中,我們通過authType類型,然后創(chuàng)建對應的Authentication實現(xiàn)來實現(xiàn)不同方式的登錄,下面給大家分享SpringSecurity集成第三方登錄過程,感興趣的朋友一起看看吧2024-05-05
Java面試題 從源碼角度分析HashSet實現(xiàn)原理
這篇文章主要介紹了Java面試題 從源碼角度分析HashSet實現(xiàn)原理?,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-07-07
SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解
這篇文章主要介紹了SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12

