【JavaWeb】基本概念、web服務器、Tomcat、HTTP協議

目錄

  • 1. 基本概念
    • 1.1 基本概念
    • 1.2 web應用程序
    • 1.3 靜態web
    • 1.4 動態web
  • 2. web服務器
  • 3. tomcat詳解
    • 3.1 安裝
    • 3.2 啟動
    • 3.3 配置
      • 3.3.1 配置啟動的端口號
      • 3.3.2 配置主機的名稱
      • 3.3.3 其他常用配置項
        • 日志配置
        • 數據源配置
        • 安全配置
    • 3.4 發布一個網站
  • 4. Http協議
    • 4.1 什么是http
    • 4.2 http的兩個時代
    • 4.3 http請求
    • 4.4 http響應

1. 基本概念

1.1 基本概念

  1. 靜態web:html,css(提供給所有人看的數據,始終不會發生變化)
  2. 動態web:Servlet/JSP,ASP,PHP,淘寶等幾乎所有的網站
    (提供給所有人看的數據,始終會發生變化,每個人在不同時間,不同地方看到的都不同)

1.2 web應用程序

web應用程序:可以提供瀏覽器訪問的程序

  • a.html、b.html等多個web資源,這些web資源可以被外界訪問,對外界提供服務。
  • 你們能訪問到的任何一個頁面或者資源,都存在于這個世界的某一個角落的計算機上。
  • URL:統一資源定位符。
  • 這個統一的web資源會被放在同一個文件夾下,web應用程序—>Tomcat:服務器。
  • web應用程序編寫完畢后,若想提供給外界訪問:需要一個服務器來統一管理。

1.3 靜態web

_ .htm, _ .html,這些都是網頁的后綴,如果服務器上一直存在這些東西,我們就可以直接進行讀取。

畫板

1.4 動態web

頁面會動態展示:Web的頁面展示的效果因人而異。

畫板

2. web服務器

服務器是一種被動的操作,用來處理用戶的一些請求和給用戶一些響應信息。
** IIS ** :

** IIS(Internet Information Services) ** 是微軟開發的一款Web服務器軟件,專為Windows操作系統設計。它主要用于托管網站、提供Web服務以及支持多種協議如HTTP、HTTPS等。IIS不僅易于安裝和配置,還提供了強大的功能集,包括安全性控制、性能優化以及對多種Web技術的支持。

** Tomcat ** :

** Tomcat ** 則是Apache軟件基金會下的一個項目,旨在提供一個運行Java Servlets和JavaServer Pages (JSP) 的環境。由于有Sun Microsystems(現Oracle Corporation)以及其他各方的支持,最新的Servlet和JSP規范通常能夠在Tomcat中得到體現。例如,Tomcat 5支持了當時的最新標準Servlet 2.4和JSP 2.0規范。作為一個免費且開源的Web應用服務器,Tomcat因其輕量級特性而在中小型系統中被廣泛采用,特別是在并發訪問用戶數量有限的情況下,它是開發和調試JSP程序的理想選擇。

當在一臺機器上配置好Apache服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat時,它實際上作為一個與Apache 獨立的進程單獨運行的。

雖然Tomcat起源于Apache項目,并且能夠與Apache HTTP服務器協同工作以處理靜態和動態內容,但它本身是一個獨立的Servlet容器,專注于Java Web應用程序的執行。因此,在使用Tomcat進行Web開發時,開發者可以根據需要選擇是否將其與Apache結合使用,或者單獨利用Tomcat來滿足項目需求。這種靈活性使得Tomcat成為Java Web應用開發中的重要工具。

3. tomcat詳解

3.1 安裝

3.2 啟動

3.3 配置

Tomcat的配置主要通過編輯其配置文件來完成,這些文件通常位于conf目錄下。

3.3.1 配置啟動的端口號

Tomcat默認使用8080端口作為HTTP服務端口。如果需要更改這個端口號,可以在conf/server.xml文件中找到相應的<Connector>元素并修改port屬性。

