亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

引言

在 Web 開發(fā)中,用戶登錄功能是非常常見的模塊之一。本文將通過使用 Java Servlet 和 JSP 實(shí)現(xiàn)一個(gè)簡單的用戶登錄功能,展示如何創(chuàng)建登錄頁面、處理用戶登錄請(qǐng)求,并使用數(shù)據(jù)庫驗(yàn)證用戶信息。還將介紹如何在 IntelliJ IDEA 中創(chuàng)建 Servlet 項(xiàng)目,引入 MySQL 連接器,并將 login.jsp 設(shè)置為項(xiàng)目的默認(rèn)主頁。

一、開發(fā)目標(biāo)

1. 開發(fā)環(huán)境

  • 開發(fā)工具: IntelliJ IDEA
  • 開發(fā)語言: Java
  • Web 容器: Apache Tomcat
  • 數(shù)據(jù)庫: MySQL
  • JDK 版本: JDK 8 或以上
  • 依賴管理: Maven

2. 目標(biāo)功能

實(shí)現(xiàn)用戶在login.jsp輸入賬號(hào)密碼后跳轉(zhuǎn)到result.jsp的結(jié)果頁,并提示登錄是否成功。

3. 目標(biāo)項(xiàng)目結(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 項(xiàng)目

1. 創(chuàng)建 Maven 項(xiàng)目

打開 IntelliJ IDEA,選擇 New Project,填寫項(xiàng)目名稱,選擇 Maven,點(diǎn)擊 Create。

在這里插入圖片描述

File 菜單欄里選擇 Project Structure。

在這里插入圖片描述

Project Settings 選擇 Modules,點(diǎn)擊上方加號(hào),新增一個(gè) Web 模塊。

在這里插入圖片描述

點(diǎn)擊 OK。

在這里插入圖片描述

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

在這里插入圖片描述

2. 配置 Tomcat 服務(wù)器

啟動(dòng)按鈕旁邊,點(diǎn)擊 Edit Configurations。

在這里插入圖片描述

添加 Tomcat Server > Local

在這里插入圖片描述

如果下方有紅色提示,請(qǐng)點(diǎn)擊 Fix

在這里插入圖片描述

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

在這里插入圖片描述

后面全部點(diǎn)擊 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>

右鍵點(diǎn)擊項(xiàng)目根目錄,選擇 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

提示: 請(qǐng)將 your_username 和 your_password 替換為實(shí)際的數(shù)據(jù)庫賬號(hào)、密碼。

在這里插入圖片描述

四、編寫登錄頁面與接口代碼

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">賬號(hào):</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", "賬號(hào)或密碼錯(cuò)誤!");
        }
        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;
    }
}

新建的代碼會(huì)有報(bào)錯(cuò),我們需要在 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)沒有報(bào)錯(cuò)了。

在這里插入圖片描述

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>

在這里插入圖片描述

五、啟動(dòng)和測試

啟動(dòng)項(xiàng)目。

在這里插入圖片描述

在瀏覽器中訪問項(xiàng)目根路徑:http://localhost:8080/

看到我們首頁自動(dòng)跳轉(zhuǎn)的登錄頁。

在這里插入圖片描述

輸入錯(cuò)誤的賬號(hào)或密碼時(shí),顯示 "賬號(hào)或密碼錯(cuò)誤!"

在這里插入圖片描述

輸入正確的賬號(hào)密碼時(shí),顯示 "登錄成功!"

在這里插入圖片描述

六、常見問題

1. jsp頁面報(bào)404錯(cuò)誤

解決方法:
① 檢查路徑是否正確;
TomcatDeployment 配置里 Application context 的路徑設(shè)置為 /(參考文章里配置 Tomcat 的最后一步)

2. /Login接口報(bào)404錯(cuò)誤

解決方法:
① 檢查接口上方注解內(nèi)url是否正確;
web.xml 文件是否正確配置(參考第四章第4節(jié)配置文件)

3. 連接不上數(shù)據(jù)庫

解決方法:
① 檢查賬號(hào)、密碼、數(shù)據(jù)庫連接信息 (db.properties) 有沒有寫錯(cuò);
Tomcat 運(yùn)行的 jar 包來自其自身的libs文件夾,需要把 mysql-connector-java.jar 拷貝到 Tomcat 的安裝路徑下的 lib 文件夾下面。

mysql-connector-java.jarexternal libraries 目錄下,它是由 Maven 自動(dòng)導(dǎo)入的。

在這里插入圖片描述

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

在這里插入圖片描述

重新啟動(dòng)項(xiàng)目,即可順利連接數(shù)據(jù)庫。

以上就是Java基于Servlet和JSP實(shí)現(xiàn)登錄功能的詳細(xì)內(nèi)容,更多關(guān)于Java Servlet和JSP登錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java集合TreeSet用法詳解

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

最新評(píng)論