Java web學習路徑預覽

Java web學習路徑預覽

(圖源:黑馬程序員)?

目錄

Java web學習路徑預覽

一、HTML、CSS、JS

1. HTML (HyperText Markup Language): 網頁的骨架

2. CSS (Cascading Style Sheets): 網頁的皮膚

3. JavaScript (JS): 網頁的行為

二、Ajax、Axios

1. Ajax(Asynchronous JavaScript and XML)

2. Axios(基于 Promise 的 HTTP 客戶端)

三、Vue、Element

1.Vue.js(Vue)

a、什么是Vue.js?

b、Vue的核心特點:

c、Vue的基本概念

2.Element(Element UI)?

a、什么是 Element UI?

b、為什么使用 Element?

四、前端工程化(Vue腳手架)

1、 什么是前端工程化?

2、 前端工程化的核心內容

3、Vue 腳手架(Vue CLI)

a. 什么是 Vue CLI?

b. Vue CLI 的核心功能

五、Maven?

1、Maven 在 Java Web 開發中的作用

依賴管理:

項目構建:

項目結構:

Web 應用打包:

2、Maven 在 Java Web 開發中的常用配置

依賴作用域(Dependency Scope):

倉庫配置(Repository):

插件配置(Plugin):

?六、SpringBoot

1、什么是 Spring Boot?

2、Spring Boot 的核心特性

自動配置(Auto-Configuration):

起步依賴(Starter Dependencies):

內嵌服務器(Embedded Servers):

命令行接口(Spring Boot CLI):

Actuator:

3、Spring Boot 的優勢

?七、MySQL

1、MySQL簡介

?2、MySQL的基本概念

?八、JDBC、Mybatis

1、JDBC(Java Database Connectivity)

a. 什么是JDBC?

b. 作用和特點

2、MyBatis(半自動化持久層框架)

a. 什么是MyBatis?

b. 主要特點

c. MyBatis的工作流程

3、SQL

a、什么是SQL?

b、SQL的核心概念

?c、SQL的主要類型和作用

?九、會話跟蹤技術(Cookie、Session、令牌技術(JWT))

1、會話跟蹤概述

a. 什么是會話跟蹤?

b. 為什么要進行會話跟蹤?

c. 主要的會話跟蹤技術

2、Cookie

a. 什么是Cookie?

b. Cookie的工作原理

c. Cookie的特點

d. Cookie的缺點

f. 使用場景

3、Session

a. 什么是Session?

b. Session的工作原理

c. Session的特點

d. Session的缺點

e. 使用場景

4、令牌技術(Token),以 JWT 為例

a. 什么是令牌(Token)?

b. JWT(JSON Web Token)的原理

c. JWT的工作流程

d. JWT的特點

f. JWT的缺點

g. 使用場景

?十、Filter、Interceptor(令牌的統一攔截校驗)

1、什么是Filter和Interceptor?

a. 過濾器(Filter)

b. 攔截器(Interceptor)

2、Filter和Interceptor的對比

3、在令牌(Token)校驗中的作用

十一、AOP

1、什么是AOP(面向切面編程)?

a. 定義

b. 核心思想

2、為什么需要AOP 在Java Web中?

3、AOP的核心概念

4、AOP的實現方式

a. 代理實現

b. 非代理實現

c. 框架支持

5、在Java Web中的AOP應用場景

一、HTML、CSS、JS

1. HTML (HyperText Markup Language): 網頁的骨架

  • 定義:?HTML 是一種標記語言,用于創建網頁的結構和內容。可以把它想象成蓋房子時的骨架。

  • 作用:

    • 定義網頁結構:?使用各種標簽(tag)來組織網頁的各個部分,例如標題、段落、列表、鏈接、圖像等。

    • 描述內容:?告訴瀏覽器網頁上應該顯示什么內容,例如文本、圖片、視頻等。

    • 創建鏈接:?使用?<a>?標簽創建超鏈接,將網頁連接到其他網頁或資源。

  • 基本語法:

    • HTML 文檔由一系列嵌套的標簽組成。

    • 標簽通常成對出現,包含開始標簽和結束標簽,例如?<p>這是一個段落</p>

    • 有些標簽是自閉合標簽,例如?<img src="image.jpg" />

    • 標簽可以擁有屬性,用于提供關于元素的額外信息,例如?<a href="https://www.example.com">鏈接</a>

2. CSS (Cascading Style Sheets): 網頁的皮膚

  • 定義:?CSS 是一種樣式表語言,用于控制網頁的視覺外觀和布局。可以把它想象成房子的裝修。

  • 作用:

    • 控制顏色、字體、大小、間距等:?定義網頁元素的樣式,使其更美觀。

    • 控制布局:?控制網頁元素的排列方式和位置,使其更易于閱讀和導航。

    • 實現響應式設計:?根據不同設備(例如電腦、手機、平板電腦)的屏幕尺寸調整網頁的布局和樣式。

  • 基本語法:

    • CSS 規則由選擇器和聲明塊組成。

    • 選擇器用于選擇要應用樣式的 HTML 元素。

    • 聲明塊包含一個或多個聲明,每個聲明由屬性和值組成,例如?color: blue;

  • 三種引入方式:

    • 內聯樣式:?直接在 HTML 標簽中使用?style?屬性,例如?<p style="color: red;">這是一個紅色段落</p>。 (不推薦,不利于維護)

    • 內部樣式表:?在 HTML 文檔的?<head>?標簽中使用?<style>?標簽,例如?<style>p { color: blue; }</style>。 (適用于小型項目)

    • 外部樣式表:?將 CSS 規則保存在單獨的?.css?文件中,然后在 HTML 文檔中使用?<link>?標簽引入,例如?<link rel="stylesheet" href="style.css">。 (推薦,便于維護和復用)

  • 常用選擇器:

    • 元素選擇器:?選擇所有指定的 HTML 元素,例如?p { ... }?選擇所有段落。

    • 類選擇器:?選擇具有指定 class 屬性的 HTML 元素,例如?.highlight { ... }?選擇所有 class 為 "highlight" 的元素。

    • ID 選擇器:?選擇具有指定 id 屬性的 HTML 元素,例如?#header { ... }?選擇 id 為 "header" 的元素。(一個頁面只能有一個id)

    • 屬性選擇器:?選擇具有指定屬性的 HTML 元素,例如?a[href] { ... }?選擇所有具有 href 屬性的鏈接。

    • 后代選擇器:?選擇指定元素的后代元素,例如?div p { ... }?選擇所有在 div 元素內的段落。

    • 子元素選擇器:?選擇指定元素的直接子元素,例如?div > p { ... }?選擇所有作為 div 元素直接子元素的段落。