例如,將Tomcat的HTTP端口更改為8081:

<Connector port="8081" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
  • port: 指定Tomcat監聽的端口號,mysql:3306;http:80;https:443。
  • protocol: 指定使用的協議類型,這里為HTTP/1.1。
  • connectionTimeout: 設置連接超時時間(毫秒),超過該時間未處理完請求則斷開連接。
  • redirectPort: 當客戶端請求的是HTTPS服務時,會重定向到此端口。

3.3.2 配置主機的名稱

server.xml文件中,可以通過<Host>元素配置虛擬主機。默認情況下,Tomcat使用localhost作為主機名,并將其映射到127.0.0.1

例如,配置一個名為www.none.com的虛擬主機:

<Host name="www.none.com" appBase="webapps"unpackWARs="true" autoDeploy="true">
</Host>
  • name: 虛擬主機的域名。
  • appBase: 應用程序的基本目錄,默認為webapps
  • unpackWARs: 是否自動解壓WAR包,默認為true
  • autoDeploy: 是否自動部署新的應用程序,默認為true

3.3.3 其他常用配置項

日志配置

日志文件通常位于logs目錄下,可以通過編輯conf/logging.properties文件來調整日志級別和輸出格式。

數據源配置

如果應用需要連接數據庫,可以在conf/context.xml或應用的META-INF/context.xml中配置數據源。

例如,配置MySQL數據源:

<Resource name="jdbc/myDB" auth="Container" type="javax.sql.DataSource"maxTotal="100" maxIdle="30" maxWaitMillis="10000"username="dbuser" password="dbpass" driverClassName="com.mysql.none.jdbc.Driver"url="jdbc:mysql://localhost:3306/mydatabase"/>
安全配置

為了提高安全性,可以配置SSL/TLS以啟用HTTPS服務。這通常涉及到生成證書并在server.xml中配置<Connector>元素。

例如,配置HTTPS連接器:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true" scheme="https" secure="true"clientAuth="false" sslProtocol="TLS"keystoreFile="/path/to/keystore.jks" keystorePass="changeit"/>

** 請你談談網站是如何訪問的? **

三次握手,交互。

  1. 輸入URL:用戶在瀏覽器地址欄中輸入一個URL(統一資源定位符),比如http://www.example.com。這個URL包含了協議(如HTTP或HTTPS)、域名(如www.example.com)和可能的路徑(如/path/page.html)。
  2. DNS解析:瀏覽器需要知道對應域名的IP地址才能建立連接。它首先會在本地緩存或者操作系統緩存中查找該域名對應的IP地址。如果找不到,就會向配置的DNS服務器發送請求查詢該域名的IP地址。DNS服務器通過遞歸查詢的方式找到正確的IP地址并返回給瀏覽器。
  3. 建立TCP連接:獲取到目標服務器的IP地址后,瀏覽器會嘗試與服務器建立TCP連接。這通常涉及到**三次握手 **的過程,以確保客戶端和服務器雙方都準備好進行數據傳輸。
  4. TLS握手(如果是HTTPS):如果使用的是HTTPS協議,還需要額外進行一次TLS(Transport Layer Security)握手來加密通信。這一步驟包括客戶端和服務器之間的密鑰交換、證書驗證等操作,確保通信的安全性。
  5. 發送HTTP請求:一旦TCP連接建立完成(對于HTTPS還需完成TLS握手),瀏覽器會構造并發送一個HTTP請求報文到服務器。這個請求報文中包含諸如請求方法(GETPOST等)、請求的URL、頭部信息(Headers)以及可能的主體內容(Body)。
  6. 服務器處理請求:Web服務器接收到請求后,會根據請求的內容進行處理。如果是靜態文件,服務器直接返回文件;如果是動態內容,則服務器可能會調用相應的腳本或應用程序來生成響應內容。
  7. 發送HTTP響應:服務器處理完請求后,會構建一個HTTP響應報文發回給瀏覽器。響應報文中包含狀態行(表明請求的結果)、頭部信息和響應體(通常是HTML文檔或其他類型的數據)。
  8. 瀏覽器接收響應:瀏覽器接收到響應后,開始解析HTML文檔,并根據文檔中的指令加載CSS樣式表、JavaScript腳本以及其他資源(如圖片、視頻等)。在這個過程中,瀏覽器可能會發起更多的HTTP請求來獲取這些資源。
  9. 渲染頁面:隨著資源逐步加載完畢,瀏覽器開始構建DOM樹、應用CSS樣式,并執行JavaScript代碼,最后將內容渲染到屏幕上供用戶查看。

