最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

在 Web 開發(fā)中,用戶登錄功能是非常常見的模塊之一。本文將通過使用 Java Servlet 和 JSP 實(shí)現(xiàn)一個簡單的用戶登錄功能,展示如何創(chuà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輸入賬號密碼后跳轉(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)擊上方加號,新增一個 Web 模塊。

在這里插入圖片描述

點(diǎn)擊 OK。

在這里插入圖片描述

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

在這里插入圖片描述

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

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

在這里插入圖片描述

添加 Tomcat Server > Local。

在這里插入圖片描述

如果下方有紅色提示,請點(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

提示: 請將 your_username 和 your_password 替換為實(shí)際的數(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>

在這里插入圖片描述

五、啟動和測試

啟動項(xiàng)目。

在這里插入圖片描述

在瀏覽器中訪問項(xiàng)目根路徑: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 運(yùn)行的 jar 包來自其自身的libs文件夾,需要把 mysql-connector-java.jar 拷貝到 Tomcat 的安裝路徑下的 lib 文件夾下面。

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

相關(guān)文章

  • Spring啟動過程中實(shí)例化部分代碼的分析之Bean的推斷構(gòu)造方法

    Spring啟動過程中實(shí)例化部分代碼的分析之Bean的推斷構(gòu)造方法

    這篇文章主要介紹了Spring啟動過程中實(shí)例化部分代碼的分析之Bean的推斷構(gòu)造方法,實(shí)例化這一步便是在doCreateBean方法的?instanceWrapper?=?createBeanInstance(beanName,?mbd,?args);這段代碼中,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-09-09
  • Java中的抽象類和接口你了解嗎

    Java中的抽象類和接口你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Java中的抽象類和接口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java基礎(chǔ)題新手練習(xí)(三)

    Java基礎(chǔ)題新手練習(xí)(三)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Java Socket實(shí)現(xiàn)單線程通信的方法示例

    Java Socket實(shí)現(xiàn)單線程通信的方法示例

    這篇文章主要介紹了Java Socket實(shí)現(xiàn)單線程通信的方法,結(jié)合具體實(shí)例形式分析了java socket單線程通信的原理與客戶端、服務(wù)器端相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • java多線程編程之使用Synchronized塊同步變量

    java多線程編程之使用Synchronized塊同步變量

    我們可以通過synchronized塊來同步特定的靜態(tài)或非靜態(tài)方法。要想實(shí)現(xiàn)這種需求必須為這些特性的方法定義一個類變量,然后將這些方法的代碼用synchronized塊括起來,并將這個類變量作為參數(shù)傳入synchronized塊
    2014-01-01
  • Java FastJson使用教程

    Java FastJson使用教程

    這篇文章主要介紹了如何使用FastJson,幫助大家將 Java 對象轉(zhuǎn)換為 JSON 格式,感興趣的朋友可以了解下
    2020-10-10
  • Java Yml格式轉(zhuǎn)換為Properties問題

    Java Yml格式轉(zhuǎn)換為Properties問題

    本文介紹了作者編寫一個Java工具類來解決在線YAML到Properties轉(zhuǎn)換時屬性內(nèi)容遺漏的問題,通過遍歷YAML文件的樹結(jié)構(gòu),作者成功實(shí)現(xiàn)了屬性的完整轉(zhuǎn)換,總結(jié)指出,該工具類適用于多種數(shù)據(jù)類型,并且代碼簡潔易懂
    2024-12-12
  • 使用Spring @DependsOn控制bean加載順序的實(shí)例

    使用Spring @DependsOn控制bean加載順序的實(shí)例

    這篇文章主要介紹了使用Spring @DependsOn控制bean加載順序的實(shí)例講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中的Kotlin?內(nèi)部類原理

    Java中的Kotlin?內(nèi)部類原理

    這篇文章主要介紹了Java中的Kotlin?內(nèi)部類原理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-06-06
  • Spring @Bean注解的使用場景與案例實(shí)現(xiàn)

    Spring @Bean注解的使用場景與案例實(shí)現(xiàn)

    隨著SpringBoot的流行,我們現(xiàn)在更多采用基于注解式的配置從而替換掉了基于XML的配置,所以本篇文章我們主要探討基于注解的@Bean以及和其他注解的使用
    2023-03-03

最新評論

阜城县| 徐汇区| 西藏| 东丽区| 囊谦县| 花垣县| 长汀县| 靖西县| 富顺县| 温州市| 吉隆县| 都匀市| 麻阳| 靖安县| 平湖市| 金塔县| 平乐县| 刚察县| 新宾| 奎屯市| 揭东县| 宁乡县| 桐庐县| 新宾| 乡宁县| 龙门县| 凉山| 武宁县| 福安市| 开江县| 察哈| 陕西省| 石河子市| 虹口区| 东安县| 石泉县| 万年县| 大新县| 鲁甸县| 墨江| 西宁市|