3. JavaScript (JS): 網頁的行為

  • 定義:?JavaScript 是一種腳本語言,用于為網頁添加交互性和動態效果。可以把它想象成房子里的電器和智能設備。

  • 作用:

    • 處理用戶交互:?響應用戶的點擊、鼠標移動、鍵盤輸入等事件。

    • 修改網頁內容:?動態地更新網頁的內容,例如顯示新的文本、圖片、數據等。

    • 操作網頁樣式:?動態地改變網頁的樣式,例如改變顏色、大小、位置等。

    • 與服務器通信:?通過 AJAX 技術與服務器進行數據交互,例如獲取數據、提交表單等。

    • 創建動畫和游戲:?使用 JavaScript 可以創建各種動畫和游戲。

  • 基本語法:

    • JavaScript 是一種解釋型語言,不需要編譯即可運行。

    • JavaScript 代碼可以嵌入到 HTML 文檔中,也可以保存在單獨的?.js?文件中。

    • JavaScript 使用變量、函數、對象等概念來組織代碼。

  • 引入方式:

    • 內部腳本:?在 HTML 文檔的?<head>?或?<body>?標簽中使用?<script>?標簽,例如?<script>alert("Hello, world!");</script>

    • 外部腳本:?將 JavaScript 代碼保存在單獨的?.js?文件中,然后在 HTML 文檔中使用?<script>?標簽引入,例如?<script src="script.js"></script>?。 (推薦)

  • 常用功能:

    • DOM 操作:?通過 JavaScript 可以訪問和修改 HTML 文檔的結構(Document Object Model)。

    • 事件處理:?可以監聽和響應各種 HTML 事件,例如?clickmouseoversubmit?等。

    • AJAX:?可以使用 AJAX 技術與服務器進行異步數據交互。

    • 動畫:?可以使用 JavaScript 創建各種動畫效果。

二、Ajax、Axios

1. Ajax(Asynchronous JavaScript and XML)

定義:
Ajax 是一組在網頁中實現異步通信的技術(不是一種單一技術)。它允許網頁在不重新加載整個頁面的情況下,與服務器交換數據并更新部分網頁內容。

核心思想:

  • 使用 JavaScript 來向服務器發起請求(GET、POST等)

  • 服務器處理請求并返回數據(通常是 JSON、XML 或純文本)

  • JavaScript 接收數據后,動態更新網頁部分內容

實現方式:
最常用的方法是通過瀏覽器內置的?XMLHttpRequest?對象,或者使用現代瀏覽器中的?fetch?API(雖然?fetch?不是傳統的 Ajax,但很類似)。

特點:

  • 兼容所有主流瀏覽器

  • 需要更多的代碼管理請求和響應

  • 靈活但略復雜

2. Axios(基于 Promise 的 HTTP 客戶端)

定義:
Axios 是一個基于 Promise 的 JavaScript HTTP 客戶端庫,可以用來簡化 Ajax 請求的過程。它支持瀏覽器和 Node.js 環境。

為什么推薦使用 Axios:

  • API 簡潔、易用

  • 具有自動轉換 JSON 數據的功能

  • 支持請求和響應攔截器

  • 支持請求取消

  • 更好地處理錯誤和超時控制

  • 支持老舊瀏覽器(通過 polyfill)

優點:

  • API 簡潔易懂

  • 內部封裝了很多底層細節

  • 支持請求攔截和響應攔截,方便統一處理請求參數和返回數據

  • 自動處理 JSON 轉換

  • 支持取消請求、超時控制等高級功能

總結對比

特性

Ajax (XMLHttpRequest?/?fetch)

Axios

易用性

相對較復雜,需要手動處理 Promise 或回調

簡潔、易用的 API,基于 Promise

支持情況

所有現代瀏覽器,但少一些高級功能

支持所有主流瀏覽器和環境,功能更豐富

內部處理

需要自己處理數據轉換(如 JSON.parse)

自動轉換 JSON,處理方便

攔截器

需要自己實現回調函數

支持請求/響應攔截器

取消請求

需要自己實現(例如使用 AbortController)

原生支持請求取消

代碼量

稍多一些(尤其是 XMLHttpRequest)

簡潔很多

三、Vue、Element

1.Vue.js(Vue)

a、什么是Vue.js?

Vue.js,簡稱Vue,是一個漸進式的JavaScript框架,用于構建用戶界面和單頁面應用(SPA)。由尤雨溪(Evan You)于2014年開發,經過不斷優化,已成為最受歡迎的前端框架之一。