整個流程涉及了多種網絡協議(如HTTP、HTTPS、TCP/IP)、技術棧(如HTML、CSS、JavaScript)以及中間件(如DNS服務器、Web服務器)。此外,現代瀏覽器還提供了許多優化措施,比如預取、預加載、壓縮傳輸等,來提升網頁加載速度和用戶體驗。

3.4 發布一個網站

tomcat的目錄結構如下:

apache-tomcat-<version>/
├── bin/              # 存放啟動、停止等腳本
│   ├── startup.sh    # Linux下啟動Tomcat的腳本
│   ├── shutdown.sh   # Linux下停止Tomcat的腳本
│   ├── catalina.sh   # Tomcat核心控制腳本
│   └── ...           # 其他腳本文件
├── conf/             # 配置文件目錄
│   ├── server.xml    # 主配置文件,定義端口、連接器等
│   ├── web.xml       # 默認Web應用部署描述符
│   ├── context.xml   # 上下文配置文件
│   ├── tomcat-users.xml # 用戶認證配置
│   └── ...           # 其他配置文件如logging.properties等
├── lib/              # 共享庫(JAR)目錄
│   ├── servlet-api.jar # Servlet API實現
│   ├── jsp-api.jar     # JSP API實現
│   └── ...           # 其他必要的依賴庫
├── logs/             # 日志文件目錄
│   ├── catalina.out  # 主要日志文件
│   ├── localhost_access_log.*.txt # HTTP請求訪問日志
│   └── ...           # 其他日志文件
├── webapps/          # Web應用程序部署目錄
│   ├── ROOT/         # 默認根應用
│   ├── manager/      # 內置管理控制臺
│   ├── examples/     # 官方示例應用
|   		├──WEB-INF
|   		   ├── classes  # java程序
|   		   ├── lib      # 所依賴的jar包
|   		   └── web.xml  # 網頁配置
|   		├──static       # 靜態資源
|   		├──index.html
|   		└──...
│   └── ...           # 自定義的應用程序或WAR包
├── work/             # 運行時工作目錄
│   └── Catalina/     # 存儲編譯后的JSP類文件
├── temp/             # 臨時文件目錄
├── LICENSE           # 許可證文件
└── NOTICE            # 版權聲明

這部分是我們配置網站時所使用的:

├── webapps/          # Web應用程序部署目錄
│   ├── ROOT/         # 默認根應用
│   ├── manager/      # 內置管理控制臺
│   ├── examples/     # 官方示例應用
|   		├──WEB-INF
|   		   ├── classes  # java程序
|   		   ├── lib      # 所依賴的jar包
|   		   └── web.xml  # 網頁配置
|   		├──static       # 靜態資源
|   		├──index.html
|   		└──...
│   └── ...           # 自定義的應用程序或WAR

4. Http協議

4.1 什么是http

HTTP(超文本傳輸協議)是一個簡單的請求-響應協議,它通常運行在TCP之上。

  • 文本:html,字符串…
  • 超文本:圖片,音樂,視頻,定位,地圖…
  • 默認端口:80
  • HTTPS:安全的協議
    • 默認端口:443

4.2 http的兩個時代

  • http1.0:客戶端可以與web服務器連接后,只能獲得一個web資源,斷開連接。
  • http2.0:客戶端可以與web服務器連接后,可以獲得多個web資源。

4.3 http請求

