Tomcat的部署、單體架構、session會話、spring

一、Tomcat的部署

二.web項目在tomcat服務中如何運行:

1.web項目源碼部署在服務器的webapps目錄里面

2.將web項目打包(war),部署在服務器的webapps目錄里面。

三 單體架構和前后端分離

單體架構是將所有功能模塊(包括前端界面、后端邏輯、數據庫交互等)打包成一個獨立的應用程序,部署在單一服務器上。例如早期的 Java Web 項目(JSP+Servlet+MySQL)、PHP 項目(PHP+HTML+MySQL)等。

前后端分離架構將應用拆分為前端后端兩個獨立的部分:

  • 前端:負責用戶界面(UI)和交互邏輯,通過瀏覽器或客戶端運行(如 Vue、React、Angular 開發的單頁應用)。
  • 后端:負責業務邏輯和數據處理,以 API 接口(如 RESTful API、GraphQL)的形式向前端提供數據。
  • 前后端通過 HTTP/HTTPS 協議通信(如前端用 Axios 調用后端 API),后端不參與頁面渲染。

? ? ? ?前后端分析詳解

四、Session會話

在 Web 開發中,Session 會話是一種服務器端的機制,用于跟蹤和識別來自同一客戶端的多次請求,解決 HTTP 協議 “無狀態” 的問題。通過 Session,服務器可以在多個請求之間保持用戶的狀態信息(如登錄狀態、購物車內容等)。

一、核心概念

  1. HTTP 無狀態
    每次 HTTP 請求都是獨立的,服務器無法自動識別 “兩次請求是否來自同一用戶”。例如用戶登錄后訪問其他頁面,服務器無法直接知道該用戶已登錄。

  2. Session 的作用
    服務器為每個客戶端創建一個唯一的 “會話標識”,并在多次請求間保持這個標識,從而 “記住” 用戶狀態。

二、Session 的工作流程

  1. 創建 Session
    當用戶首次訪問服務器時,服務器自動創建一個Session對象,并為其分配唯一的Session ID(如JSESSIONID=123456)。

  2. 存儲 Session ID
    服務器通過CookieSession ID發送到客戶端瀏覽器(默認保存在內存中,瀏覽器關閉后失效)。

  3. 傳遞 Session ID
    客戶端后續每次請求時,會自動通過 Cookie 將Session ID帶回服務器。

  4. 識別 Session
    服務器根據Session ID查找對應的Session對象,獲取存儲的用戶狀態數據。

三、Session 的代碼實現(以 Java Servlet 為例)

1. 獲取或創建 Session
// 在Servlet中獲取當前請求的Session
// 參數false表示:若Session不存在則返回null(不創建新Session)
// 參數true(默認)表示:若Session不存在則創建新Session
HttpSession session = request.getSession();// 或顯式指定
HttpSession session = request.getSession(true); // 創建新Session(若不存在)
HttpSession session = request.getSession(false); // 返回null(若不存在)
2. 存儲和獲取 Session 數據
// 存儲數據到Session(類似Map,鍵值對存儲)
session.setAttribute("username", "張三"); // 存儲用戶名
session.setAttribute("isLogin", true);   // 存儲登錄狀態// 從Session獲取數據
String username = (String) session.getAttribute("username");
Boolean isLogin = (Boolean) session.getAttribute("isLogin");// 移除數據
session.removeAttribute("username");

3. Session 的生命周期管理
// 獲取Session ID
String sessionId = session.getId();// 設置Session超時時間(單位:秒,默認30分鐘)
session.setMaxInactiveInterval(1800); // 30分鐘// 手動銷毀Session(如用戶退出登錄)
session.invalidate();

?五、Spring

一.什么是spring
1.spring是一個輕量級的javaEE開發框架
2.spring是一個開源的框架


二.spring框架的搭建
1.導入spring的依賴包
spring-context(需要)
2.創建spring的配置文件(XML)

三.spring的IOC
1.IOC:控制反轉
Spring IOC(Inversion of Control,控制反轉)是 Spring 框架的核心思想和核心功能之一,
它徹底改變了傳統 Java 應用中對象的創建和管理方式,主要體現為 “將對象的創建、依賴關系的
維護權從代碼中轉移到容器中”。
控制:指的是對象的創建和管理
反轉:指的是對象的創建和管理的控制權發生了反轉,由spring容器維護

? ?SpringIOC使用:
1.項目中創建類
2.將類注入springIOC容器
3.由springIOC容器以解耦的方式,創建對象

四.Demo2與Demo3的區別
Demo2 ? ? ? ? ? ? ? ? ? ? ? Demo3
BeansFactory ? ? ? ? ? ? ? ApplicationContext
getBean(key) ? ? ? ? ? ? ? getBean(id)
beans.properties ? ? ? ? ? springconfig.xml

這個類是一個簡單的工廠類(BeanFactory),主要用于通過配置文件動態創建 Java 對象(通常稱為 "Bean"),這是一種典型的工廠模式控制反轉(IoC)?思想的實現。