b、Vue的核心特點:
  • 漸進式框架:可以逐步采用,比如從引入庫開始使用其數據綁定和組件系統,然后逐步擴展到復雜的應用。

  • 響應式數據綁定:Vue 通過數據變化自動更新視圖,無需手動操作 DOM。

  • 組件化開發:把界面拆分成可復用的組件,提升開發效率和維護性。

  • 簡潔的模板語法:使用 HTML 風格的模板語法,便于理解和書寫。

  • 虛擬DOM:借助虛擬DOM實現高效的頁面渲染。

  • 豐富的生態系統:如 Vue Router(路由管理)、Vuex(狀態管理)、Vue CLI(腳手架工具)等。

c、Vue的基本概念
  • 實例(Vue Instance):每個 Vue 應用都是通過?new Vue()?創建的實例。

  • 模板(Template):定義 HTML 結構,支持數據綁定。

  • 數據(Data):存放頁面中需要動態變化的內容。

  • 指令(Directives):特殊的屬性,用來綁定數據或綁定事件(如?v-if,?v-for,?v-model?等)。

  • 組件(Components):封裝可復用的UI塊。

2.Element(Element UI)?

a、什么是 Element UI?

Element?是一款基于 Vue 2.x 的桌面端UI組件庫,提供豐富、多樣的UI組件,方便開發者快速搭建美觀的后臺管理界面。

  • 由餓了么(Eleme)團隊開發

  • 提供按鈕、表格、彈框、導航、表單等常用組件

  • 設計風格簡潔現代,易用且企業級

b、為什么使用 Element?
  • 快速構建界面:眾多預設好樣式和功能的組件

  • 組件豐富:支持大部分后臺常用界面元素

  • 易于擴展和定制:可以實現個性化風格

  • 與 Vue 結合緊密,開發體驗良好

總結對比
技術/工具作用說明
Vue.js構建響應式、組件化的前端用戶界面輕量、易學、官方生態完善,適合單頁面應用開發
Element UI基于 Vue 的UI組件庫,提供豐富的界面組件架構企業后臺界面,快速搭建漂亮、功能齊全的后臺管理系統

四、前端工程化(Vue腳手架)

1、 什么是前端工程化?

前端工程化是指利用軟件工程的原則和方法,結合前端開發的特點,構建高效、可維護和可擴展的前端應用的過程。它解決的是傳統 Web 開發中存在的問題:

  • 代碼組織混亂

  • 依賴管理困難

  • 構建部署繁瑣

  • 缺乏自動化測試

2、 前端工程化的核心內容

  • 模塊化(Modules):將代碼分割成小的、獨立的模塊,便于復用和維護。

  • 組件化(Components):將 UI 拆分成獨立的、可復用的組件,提高開發效率。

  • 規范化(Standards):統一代碼風格、提交規范,提高團隊協作效率。

  • 自動化(Automation):自動化構建、測試、部署,減少人工干預和出錯。

  • 性能優化(Performance Optimization):從代碼層面、構建層面、部署層面進行優化,提高應用加載速度和用戶體驗。

3、Vue 腳手架(Vue CLI)

a. 什么是 Vue CLI?

Vue CLI (Command Line Interface) 是一個官方提供的 Vue.js 項目腳手架,用于快速搭建 Vue 項目。它集成了 Webpack、Babel、ESLint 等工具,提供了一套完整的項目開發流程。

b. Vue CLI 的核心功能
  • 項目初始化:快速創建 Vue 項目,包含預配置好的開發環境。

  • 插件機制:通過插件擴展項目功能,如添加 Vue Router、Vuex、TypeScript 支持等。

  • 圖形化界面:提供圖形化管理界面,方便項目配置和依賴管理。

  • 熱重載(Hot Reloading):在代碼修改時,自動刷新頁面,提高開發效率。

  • 構建優化:自動優化代碼,如代碼壓縮、代碼分割、tree shaking 等,提高應用性能。

五、Maven?

1、Maven 在 Java Web 開發中的作用

在 Java Web 開發中,Maven 扮演著至關重要的角色,主要體現在以下幾個方面:

  1. 依賴管理:
    • Java Web 項目通常依賴大量的第三方庫(如 Spring、Hibernate、Servlet API 等)。

    • Maven 可以方便地聲明這些依賴,自動從中央倉庫或私有倉庫下載所需的 JAR 包,并管理依賴的版本沖突。

    • 避免了手動下載和管理 JAR 包的繁瑣過程,大大簡化了依賴管理。

  2. 項目構建:
    • Maven 提供了一套標準的項目構建流程,包括編譯、測試、打包、部署等階段。

    • 通過簡單的命令,可以自動化完成這些構建任務,無需手動編寫構建腳本。

    • 保證了構建的一致性和可重復性。

  3. 項目結構:
    • Maven 約定了一套標準的項目目錄結構,便于統一管理項目資源。

    • 例如,源代碼放在?src/main/java?目錄下,測試代碼放在?src/test/java?目錄下,Web 資源放在?src/main/webapp?目錄下。

    • 這種規范化的結構有助于團隊協作和項目維護。

  4. Web 應用打包:
    • Maven 可以將 Java Web 項目打包成 WAR (Web Application Archive) 文件,便于部署到 Web 服務器(如 Tomcat、Jetty)。

    • WAR 文件包含了 Web 應用的所有資源,如 Servlet、JSP、HTML、CSS、JavaScript 等。