客戶端—->發請求(request)—->服務器(比如:訪問百度)
General

// 請求地址
Request URL: https://www.baidu.com/
// 請求方法
Request Method: GET
// 狀態代碼
Status Code: 200 OK
// 遠程地址
Remote Address: 14.215.177.38:443
// 引用站點策略
Referrer Policy: strict-origin-when-cross-origin

Request Headers

Accept: text/html
Accept-Encoding: gzip, deflate, br
// 語言
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
  1. 請求行
  • 請求行中的請求方式: GET
  • 請求方式:GETPOSTHEADDELETEPUT
    GET: 請求能夠攜帶的參數比較少,大小有限制,會在瀏覽器的URL地址欄顯示數據內容,不安全,但高效。
    POST:請求能夠攜帶的參數沒有限制,大小沒有限制,不會在瀏覽器的URL地址欄顯示數據內容,安全,但不高效。
  1. 請求頭(消息頭)
Accept: 告訴瀏覽器,它所支持的數據類型
Accept-Encoding: 告訴瀏覽器,它支持哪種編碼格式:GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: 告訴瀏覽器,它的語言環境
Cache-Control: 緩存控制
Connection: 告訴瀏覽器,請求完成是斷開還是保持
HOST:主機

4.4 http響應

Response Headers

// 緩存控制
Cache-Control: no-cache
// 保持連接(http1.1)
Connection: keep-alive
// 文本編碼類型
Content-Encoding: gzip
// 響應類型
Content-Type: text/html;charset=utf-8
  1. 響應體
Accept: 告訴瀏覽器,它所支持的數據類型
Accept-Encoding: 告訴瀏覽器,它支持哪種編碼格式:GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: 告訴瀏覽器,它的語言環境
Cache-Control: 緩存控制
Connection: 告訴瀏覽器,請求完成是斷開還是保持
HOST:主機
Refrush:告訴客戶端,多久刷新一次
Location:讓網頁重新定位
  1. 響應狀態碼
  • 200:響應成功
  • 3xx:請求重定向(304等等)
  • 4xx:找不到資源(404等等)
  • 5xx:服務器代碼錯誤(500代碼錯誤,502網關錯誤)

當你的瀏覽器中地址欄輸入地址并回車的一瞬間到頁面能夠展示回來,經歷了什么?

  1. URL 解析

瀏覽器解析輸入的 URL,提取協議(HTTP/HTTPS)、域名、路徑等信息。

  1. DNS 解析

檢查本地緩存(瀏覽器、系統、hosts 文件),若無則通過 DNS 服務器遞歸查詢,將域名轉換為 IP 地址

  1. 建立 TCP 連接

通過 三次握手 與服務器建立可靠的 TCP 連接(SYN → SYN-ACK → ACK)。

  1. TLS 握手(**HTTPS **)

若為 HTTPS,進行 TLS 握手:證書驗證、密鑰交換,建立加密通道。

  1. 發送 HTTP 請求

瀏覽器發送 HTTP 請求(如 GET/index.html ),包含請求頭(host、User-Agent 等)和請求體(如 GET 數據)。

  1. 服務器處理請求

服務器解析請求,執行邏輯(如查詢數據庫),生成響應內容(HTML、圖片等)。

  1. 返回 HTTP 響應

服務器返回 HTTP 響應,包含狀態碼(如 200 OK)、響應頭(Content-Type)和響應體(頁面內容)。

  1. 瀏覽器渲染頁面

解析 HTML :構建 DOM 樹。

加載 CSS/JS :構建 CSSOM 樹,執行 JavaScript。

渲染樹合成 :合并 DOM 和 CSSOM,布局(Layout)并繪制(Paint)頁面。

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

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

相關文章

AI in Game,大模型能力與實時音視頻技術融合,交出AI應用新答卷

