目錄
- 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 基本概念
- 靜態web:html,css(提供給所有人看的數據,始終不會發生變化)
- 動態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"/>
** 請你談談網站是如何訪問的? **
三次握手,交互。
- 輸入URL:用戶在瀏覽器地址欄中輸入一個URL(統一資源定位符),比如
http://www.example.com
。這個URL包含了協議(如HTTP或HTTPS)、域名(如www.example.com
)和可能的路徑(如/path/page.html
)。 - DNS解析:瀏覽器需要知道對應域名的IP地址才能建立連接。它首先會在本地緩存或者操作系統緩存中查找該域名對應的IP地址。如果找不到,就會向配置的DNS服務器發送請求查詢該域名的IP地址。DNS服務器通過遞歸查詢的方式找到正確的IP地址并返回給瀏覽器。
- 建立TCP連接:獲取到目標服務器的IP地址后,瀏覽器會嘗試與服務器建立TCP連接。這通常涉及到**三次握手 **的過程,以確保客戶端和服務器雙方都準備好進行數據傳輸。
- TLS握手(如果是HTTPS):如果使用的是HTTPS協議,還需要額外進行一次TLS(Transport Layer Security)握手來加密通信。這一步驟包括客戶端和服務器之間的密鑰交換、證書驗證等操作,確保通信的安全性。
- 發送HTTP請求:一旦TCP連接建立完成(對于HTTPS還需完成TLS握手),瀏覽器會構造并發送一個HTTP請求報文到服務器。這個請求報文中包含諸如請求方法(
GET
、POST
等)、請求的URL、頭部信息(Headers)以及可能的主體內容(Body)。 - 服務器處理請求:Web服務器接收到請求后,會根據請求的內容進行處理。如果是靜態文件,服務器直接返回文件;如果是動態內容,則服務器可能會調用相應的腳本或應用程序來生成響應內容。
- 發送HTTP響應:服務器處理完請求后,會構建一個HTTP響應報文發回給瀏覽器。響應報文中包含狀態行(表明請求的結果)、頭部信息和響應體(通常是HTML文檔或其他類型的數據)。
- 瀏覽器接收響應:瀏覽器接收到響應后,開始解析HTML文檔,并根據文檔中的指令加載CSS樣式表、JavaScript腳本以及其他資源(如圖片、視頻等)。在這個過程中,瀏覽器可能會發起更多的HTTP請求來獲取這些資源。
- 渲染頁面:隨著資源逐步加載完畢,瀏覽器開始構建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
- 請求行
- 請求行中的請求方式:
GET
- 請求方式:
GET
,POST
,HEAD
,DELETE
,PUT
…
GET: 請求能夠攜帶的參數比較少,大小有限制,會在瀏覽器的URL地址欄顯示數據內容,不安全,但高效。
POST:請求能夠攜帶的參數沒有限制,大小沒有限制,不會在瀏覽器的URL地址欄顯示數據內容,安全,但不高效。
- 請求頭(消息頭)
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
- 響應體
Accept: 告訴瀏覽器,它所支持的數據類型
Accept-Encoding: 告訴瀏覽器,它支持哪種編碼格式:GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: 告訴瀏覽器,它的語言環境
Cache-Control: 緩存控制
Connection: 告訴瀏覽器,請求完成是斷開還是保持
HOST:主機
Refrush:告訴客戶端,多久刷新一次
Location:讓網頁重新定位
- 響應狀態碼
- 200:響應成功
- 3xx:請求重定向(304等等)
- 4xx:找不到資源(404等等)
- 5xx:服務器代碼錯誤(500代碼錯誤,502網關錯誤)
當你的瀏覽器中地址欄輸入地址并回車的一瞬間到頁面能夠展示回來,經歷了什么?
- URL 解析
瀏覽器解析輸入的 URL,提取協議(HTTP/HTTPS)、域名、路徑等信息。
- DNS 解析
檢查本地緩存(瀏覽器、系統、
hosts
文件),若無則通過 DNS 服務器遞歸查詢,將域名轉換為 IP 地址
- 建立 TCP 連接
通過 三次握手 與服務器建立可靠的 TCP 連接(SYN → SYN-ACK → ACK)。
- TLS 握手(**HTTPS **)
若為 HTTPS,進行 TLS 握手:證書驗證、密鑰交換,建立加密通道。
- 發送 HTTP 請求
瀏覽器發送 HTTP 請求(如
GET/index.html
),包含請求頭(host、User-Agent 等)和請求體(如 GET 數據)。
- 服務器處理請求
服務器解析請求,執行邏輯(如查詢數據庫),生成響應內容(HTML、圖片等)。
- 返回 HTTP 響應
服務器返回 HTTP 響應,包含狀態碼(如
200
OK)、響應頭(Content-Type)和響應體(頁面內容)。
- 瀏覽器渲染頁面
解析 HTML :構建 DOM 樹。
加載 CSS/JS :構建 CSSOM 樹,執行 JavaScript。
渲染樹合成 :合并 DOM 和 CSSOM,布局(Layout)并繪制(Paint)頁面。