2、Maven 在 Java Web 開發中的常用配置

  1. 依賴作用域(Dependency Scope):

    依賴作用域用于指定依賴的有效范圍。常用的作用域有:

    • compile:默認作用域,表示編譯、測試、運行都有效。

    • test:只在測試時有效。

    • provided:編譯和測試有效,運行時由容器提供(如 Servlet API)。

    • runtime:編譯時無效,運行時有效(如 JDBC 驅動)。

  2. 倉庫配置(Repository):
    • Maven 默認從中央倉庫下載依賴。

    • 可以配置遠程倉庫,從其他倉庫下載依賴。

  3. 插件配置(Plugin):
    • Maven 插件用于執行各種構建任務。

    • 可以配置插件的版本、參數等。

?六、SpringBoot

1、什么是 Spring Boot?

Spring Boot 是一個基于 Spring 框架的快速開發應用框架,它簡化了 Spring 應用的初始搭建和開發過程。Spring Boot 采用約定大于配置的理念,通過自動配置、內嵌服務器等方式,使得開發者可以更加專注于業務邏輯的開發,而無需過多關注繁瑣的配置。

2、Spring Boot 的核心特性

  1. 自動配置(Auto-Configuration)
    • Spring Boot 能夠根據項目中的依賴,自動配置 Spring 應用所需的各種組件。

    • 開發者無需手動配置大量的 Bean,只需引入相應的依賴即可。

    • 自動配置基于?@EnableAutoConfiguration?注解實現。

  2. 起步依賴(Starter Dependencies)
    • Spring Boot 提供了一系列的起步依賴,簡化了項目依賴的管理。

    • 起步依賴本質上是一組相關的依賴的集合,可以一鍵引入常用的依賴組合。

    • 例如,spring-boot-starter-web?包含了開發 Web 應用所需的常用依賴,如 Spring MVC、Tomcat 等。

  3. 內嵌服務器(Embedded Servers)
    • Spring Boot 可以將應用打包成可執行的 JAR 文件,并內嵌 Tomcat、Jetty 等 Web 服務器。

    • 開發者無需手動安裝和配置 Web 服務器,可以直接運行 JAR 文件啟動應用。

  4. 命令行接口(Spring Boot CLI)
    • Spring Boot CLI (Command Line Interface) 是一個命令行工具,可以快速創建 Spring Boot 項目、運行 Groovy 腳本等。

    • 可以使用?spring?命令來創建項目、運行應用。

  5. Actuator
    a.Spring Boot Actuator 提供了一系列的端點(Endpoints),用于監控和管理 Spring Boot 應用。

? ? ? ? ?b.可以通過 Actuator 端點查看應用的健康狀況、配置信息、指標數據等。

3、Spring Boot 的優勢

簡化配置:Spring Boot 采用約定大于配置的理念,大大簡化了 Spring 應用的配置。

快速開發:Spring Boot 提供了自動配置、起步依賴等特性,可以快速搭建 Spring 應用。

易于部署:Spring Boot 可以將應用打包成可執行的 JAR 文件,方便部署到各種環境。

監控管理:Spring Boot Actuator 提供了豐富的端點,用于監控和管理 Spring Boot 應用。

?七、MySQL

1、MySQL簡介

MySQL是一款開源的關系型數據庫管理系統(RDBMS),由Oracle公司維護。它以其高性能、易用性和廣泛應用在Web開發中而著稱,是Java Web開發中最常用的數據庫之一。

主要特點:

  • 支持SQL標準

  • 高性能和高可靠性

  • 支持事務管理

  • 豐富的存儲引擎(InnoDB、MyISAM等)

  • 可以與多種編程語言集成(Java、PHP、Python等)

?2、MySQL的基本概念

  • 數據庫(Database):存放一組相關聯的數據集合(類似一個文件夾)

  • 表(Table):數據庫中的數據存儲單位,類似Excel中的表格

  • 行(Row):表中的一條完整記錄

  • 列(Column):表中的一個字段,定義數據的屬性

  • 主鍵(Primary Key):唯一標識一條記錄

  • 外鍵(Foreign Key):關聯其他表的主鍵,實現數據關聯

?八、JDBC、Mybatis

1、JDBC(Java Database Connectivity)

a. 什么是JDBC?

JDBC(Java Database Connectivity)是Java提供的統一數據庫訪問接口標準。它允許Java程序連接各種關系型數據庫(如MySQL、Oracle、SQL Server等),執行SQL語句并處理結果。

b. 作用和特點
  • 作用:實現Java程序與數據庫之間的通信

  • 特點:

    • 依賴數據庫的JDBC驅動

    • 提供標準的API

    • 支持連接管理、執行SQL、檢索結果

    • 需要手動編寫SQL、處理ResultSet、管理事務等

2、MyBatis(半自動化持久層框架)

a. 什么是MyBatis?

MyBatis 是一個優秀的數據持久層(ORM)框架,避免繁瑣的JDBC編碼,通過映射文件(XML或注解)將SQL語句和Java對象關聯起來,讓開發者更加專注于SQL的書寫和邏輯實現。

b. 主要特點
  • SQL映射:開發者自己編寫模板化的SQL語句

  • 輕量級:沒有復雜的對象關系映射(相比Hibernate),更靈活

  • 支持動態SQL:通過XML或注解支持復雜條件,避免硬編碼

  • 與Spring等框架兼容性好

  • 良好的擴展性和可維護性

c. MyBatis的工作流程
  • 定義Java實體類(POJO)

  • 編寫映射文件(XML配置),定義SQL語句和映射關系

  • 創建SqlSession,通過映射接口調用SQL執行

  • 獲取結果映射為Java對象

關系與區別

特性JDBCMyBatis
簡介

Java原生數據庫API