隨著AI的技術進步和工具普及&#xff0c;尤其是在這兩年的躍進之后&#xff0c;AI在游戲行業內的應用已經逐步由理念設想推向落地實踐。從蔡浩宇披露的AI新游《Whispers From The Star》到GDC上各大廠家呈現的游戲AI新亮點&#xff0c;我們看到了更多AI與游戲的結合方式&#x…

Android Studio 2022.2.1.20 漢化教程

查看Android Studio 版本 Android Studio Flamingo | 2022.2.1 Patch 2 下載&#xff1a;https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack----/versions/stable

常見的分詞算法

常見的分詞方法分類如下&#xff1a; 類型名稱說明優缺點1?? 基于空格/標點Word-level以空格或標點劃分&#xff0c;如 "Hello, world!" → ["Hello", ",", "world", "!"]?簡單&#xff0c;?無法處理新詞&#xff0c;詞…

湖北理元理律師事務所觀察:債務優化如何成為民生安全網

據央行2023年報告&#xff0c;中國家庭債務收入比達137.8%。面對債務高壓&#xff0c;湖北理元理律師事務所的實踐揭示&#xff1a;專業債務規劃的價值不僅是減負數字&#xff0c;更是構建社會穩定的微觀防線。 一、從“催收恐懼”到“主動管理”的轉變 該所服務數據顯示&…

服務器密碼安全運維解決新思路:憑據管理SMS+雙因素SLA認證結合的方案

引言&#xff1a;云服務器安全成本困局 在云計算滲透率突破60%的今天&#xff0c;中小企業正面臨嚴峻的安全悖論&#xff1a;某權威機構數據顯示&#xff0c;72%的云上數據泄露事件源于憑據管理不當&#xff0c;而傳統安全解決方案的采購成本往往超過中小企業年利潤的8%。這種…

Vision Transformer網絡結構

0.前言 參考CSDN大佬(太陽花的小綠豆)的代碼&#xff0c;梳理了一下vit的網絡結構&#xff0c;代碼地址如下&#xff1a; deep-learning-for-image-processing/pytorch_classification/vision_transformer at master WZMIAOMIAO/deep-learning-for-image-processing GitHub …

C++ 圖像處理庫 CxImage 簡介 (遷移至OpenCV)

文章目錄 核心功能特點局限性與替代方案常用方法構造函數從數組創建圖像訪問屬性訪問像素點Windows平臺支持 常用方法遷移至OpenCV CxImage 是一款功能強大的圖像處理類庫&#xff0c;主要用于 Windows 平臺的圖像處理任務。它支持多種圖像格式的加載、保存、編輯及特效處理&am…

【博客系統】博客系統第十一彈:從零開始在 Linux 系統上搭建 Java 部署環境并部署 Web 項目

搭建 Java 部署環境 JDK 1. 更新軟件包 apt 命令詳細介紹 sudo apt-get update2. 安裝 OpenJDK 查找 JDK 包 apt list | grep "jdk"安裝 JDK sudo apt install openjdk-17-jdk注意&#xff1a; 此處安裝的是 OpenJDK&#xff0c;OpenJDK 是一個開源版本的 JDK&am…

智能外呼系統中 NLP 意圖理解的工作原理與技術實現

智能外呼系統通過整合語音識別&#xff08;ASR&#xff09;、自然語言處理&#xff08;NLP&#xff09;和語音合成&#xff08;TTS&#xff09;等技術&#xff0c;實現了自動化的電話交互。其中&#xff0c;NLP 意圖理解是核心模塊&#xff0c;負責解析用戶話語中的語義和意圖&…

Sigma-Aldrich胰蛋白酶細胞解離方案速覽

Sigma-Aldrich_胰蛋白酶用于細胞培養 細胞解離是細胞傳代過程中的一個步驟&#xff0c;即細胞從預處理表面分離&#xff0c;形成懸浮液。這些懸浮液對于傳代培養重新接種、細胞計數分析和細胞增殖非常重要。有多種蛋白水解酶可用來從粘附基質上脫離細胞&#xff0c;胰蛋白酶就…

寶塔安裝WordPress程序

