Java基于Servlet和JSP實現(xiàn)登錄功能
引言
在 Web 開發(fā)中,用戶登錄功能是非常常見的模塊之一。本文將通過使用 Java Servlet 和 JSP 實現(xiàn)一個簡單的用戶登錄功能,展示如何創(chuàng)建登錄頁面、處理用戶登錄請求,并使用數(shù)據(jù)庫驗證用戶信息。還將介紹如何在 IntelliJ IDEA 中創(chuàng)建 Servlet 項目,引入 MySQL 連接器,并將 login.jsp
設(shè)置為項目的默認主頁。
一、開發(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
輸入賬號密碼后跳轉(zhuǎn)到result.jsp
的結(jié)果頁,并提示登錄是否成功。
3. 目標項目結(jié)構(gòu)
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)建結(jié)果如圖:
2. 配置 Tomcat 服務(wù)器
啟動按鈕旁邊,點擊 Edit Configurations
。
添加 Tomcat Server > Local
。
如果下方有紅色提示,請點擊 Fix
。
Project Settings
選擇 Artifacts
,添加 Web Application Exploded
,選擇 From Modules
。
后面全部點擊 OK
。
回到 Deployment
配置,將 Application context
的路徑設(shè)置為 /
。
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ù)庫連接與表結(jié)構(gòu)
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
。
文件內(nèi)容:
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)建登錄結(jié)果頁面 (result.jsp)
web
目錄下創(chuàng)建 result.jsp
文件。
編寫代碼:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="UTF-8"> <title>登錄結(jié)果</title> </head> <body> <h2>登錄結(jié)果</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
里設(shè)置首頁為 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/
看到我們首頁自動跳轉(zhuǎn)的登錄頁。
輸入錯誤的賬號或密碼時,顯示 "賬號或密碼錯誤!"
。
輸入正確的賬號密碼時,顯示 "登錄成功!"
。
六、常見問題
1. jsp頁面報404錯誤
解決方法:
① 檢查路徑是否正確;
② Tomcat
的Deployment
配置里 Application context
的路徑設(shè)置為 /
(參考文章里配置 Tomcat
的最后一步)
2. /Login接口報404錯誤
解決方法:
① 檢查接口上方注解內(nèi)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
自動導(dǎo)入的。
復(fù)制到 Tomcat
的安裝路徑下的 lib
文件夾下面。
重新啟動項目,即可順利連接數(shù)據(jù)庫。
以上就是Java基于Servlet和JSP實現(xiàn)登錄功能的詳細內(nèi)容,更多關(guān)于Java Servlet和JSP登錄的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot+JSON+AJAX+ECharts+Fiddler實現(xiàn)前后端分離開發(fā)可視化
這篇文章主要介紹了SpringBoot+JSON+AJAX+ECharts+Fiddler實現(xiàn)前后端分離開發(fā)可視化,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2022-06-06SpringSecurity集成第三方登錄過程詳解(最新推薦)
在ThirdAuthenticationFilter 類的attemptAuthentication()方法中,我們通過authType類型,然后創(chuàng)建對應(yīng)的Authentication實現(xiàn)來實現(xiàn)不同方式的登錄,下面給大家分享SpringSecurity集成第三方登錄過程,感興趣的朋友一起看看吧2024-05-05Java面試題 從源碼角度分析HashSet實現(xiàn)原理
這篇文章主要介紹了Java面試題 從源碼角度分析HashSet實現(xiàn)原理?,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下2019-07-07java 字符串內(nèi)存分配的分析與總結(jié)(推薦)
下面小編就為大家?guī)硪黄猨ava 字符串內(nèi)存分配的分析與總結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解
這篇文章主要介紹了SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下2019-12-12