半自動ORM框架,封裝JDBC操作
SQL編寫方式由開發者手動編寫SQLSQL由開發者自己寫在XML或注解中
易用性低,繁瑣,需手動管理連接和資源高,封裝JDBC細節,減少重復代碼
靈活性高,完全控制SQL和執行流程靈活,支持動態SQL,便于維護
配置復雜度低,但開發效率低需要配置映射文件和MyBatis配置,略復雜
性能高,但開發效率低取決于SQL寫法和配置,使用預編譯,性能不錯

3、SQL

a、什么是SQL?

SQL(Structured Query Language)是一種用于管理關系型數據庫的標準化查詢語言。它被設計用來操作和管理存儲在關系數據庫中的數據,包括數據的查詢、插入、更新、刪除以及數據庫結構的定義和管理。

特點:

  • 聲明式語言:描述“做什么”而非“怎么做”

  • 標準化:由ANSI(美國國家標準協會)制定,被廣泛支持

  • 用途廣泛:適用于各種關系型數據庫系統,如MySQL、PostgreSQL、Oracle、SQL Server等

b、SQL的核心概念

(1). 數據庫(Database)

存放一組相關數據的集合。

(2). 表(Table)

關系數據庫中的基本存儲單位,類似一個二維表格。

(3). 行(Row)

表中的一條記錄。

(4). 列(Column)

表中的字段,定義數據類型和屬性。

(5). 主鍵(Primary Key)

唯一標識一條記錄。

(6). 外鍵(Foreign Key)

用于關聯其他表的主鍵,實現表間關系。

?c、SQL的主要類型和作用

類型

作用

例子

數據定義語言(DDL)

定義數據庫結構(創建、修改、刪除)

CREATE、ALTER、DROP

數據操作語言(DML)

操作數據(插入、更新、刪除、查詢)

INSERT、UPDATE、DELETE、SELECT

數據控制語言(DCL)

控制訪問權限和事務管理

GRANT、REVOKE、COMMIT、ROLLBACK

數據查詢語言(DQL)

查詢數據

SELECT

?九、會話跟蹤技術(Cookie、Session、令牌技術(JWT))

1、會話跟蹤概述

a. 什么是會話跟蹤?

會話跟蹤指的是在 Web 應用程序中,服務器能夠識別并維護用戶的一系列請求(一個“會話”)。HTTP 協議是無狀態的,這意味著每次請求都是獨立的。因此,我們需要一些技術來識別用戶的身份,并在多次請求之間記住用戶的狀態信息,例如登錄狀態、購物車內容等。

b. 為什么要進行會話跟蹤?
  • 用戶身份驗證:判斷用戶是否已登錄。

  • 狀態保持:保持用戶的個性化設置、購物車信息等。

  • 用戶行為分析:跟蹤用戶在網站上的行為。

c. 主要的會話跟蹤技術
  • Cookie

  • Session

  • 令牌(Token):例如 JWT(JSON Web Token)

2、Cookie

a. 什么是Cookie?

Cookie 是一種存儲在用戶瀏覽器上的小型文本文件。當用戶訪問某個網站時,服務器可以設置 Cookie,并將其發送給瀏覽器保存。之后,用戶每次向該網站發送請求時,瀏覽器會自動將該 Cookie 附加到請求頭中,以便服務器識別用戶。

b. Cookie的工作原理
  1. 服務器通過 HTTP 響應頭 Set-Cookie 設置 Cookie。

  2. 瀏覽器接收到 Set-Cookie 后,將 Cookie 保存在本地。

  3. 下次瀏覽器向相同域名發送請求時,會自動將 Cookie 通過 HTTP 請求頭 Cookie 發送給服務器。

c. Cookie的特點
  • 存儲在客戶端:因此大小和數量受到限制

  • 簡單易用:在服務器端和客戶端都有現成的API

  • 明文存儲:安全性較差,易被篡改和竊取

  • 可以設置過期時間:決定 Cookie 的生命周期

d. Cookie的缺點
  • 安全性問題:易被竊取和篡改(可以通過HTTPS和HttpOnly屬性提高安全性)

  • 大小限制:通常限制在4KB左右

  • 數量限制:每個域名下的 Cookie 數量有限制

  • 隱私問題:可能被用于用戶跟蹤

f. 使用場景
  • 記住用戶登錄狀態(不推薦,安全性差)

  • 存儲用戶的個性化設置

  • 簡單的會話跟蹤

3、Session

a. 什么是Session?

Session 是一種將會話數據存儲在服務器端的技術。當用戶首次訪問網站時,服務器會創建一個 Session 對象,并為該 Session 分配一個唯一的 Session ID。然后,服務器會將該 Session ID 通過 Cookie 發送給瀏覽器保存。之后,用戶每次向服務器發送請求時,瀏覽器會自動將 Session ID 通過 Cookie 發送給服務器,以便服務器查找對應的 Session 對象,從而識別用戶。

b. Session的工作原理
  1. 用戶首次訪問時,服務器創建 Session 對象,并生成 Session ID。

  2. 服務器將 Session ID 通過 Set-Cookie 發送到客戶端瀏覽器。

  3. 瀏覽器保存 Session ID Cookie。

  4. 之后,瀏覽器每次發送請求時,都將 Session ID Cookie 附帶在請求頭中。

  5. 服務器接收到 Session ID 后,查找對應的 Session 對象。

c. Session的特點
  • 數據存儲在服務器端:更安全,存儲容量更大

  • 依賴Cookie:需要使用 Cookie 存儲 Session ID

  • 更安全:敏感信息存儲在服務器端

  • 可以設置超時時間:Session 在一段時間不活動后會自動失效

  • 服務器資源消耗:每個Session會占用服務器的存儲空間

