欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java基于Servlet和JSP實現(xiàn)登錄功能

 更新時間:2024年11月19日 09:41:46   作者:Damon小智  
在 Web 開發(fā)中,用戶登錄功能是非常常見的模塊之一,本文將通過使用 Java Servlet 和 JSP 實現(xiàn)一個簡單的用戶登錄功能,展示如何創(chuàng)建登錄頁面、處理用戶登錄請求,并使用數(shù)據(jù)庫驗證用戶信息,需要的朋友可以參考下

引言

在 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)建新的 javaLoginServlet.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錯誤

解決方法:
① 檢查路徑是否正確;
TomcatDeployment 配置里 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.jarexternal 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)文章

  • java實現(xiàn)發(fā)送email小案例

    java實現(xiàn)發(fā)送email小案例

    這篇文章主要為大家詳細介紹了java實現(xiàn)發(fā)送email小案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java中Object類的常用方法小結(jié)

    Java中Object類的常用方法小結(jié)

    Java?Object?類是所有類的父類,位于?java.lang?包中,本文為大家整理了一些Object類的常用方法,感興趣的小伙伴可以跟隨小編一起學(xué)習一下
    2025-01-01
  • SpringBoot+JSON+AJAX+ECharts+Fiddler實現(xiàn)前后端分離開發(fā)可視化

    SpringBoot+JSON+AJAX+ECharts+Fiddler實現(xiàn)前后端分離開發(fā)可視化

    這篇文章主要介紹了SpringBoot+JSON+AJAX+ECharts+Fiddler實現(xiàn)前后端分離開發(fā)可視化,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-06-06
  • SpringSecurity集成第三方登錄過程詳解(最新推薦)

    SpringSecurity集成第三方登錄過程詳解(最新推薦)

    在ThirdAuthenticationFilter 類的attemptAuthentication()方法中,我們通過authType類型,然后創(chuàng)建對應(yīng)的Authentication實現(xiàn)來實現(xiàn)不同方式的登錄,下面給大家分享SpringSecurity集成第三方登錄過程,感興趣的朋友一起看看吧
    2024-05-05
  • 如何用Java實現(xiàn)啥夫曼編碼

    如何用Java實現(xiàn)啥夫曼編碼

    在開發(fā)手機程序時,總是希望壓縮網(wǎng)絡(luò)傳輸?shù)男畔?,以減少流量。本文僅以哈夫曼編碼為引導(dǎo),拋磚引玉,實現(xiàn)壓縮功能
    2013-08-08
  • Java面試題 從源碼角度分析HashSet實現(xiàn)原理

    Java面試題 從源碼角度分析HashSet實現(xiàn)原理

    這篇文章主要介紹了Java面試題 從源碼角度分析HashSet實現(xiàn)原理?,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-07-07
  • java 字符串內(nèi)存分配的分析與總結(jié)(推薦)

    java 字符串內(nèi)存分配的分析與總結(jié)(推薦)

    下面小編就為大家?guī)硪黄猨ava 字符串內(nèi)存分配的分析與總結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Java中Object類常用的12個方法(小結(jié))

    Java中Object類常用的12個方法(小結(jié))

    Java 中的 Object 方法在面試中是一個非常高頻的點,本文主要介紹了Java中Object類常用的12個方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解

    SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解

    這篇文章主要介紹了SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-12-12
  • Java集合TreeSet用法詳解

    Java集合TreeSet用法詳解

    本文詳細講解了Java集合TreeSet用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12

最新評論