package com.apesource.factory;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class BeanFactory {static Properties properties=null;// 靜態屬性,用于存儲從配置文件加載的鍵值對static InputStream is=null; // 靜態輸入流,用于讀取配置文件static {// 靜態代碼塊,在類加載時執行,確保配置文件只加載一次try {properties=new Properties();// 初始化 Properties 對象// 通過類加載器從類路徑獲取配置文件的輸入流is=BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");properties.load(is);//加載配置文件內容到 Properties 對象} catch (IOException e) {throw new RuntimeException(e);}}//按照要求獲取對象// 核心方法:根據配置文件中的鍵獲取對應的對象實例public static Object getBean(String key){try {String path=properties.getProperty(key);// 從配置中獲取類的全限定名return Class.forName(path).newInstance();} catch (Exception e) {return null;}}
}

這段代碼是一個使用 Spring 框架的測試類,主要功能是通過 Spring 的 IOC(控制反轉置)容器獲取并使用對象,展示了 Spring 框架的核心特性之一 —— 依賴注入。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--將類注入springIOC容器語法:<bean id="唯一標識" class="包名.類名"></bean>--><bean id="daoImp" class="com.apesource.dao.UserDaoImp"></bean><bean id="date" class="java.util.Date"></bean></beans>
package com.apesource;import com.apesource.dao.IUserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.Date;public class Test01 {public static void main(String[] args) {//1.加載spring主配值文件 獲取springIOC容器核心對象ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springconfig.xml");//2.向spring容器中索取對象IUserDao dao =(IUserDao) applicationContext.getBean("daoImp");dao.save();Date date=(Date) applicationContext.getBean("date");System.out.println(date);}
}

這段代碼體現了 Spring 框架的核心思想:

對象的創建不再由開發者手動通過new關鍵字創建,而是由 Spring 容器負責

對象之間的依賴關系由 Spring 容器管理和注入

當需要更換實現類時,只需修改配置文件springconfig.xml,無需修改 Java 代碼,實現了解耦

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

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

相關文章

海康威視視覺算法崗位30問及詳解

海康威視視覺算法崗位30問及詳解 前言 視覺算法工程師是人工智能領域的熱門崗位&#xff0c;尤其在安防、自動駕駛、工業檢測等行業有著廣泛應用。海康威視作為行業龍頭&#xff0c;對視覺算法崗位的要求較高&#xff0c;面試問題既考察基礎理論&#xff0c;也關注工程實現。本…

14.7 Alpaca格式深度解析:3倍指令準確率提升的LLM微調秘訣

文章目錄 Alpaca格式深度解析:3倍指令準確率提升的LLM微調秘訣 指令微調格式:Alpaca Format 深度解析 14.3.1 Alpaca 格式誕生背景與技術價值 14.3.2 Alpaca 格式結構解析 14.3.3 實戰 Dolly-15K 數據轉 Alpaca 格式 14.3.4 Alpaca 格式的工程化實踐 14.3.5 格式擴展與挑戰應…

42.sentinel實現線程隔離

線程隔離有兩種實現方式: 1.線程池隔離 優點: 1.支持主動超時,線程池中的線程都是可控的,可以停掉某個線程。 2.支持異步調用,每個請求都是一個獨立的線程,線程之間不受影響。 缺點: 線程的額外開銷比較大 適用場景: 低扇出(一個微服務,不會依賴很多微服務)…

【過擬合和欠擬合】——深度學習.全連接神經網絡

目錄 1 概念認知 1.1 過擬合 1.2 欠擬合 1.3 如何判斷 2 解決欠擬合 3 解決過擬合 3.1 L2正則化 3.1.1 數學表示 3.1.2 梯度更新 3.1.3 作用 3.1.4 代碼實現 3.2 L1正則化 3.2.1 數學表示 3.2.2 梯度更新 3.2.3 作用 3.2.4 與L2對比 3.2.5 代碼實現 3.3 Drop…

Java設計模式之行為型模式(備忘錄模式)應用場景分析

最近看到一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站 一、用戶交互與編輯操作 文本編輯器撤銷/重做 場景描述&#xff1a;用戶編輯文檔時&#xff0c;可通過CtrlZ撤銷誤操作&#xff0c;或通過Ctr…

5.Java的4個權限修飾符

1.private&#xff08;私有訪問權限&#xff09;最嚴格的訪問修飾符&#xff0c;它限定被修飾的成員僅能在聲明它的當前類內部訪問。其他任何外部類都無法直接訪問該成員。作用&#xff1a;強制封裝&#xff0c;確保類內部實現細節的隱藏性和數據安全性2.默認權限&#xff08;包…

Linux入門介紹

目錄 一、環境 二、Linux發展歷史 1、計算機 2、操作系統 四、認識Linux的 內核版本名稱 一、環境 一般是Centos 7 Ubuntu 20.04 / 22.04 前者已經停止更新與維護&#xff0c;但很多公司還在使用前者 二、Linux發展歷史 1、計算機 1945年 2.14---埃尼阿克---軍事用處&…

spring boot2升級boot3

spring boot2升級boot3 整體流程如下 1、借助于開源的自動化代碼重構工具OpenRewrite&#xff0c;快速地進行代碼重構等 2、相關坐標升級更改 3、配置文件屬性更改 4、打包、構建與運行驗證 1. 前期準備工作第一步&#xff1a;確保升級之前項目是可編譯運行的第二步&#xff1a…

mac終端設置代理

在Mac上配置終端走代理&#xff0c;需設置終端&#xff08;如zsh或bash&#xff09;使用HTTP/HTTPS/SOCKS代理&#xff0c;以便命令行工具&#xff08;如curl、git、npm&#xff09;通過代理訪問網絡。以下是詳細步驟&#xff0c;適用于macOS 10.15及以上版本。 前提條件 代理服…

VSTO Excel中打開WinForm.ShowDialog()后,如果要使用當前的wb.Application在后臺操作其他Excel文件(保持隱藏狀態)

在VSTO Excel中打開WinForm.ShowDialog()后&#xff0c;如果要使用當前的wb.Application在后臺操作其他Excel文件&#xff08;保持隱藏狀態&#xff09;&#xff0c;可以通過以下幾種方式實現&#xff1a; 方法一&#xff1a;設置Application屬性控制可見性 // 在WinForm中獲取…

【網絡安全】DDOS攻擊

如果文章不足還請各位師傅批評指正&#xff01;你有沒有過這種經歷&#xff1a;雙 11 搶券時頁面卡成幻燈片&#xff0c;游戲團戰突然全員掉線&#xff0c;刷視頻時進度條永遠轉圈圈&#xff1f;除了 “網渣”&#xff0c;可能還有個更糟的原因 —— 你正被 DDoS 攻擊 “堵門”…

第9天 | openGauss中一個表空間可以存儲多個數據庫

接著昨天繼續學習openGauss,今天是第9天了。今天學習內容是o一個數據庫可以存儲在多個表空間中。 老規矩&#xff0c;先登陸墨天輪為我準備的實訓實驗室 rootmodb:~# su - omm ommmodb:~$ gsql -r作業要求 1.創建表空間newtbs1 omm# CREATE TABLESPACE newtbs1 RELATIVE LOCATI…

H3C路由器模擬PPPOE撥號

拓撲簡圖 效果圖 PPPoE服務器端腳本 1. 基礎配置 system-view sysname PPPoE-Server # 可選,設置設備名稱2. 創建本地用戶(認證賬號)? local-user pppuser class network # 創建網絡類用戶 password simple 123456 # 設置密碼(PAP/CHAP共用) service-type ppp #

Github Actions Workflows 上傳 Dropbox

一、注冊 訪問 https://www.dropbox.com/register選擇 "個人" 如果想免費使用&#xff0c;一定要選擇 “繼續使用2GB的Dropbox Basic 套餐”&#xff0c;如下&#xff1a; 二、在 Dropbox 中 創建app 需要去注冊的郵箱中驗證一下郵箱.訪問 https://www.dropbox.com…

生產管理系統實現生產全過程可視化

隨著現代工業的不斷發展&#xff0c;智能制造、數字化轉型已成為企業提高競爭力的重要途徑。生產管理作為企業運營的核心環節&#xff0c;直接關系到產品質量、生產效率以及成本控制。傳統的生產管理方式大多依賴手工記錄和經驗管理&#xff0c;存在信息滯后、數據不一致、響應…

CSS實現背景色下移10px

眾所周知,背景顏色是不能移動的,通常是填充滿當前容器。 不過可以想想其它辦法。。 ?? 利用css3的線性屬性linear,在垂直方向向下推要移動的距離設成透明顏色,能在視覺上巧妙實現下移的效果。 .title {height: 20px;background: linear-gradient(to bottom,rgba(255, …

訪問 gitlab 跳轉 0.0.0.0

1、檢查防火墻是否關閉2、檢查服務器端口是否被占用3、檢查服務器是否對外開放80端口&#xff08;gitlab 默認使用80端口&#xff09;以阿里云服務器為例如果沒有SSH 、HTTP、HTTPS 開放&#xff0c;需要增加規則進行添加點擊確定即可。

Kotlin集合與空值

我們已經學習了 Kotlin 中的空安全&#xff08;null safety&#xff09;。在本節中&#xff0c;我們將討論如何處理集合中的空值&#xff08;null&#xff09;&#xff0c;因為集合比其他數據類型更復雜。我們還將討論如何處理可空元素時常用的便利方法。 集合與空值 可空集合和…

nextjs編程式跳轉

Next.js 中&#xff0c;你可以通過多種方式實現編程式導航&#xff08;即通過代碼而非 <Link> 組件跳轉頁面&#xff09;。以下是完整的實現方法&#xff1a; 1. 使用 useRouter Hook&#xff08;函數組件&#xff09; 這是最常用的方法&#xff0c;適用于函數組件&#…

Git Remote命令介紹:遠程倉庫管理

一、Git Remote 是什么 git remote主要用于管理遠程倉庫&#xff0c;可以輕松地與遠程倉庫進行交互&#xff0c;實現代碼的共享與同步 。 二、Git Remote 的作用 &#xff08;一&#xff09;連接橋梁 假設你正在參與一個大型的 Web 應用開發項目&#xff0c;團隊成員分布在…