d. Session的缺點
  • 依賴Cookie:如果客戶端禁用了 Cookie ,Session 將無法正常工作(可以使用 URL 重寫解決)

  • 服務器壓力:每個 Session 都會占用服務器的存儲空間

  • 分布式 Session 問題:在分布式系統中,需要解決 Session 共享和同步的問題(例如使用 Redis 或 Memcached 存儲 Session)

  • Session 過期問題:長時間不活動的 Session 會過期

e. 使用場景
  • 用戶登錄狀態管理

  • 存儲用戶的購物車信息

  • 存儲用戶的其他會話數據

4、令牌技術(Token),以 JWT 為例

a. 什么是令牌(Token)?

令牌是一種用于身份驗證和授權的字符串。與 Session 不同,令牌不需要服務器存儲狀態信息。當用戶登錄成功后,服務器會頒發一個令牌給客戶端。之后,客戶端每次請求都需要攜帶該令牌,服務器通過驗證令牌的有效性來確定用戶的身份。

b. JWT(JSON Web Token)的原理

JWT (JSON Web Token) 是一種常見的令牌格式。它是一個自包含的 JSON 對象,包含了用戶的身份信息和權限信息。JWT 通過數字簽名進行保護,可以防止篡改。JWT 的結構如下:

Header.Payload.Signature
  • Header:包含令牌類型和簽名算法。

  • Payload:包含用戶的身份信息(例如用戶ID、用戶名)和一些自定義聲明。

  • Signature:通過 Header 中指定的簽名算法對 Header 和 Payload 進行簽名,防止篡改。

c. JWT的工作流程
  1. 用戶登錄成功后,服務器創建 JWT,并將其發送給客戶端。

  2. 客戶端將 JWT 保存在本地(例如 localStorage 或 Cookie)。

  3. 之后,客戶端每次發送請求時,都將 JWT 附帶在請求頭中(通常是 Authorization 頭部)。

  4. 服務器接收到 JWT 后,驗證其有效性(例如驗證簽名、檢查過期時間)。

  5. 如果 JWT 有效,則認為用戶已登錄,并根據 JWT 中的信息進行授權。

d. JWT的特點
  • 無狀態:服務器不需要存儲 Session 信息,減輕服務器壓力

  • 自包含:JWT 包含了用戶的身份信息和權限信息

  • 可擴展:可以自定義 Payload 中的信息

  • 跨域支持:JWT 可以用于跨域身份驗證

  • 安全性:依賴于簽名算法的強度,需要妥善保管密鑰

f. JWT的缺點
  • 安全性問題

    • 如果密鑰泄露,所有 JWT 都可能被偽造

    • JWT 不適合存儲敏感信息(因為 Payload 是可解碼的)

    • 簽名算法強度需要足夠高

  • 令牌撤銷問題

    • 一旦 JWT 被頒發,就無法主動撤銷(除非在服務器端維護一個黑名單)

    • 通常需要設置較短的過期時間(例如幾分鐘或幾小時)

g. 使用場景
  • API 身份驗證:適用于 RESTful API 的身份驗證

  • 單點登錄(SSO):多個應用程序共享同一身份驗證服務

  • 微服務架構:服務之間的安全通信

總結

特性

Cookie

Session

JWT

存儲位置

客戶端

服務器端

客戶端

安全性

較差

較高

較高(依賴于簽名算法強度)

依賴性

依賴 Cookie

狀態

無狀態

有狀態

無狀態

適用場景

存儲少量非敏感信息,簡單會話跟蹤

用戶登錄,存儲會話數據

API 身份驗證,單點登錄

缺點

安全性差,大小和數量限制

依賴 Cookie,服務器壓力,分布式 Session 問題

密鑰管理,令牌撤銷問題

?十、Filter、Interceptor(令牌的統一攔截校驗)

1、什么是Filter和Interceptor?

a. 過濾器(Filter)
  • Java EE規范定義的,屬于Servlet規范的一部分。

  • 作用:對請求和響應進行預處理或后處理。

  • 特點:運行在Servlet容器中,責任范圍廣泛;可配置在web.xml中或使用注解。

  • 常用于:統一字符編碼設置、安全校驗(如token驗證)、日志記錄、請求統計等。

示意圖:

Client -> Filter -> Servlet/Controller -> Filter -> Response
b. 攔截器(Interceptor)
  • 常見于Spring MVC框架,是框架級別提供的機制。

  • 作用:在請求到達Controller之前(或之后)進行攔截和處理。

  • 特點:更緊密集成于框架內,提供更強大、更靈活的請求攔截能力。

示意圖:

Client -> Interceptor -> Controller -> Interceptor -> Response

2、Filter和Interceptor的對比

方面

Filter

Interceptor

位置

在Servlet層

在Spring MVC框架中的請求處理流程中

實現方式

實現?javax.servlet.Filter?接口

實現?HandlerInterceptor?接口(或繼承)

配置方式

web.xml配置或注解?@WebFilter

Spring配置類或注解?@Component?和?@Configuration

作用范圍

Web應用中全局或特定路徑請求

Spring MVC中的Controller請求

靈活性

較低,功能比較單一

更靈活,支持請求參數、模型綁定等操作

3、在令牌(Token)校驗中的作用

通常,令牌校驗(如JWT)要求:

  • 每個請求都攜帶有效的令牌(通常在請求頭Authorization中)

  • 服務器驗證令牌的有效性和合法性

  • 無效或缺失的令牌拒絕訪問(返回401 Unauthorized)

為了統一管理這一機制,你可以在Filter或Interceptor中實現:

  • 解析請求的Token

  • 驗證Token的有效性

  • 根據驗證結果決定放行或攔截