寶塔安裝WordPress程序 一、提前準備1&#xff0c;下載WordPress2&#xff0c;在寶塔創建站點 二、部署項目1&#xff0c;上傳下載的wordpress壓縮包至創建的項目根目錄下并解壓 三、wordpress安裝1&#xff0c;在瀏覽器打開創建的網站2&#xff0c;開始按照流程安裝配置數據庫…

【LangChain】框架解析

目錄 &#x1f31f; 前言&#x1f3d7;? 技術背景與價值&#x1fa79; 當前技術痛點&#x1f6e0;? 解決方案概述&#x1f465; 目標讀者說明 &#x1f9e0; 一、技術原理剖析&#x1f4ca; 核心架構圖解&#x1f4a1; 核心作用講解&#x1f527; 關鍵技術模塊說明?? 技術選…

百度之星2024 初賽第一場 補給

百度之星2024 初賽第一場 補給 題干描述問題分析&#xff1a;C代碼Java代碼&#xff1a;Python代碼補充說明&#xff1a; 題干描述 參考自馬蹄集OJ&#xff0c;原文鏈接1 可怕的戰爭發生了&#xff0c;小度作為后勤保障工作人員&#xff0c;也要為了保衛國家而努力。 現在有 …

JavaScripts console.log和console.dir區別

console.log 和 console.dir 都是 JavaScript 中用于在瀏覽器控制臺打印信息的方法 &#xff0c;二者主要有以下區別&#xff1a; 輸出內容和格式 console.log&#xff1a;主要用于輸出簡單的日志信息&#xff0c;直接打印數據的字符串表示 。對于對象、數組等引用類型&#…

uniapp 開發企業微信小程序時,如何在當前頁面真正銷毀前或者關閉小程序前調用一個api接口

在 UniApp 開發企業微信小程序時&#xff0c;若需在頁面銷毀或小程序關閉前調用 API 接口&#xff0c;需結合頁面生命周期和應用生命周期實現。以下是具體實現方案及注意事項&#xff1a; 一、在頁面銷毀前調用 API&#xff08;頁面級&#xff09; 通過頁面生命周期鉤子 onUnl…

聊聊 Metasploit 免殺

各位小伙伴們&#xff0c;晚上好&#xff01; 咱們今天打開宵夜“安全食材箱”&#xff0c;聊聊滲透測試繞過殺毒&#xff08;免殺&#xff09;的那些門道。你可以把免殺理解為——深夜做宵夜時&#xff0c;家里有人睡覺&#xff0c;但你非得去廚房整點美食&#xff0c;還不能…

Android高級開發第二篇 - JNI 參數傳遞與 Java → C → Java 雙向調用

文章目錄 Android高級開發第二篇 - JNI 參數傳遞與 Java → C → Java 雙向調用引言JNI基礎回顧JNI中的參數傳遞基本數據類型傳遞字符串傳遞數組傳遞對象傳遞 Java → C → Java 雙向調用從C/C調用Java方法實現一個完整的回調機制 內存管理與注意事項性能優化提示結論參考資源 …

2025-05-28 Python深度學習8——優化器

文章目錄 1 工作原理2 常見優化器2.1 SGD2.2 Adam 3 優化器參數4 學習率5 使用最佳實踐 本文環境&#xff1a; Pycharm 2025.1Python 3.12.9Pytorch 2.6.0cu124 ? 優化器 (Optimizer) 是深度學習中的核心組件&#xff0c;負責根據損失函數的梯度來更新模型的參數&#xff0c;使…

Web攻防-SQL注入增刪改查HTTP頭UAXFFRefererCookie無回顯報錯

知識點&#xff1a; 1、Web攻防-SQL注入-操作方法&增刪改查 2、Web攻防-SQL注入-HTTP頭&UA&Cookie 3、Web攻防-SQL注入-HTTP頭&XFF&Referer 案例說明&#xff1a; 在應用中&#xff0c;存在增刪改查數據的操作&#xff0c;其中SQL語句結構不一導致注入語句…