優勢:

  • 代碼集中,避免多處寫驗證邏輯

  • 易于維護和擴展

  • 有條件實現自動刷新Token、日志記錄等功能

十一、AOP

1、什么是AOP(面向切面編程)?

a. 定義

AOP(Aspect-Oriented Programming,面向切面編程)是一種編程范式,它通過將橫切關注點(Cross-cutting Concerns)從業務邏輯中抽離出來,封裝成“切面(Aspect)”,實現業務代碼的模塊化,提高代碼的可維護性、復用性和清晰度。

b. 核心思想
  • 橫切關注點(如日志、多事務、安全、性能監控、權限驗證等)單獨抽離出來,不散布在所有業務邏輯代碼中。

  • 使用切面(Aspect)定義這些橫切點(Join Points)上需要執行的代碼(Advice)。

  • 通過配置切點(Pointcuts)確定在哪些連接點(Join Points)切入Advice。

2、為什么需要AOP 在Java Web中?

  • 分離關注點:把日志記錄、權限驗證、事務管理等橫切邏輯與業務邏輯解耦,讓代碼更清晰。

  • 統一管理:集中管理如日志、事務等的切面,改動一次即可應用到所有相關代碼。

  • 增強功能:無需修改現有代碼,也能動態增強功能。

  • 優化開發效率:減少重復代碼,保持業務邏輯純粹。

3、AOP的核心概念

概念

說明

切面(Aspect)

定義橫切關注點的模塊,包含Advice和Pointcut,類似于“通知”或“增強”。

連接點(Join Point)

在程序執行過程中可以插入切面的點,比如方法調用、異常拋出等。

切點(Pointcut)

指定在哪些連接點上應用切面(或Advice),定義匹配表達式。

通知(Advice)

具體在切點處執行的代碼,比如前置通知、后置通知、環繞通知、異常通知等。

目標對象(Target Object)

被增強的對象或類,切面會在目標對象上應用。

增強(Aspect)

通常由切面(Aspect)和Advice組成,定義了切入點和增強邏輯。

4、AOP的實現方式

a. 代理實現
  • JDK 動態代理:只對實現了接口的類進行代理,性能開銷較低

  • CGLIB字節碼生成:對沒有接口的類進行代理(Spring默認使用此方式)

b. 非代理實現
  • 直接在代碼中嵌入切面邏輯(較少使用,違背了AOP思想)

c. 框架支持
  • Spring AOP:基于代理,支持聲明式AOP,配置簡便

  • AspectJ:強大的AOP框架,支持編譯時織入(LTW)、加載時織入(LWT)和運行時織入(RTW)

5、在Java Web中的AOP應用場景

  • 日志記錄:請求日志、方法調用日志

  • 權限校驗:校驗用戶是否有權限訪問某資源

  • 性能監控:統計方法執行時間

  • 事務管理:保證業務操作的原子性

  • 異常處理:統一異常捕獲和處理

  • 請求統計:記錄請求次數、來源等信息

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83497.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83497.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83497.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux、docker、git相關操作

1 linux 1.1解壓縮 1.1.1 zip zip xxx.zip file 把名為fle的文件壓縮成xxx.zip -r 遞歸壓縮&#xff1a;加上該選項才能壓縮文件夾 zip -r example_new.zip 示例集 # 新建壓縮包并命名為 example_new.zip zip -r xxx.zip file1 file2 dir1 將多個文件目錄壓成zip包 unzip fi…

Attention Is All You Need (Transformer) 以及Transformer pytorch實現

參考https://zhuanlan.zhihu.com/p/569527564 Attention Is All You Need (Transformer) 是當今深度學習初學者必讀的一篇論文。 一. Attention Is All You Need (Transformer) 論文精讀 1. 知識準備 機器翻譯&#xff0c;就是將某種語言的一段文字翻譯成另一段文字。 由…

深入淺出:Oracle 數據庫 SQL 執行計劃查看詳解(1)——基礎概念與查看方式

背景 在當今的軟件開發領域&#xff0c;盡管主流開發模式往往傾向于采用單表模式&#xff0c;力圖盡可能地減少表之間的連接操作&#xff0c;以期達到提高數據處理效率、簡化應用邏輯等目的。然而&#xff0c;對于那些已經上線運行多年的運維老系統而言&#xff0c;它們內部往…

每天掌握一個Linux命令 - fail2ban

Linux 命令工具 fail2ban 使用指南 目錄 Linux 命令工具 fail2ban 使用指南一、工具概述二、安裝方式1. 包管理器安裝&#xff08;推薦&#xff09;Debian/Ubuntu 系統CentOS/RHEL 系統Arch Linux 系統 2. 手動編譯安裝&#xff08;適用于自定義需求&#xff09; 三、核心功能四…

互聯網大廠智能體平臺體驗筆記字節扣子羅盤、阿里云百煉、百度千帆 、騰訊元器、TI-ONE平臺、云智能體開發平臺

互聯網大廠 字節扣子、阿里云百煉、百度千帆 、騰訊元器、TI-ONE平臺、云智能體開發平臺 體驗 開始動手 了解 智能體&#xff0c;發現已經落后時代太遠 光頭部互聯網大廠對開 公開的平臺就已經這么多&#xff0c;可以學習和了解&#xff0c;相關的信息 整理了對應的平臺地址…

ansible-playbook 進階 接上一章內容

1.異常中斷 做法1&#xff1a;強制正常 編寫 nginx 的 playbook 文件 01-zuofa .yml - hosts : web remote_user : root tasks : - name : create new user user : name nginx-test system yes uid 82 shell / sbin / nologin - name : test new user shell : gete…

LRC and VIP

//首先排除所有數相等的情況,再把最大值放在一個組&#xff0c;那么最大值的gcd就等于其本身&#xff0c;再判斷剩下的gcd是否等于最大值就可以了 #include<bits/stdc.h> using namespace std;const int N1e3100; int a[N]; map<int,int>mapp; int main(){int t;ci…

企業應用AI對向量數據庫選型思考

一、向量數據庫概述 向量數據庫是一種專門用于存儲和檢索高維向量數據的數據庫系統&#xff0c;它能夠高效地處理基于向量相似性的查詢&#xff0c;如最近鄰搜索等&#xff0c;在人工智能、機器學習等領域的應用中發揮著重要作用&#xff0c;為處理復雜的向量數據提供了有力的…

設計模式——迭代器設計模式(行為型)

摘要 本文詳細介紹了迭代器設計模式&#xff0c;這是一種行為型設計模式&#xff0c;用于順序訪問集合對象中的元素&#xff0c;同時隱藏集合的內部結構。文章首先定義了迭代器設計模式并闡述了其核心角色&#xff0c;包括迭代器接口、具體迭代器、容器接口和具體容器。接著&a…

Java8 list集合根據屬性分組

在Java8中&#xff0c;可以使用Collectors.groupingBy方法對List集合根據屬性進行分組。以下是一個完整的示例&#xff0c;展示如何根據對象的不同屬性分組。 根據對象屬性分組 假設有一個Student類&#xff0c;包含name、age和grade屬性&#xff1a; public class Student …

更新已打包好的 Spring Boot JAR 文件中的 class 文件

# 1. 解壓原始 JAR unzip -q original-app.jar -d temp # 2. 替換 class 文件 cp ~/projects/new-classes/*.class temp/BOOT-INF/classes/com/example/ # 3. 保留原始清單 cp temp/META-INF/MANIFEST.MF . # 4. 重新打包 jar -cf0m new-app.jar MANIFEST.MF -C temp/ . # …

《HelloGitHub》第 110 期

興趣是最好的老師&#xff0c;HelloGitHub 讓你對開源感興趣&#xff01; 簡介 HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。 github.com/521xueweihan/HelloGitHub 這里有實戰項目、入門教程、黑科技、開源書籍、大廠開源項目等&#xff0c;涵蓋多種編程語言 Python、…

當 “歐洲版 Cursor” 遇上安全危機

在 AI 編程助手蓬勃發展的當下&#xff0c;安全問題正成為行業不容忽視的隱憂。近期&#xff0c;AI 編程助手公司 Replit 與號稱 “歐洲版 Cursor” 的 Lovable 之間&#xff0c;因安全漏洞問題掀起了一場風波&#xff0c;引發了業界的廣泛關注。? Replit 的員工 Matt Palmer…

centos掛載目錄滿但實際未滿引發系統宕機

測試服務器應用系統突然掛了&#xff0c;經過排查發現是因為磁盤“滿了”導致的&#xff0c;使用df -h查看磁盤使用情況/home目錄使用率已經到了100%,但使用du -sh /home查看發現實際磁盤使用還不到1G&#xff0c;推測有進程正在寫入或占用已刪除的大文件&#xff08;Linux 系統…

乾坤qiankun的使用

vue2 為主應用 react 為子應用 在項目中安裝乾坤 yarn add qiankun # 或者 npm i qiankun -Svue主應用 在main.js中新增 &#xff08;需要注意的是路由模型為history模式&#xff09; registerMicroApps([{name: reactApp,entry: //localhost:3011,container: #container,/…

PostgreSQL的擴展 auth_delay

PostgreSQL的擴展 auth_delay auth_delay 是 PostgreSQL 提供的一個安全相關擴展&#xff0c;主要用于防止暴力破解攻擊。它通過在認證失敗后引入人為延遲來增加暴力破解的難度。 一、擴展基礎 功能&#xff1a;在認證失敗后增加延遲目的&#xff1a;減緩暴力破解和字典攻擊…

Web前端為什么要打包?Webpack 和 Vite 如何助力現代開發?

一. 為什么要使用框架庫? 1.1 傳統網頁與現代前端的差異 在最早期的網頁開發中,我們只需要寫幾個.html文件,配上.css和.js文件,瀏覽器直接加載就能展現頁面,每個文件都是獨立的靜態資源,簡單且直觀 但現在網站越來越復雜了: 需要用到最新的js語法(比如ES6)使用框架(Vue…

使用pdm+uv替換poetry

用了好幾年poetry了&#xff0c;各方面都還挺滿意&#xff0c;就是lock實在太慢&#xff1b; 已經試用pdmuv一段時間了&#xff0c;確實是快&#xff0c;也基本能覆蓋poetry的功能。 至于為什么用pdmuv&#xff0c;而不是只用uv&#xff0c;原因很多&#xff0c;有興趣的可以…

java后端生成心電圖-jfreechart

用jfreechart生成心電圖 先上成功的圖片 上代碼 1.導入包 implementation org.jfree:jfreechart:1.5.4implementation org.jfree:jcommon:1.0.242.實現代碼 對數據進行濾波 轉換單位 package com.shinrun.infrastructure.util;import java.util.ArrayList; import java.ut…

微軟Build 2025:Copilot Studio升級,解鎖多智能體協作未來

微軟Build 2025大會圓滿落幕&#xff0c;作為年度科技盛會&#xff0c;它一直是開發與AI技術突破性創新的重要展示平臺。對于工程師、創作者和領域專家來說&#xff0c;這是了解微軟生態未來動向的關鍵時刻。今年&#xff0c;Microsoft Copilot Studio推出了一系列新功能&#…