WebServer 软件原理简介
一. B/S結構? 和 C/S結構簡介
1.1 C/S結構
所謂C/S 就是 Client - Server ,
在Client端有個界面程序.?? User會通過這個Client端程序來讀寫? 存放在Server端的數據.
我們常用的需要聯網桌面程序例如 郵件客戶端ThurderBird,? 聊天工具Pidgin都是C/S結構的.
1.2 B/S結構
而B/S 結構 就是Browser - Server
User只需要通過瀏覽器就能讀寫 存放在Server端的的數據.
B/S結構無需在終端機器安裝Client程序, 只需要1個瀏覽器.
網上很多網站, 例如論壇,? 網頁郵件客戶端這些就是B/S結構的程序.
二, 什么是WebServer 和? WebServer軟件
所謂webserver 就是 B/S結構的server.
而C/S 結構的Server作用跟webserver類似, 但是一般叫webserver.
所以本文是針對B/S機構來講的.
所謂webserver軟件就是能令1個Webserver啟動http(https)服務的軟件.
常見的webserver軟件有:
IIS(微軟),
JBoss,
WebLogic(收費)
Tomcat
等等
三, http網頁瀏覽的原理.
在討論WebServer的機制前, 我覺得有必要詳述一下http網頁瀏覽的原理.
3.1 網絡傳輸協議簡介
我們知道瀏覽器是可以打開本地html文件(網頁文件)的.
而瀏覽一個網站,? 只不過是利用瀏覽器遠程打開 放在Webserver的網頁文件而已.
問題來了, 那么我怎么打開1個網絡上的server上的文件呢.
可能有人覺得很簡單,? 大家都利用ftp打開過的機器的文件吧.
只需要ip地址 以及 文件在機器上的目錄就可以了?
實際上是不足夠的.
實際上, 需要的元素要三樣
1. server的ip地址
2. server的傳輸協議(例如ftp, sftp...等)
3. 對方開放的端口(port)
如果對方不開ftp服務, 你即使知道ip地址以及文件路徑也沒用.
就好如 你知道老王家的書柜上有一本好書,? 但是如果老王不想讓你看, 你也看不了的.
*首先你得知道老王家哪里.
*而ftp服務就如老王提供了1個看書服務.
* 端口就如老王家里開了一個窗口, 你可以通過這個窗口來申請借書..???? 你必須通過這個窗口才能借到書.?? 老王很可能開通其他窗口提供借酒, 借錢什么的...
而http協議跟ftp協議優點類似, 但是http只能通過瀏覽器訪問, 而且只能打開網頁文件.
3.2 http協議工作步驟.
好了假如服務器WebServer 有1個網頁文件.
而我家里的及機器有一個瀏覽器.
那么我到底怎么才能通過這個瀏覽器來打開webServer上的網頁文件呢.
大概原理如下圖:
3.2.1 WebServer 啟動 webserver(http協議)
作為網頁服務器,? 必須啟動webserver服務, 例如啟動Tomcat , 同時指定訪問端口.
3.2.2 Client端利用browser發送1個連接請求(request) 到WebServer的指定端口.
例如我用FireFox 打開1個網頁, 可以見到瀏覽器其實發送了1個get請求到Webserver的80端口(如果不在地址欄制定端口, 就會使用默認的http端口80)
在上面截圖右下角, 就見到Request header信息, 這些就是瀏覽器發送給Webserver的信息.
它包括:
1. Host:? 就是webserver的地址,? dns服務器會根據這個地址轉換成真正的ip來找到指定的WebServer
2. User-Agent: 就是瀏覽者所使用的瀏覽器和操作系統信息, Webserver可以利用這些信息做一些邏輯上的分支處理.
3. Accept: 就是這個瀏覽器能支持顯示什么內容.
還有Language, cookie等信息, 以后有機會再詳解.
注意, 絕大部分的連接請求都是通過TCP/IP協議發出的.
3.2.3 WebServer受到browser的申請后, 把對應的網頁文件附帶一些信息發送回瀏覽器.(利用Socket的Stream)
一旦WebServer受到請求.
相當于構造了1個Socket對象.(后面會講),? 然后利用這個Socket對象發送回對應的網頁文件,
那么瀏覽器就得到這個網頁文件并顯示給瀏覽者了.
下面就是webserver發送回的頭文件信息:
包括壓縮方式,
內容大小
內容格式
最近更新日期.
Server(webserver 軟件)類型等.
最后, 還會吧網頁文件的內容發送過來:
四, WebServer軟件的工作職責.
通過, 上面的例子.
我們可以大概清楚WebServer軟件的工作職責
1. 監聽訪問端口.
2. 一但有連接請求通過端口發送過來, 就建立一條與對方瀏覽器的通道(InputStream & OutputStream)
3. 把網頁內容和相關信息發送給瀏覽器.
當然, 真正使用的webserver軟件絕對沒有上面寫的這么簡單, 但最關鍵的步驟原理都是一樣的.
五, 利用java自己寫1個webserver軟件小程序.
我們知道了webserver 軟件的運行原理.
也可以嘗試自己寫1個簡單的webserver小程序出來了:
5.1 寫1個html文件
<html> <body><h1>My webserver mainPage</h1><p>hello world</p></body> </html>存放在某個目錄, 例如:
/home/gateman/Studies/Java/java_start/single/mywebserver/index.html
5.2 利用java編寫MyWebServer.java
代碼:
步驟很簡單:
1. 首先在類里指定所使用的端口.
2. 指定主頁網頁文件的位置.
3. 根據端口構建1個 ServerSocket對象(如果對這個類不了解, 請參考我另一篇博文:? http://blog.csdn.net/nvd11/article/details/42847601)
4. 利用while循環監聽這個端口
5, 一旦有連接請求, 構造1個socket對象
6. 利用socket對象的outputstream, 把網頁文件內容發送過去.
5.4 測試執行
利用javac 編譯這個類
然后利用java命令來執行
那么這個程序就在監聽端口了.
然后我們可以打開另1個虛擬機, 輸入在瀏覽器輸入ip地址和端口(192.168.1.107:10010), 就見到瀏覽器里顯示了那個網頁文件的內容:
5.5 小結
其實這個MyWebServer功能相當弱啦, 而且是沒有執行相應標準的, 只是能用瀏覽器簡單顯示網頁文件的內容, 并沒有正確地顯示網頁文件.
常用的WebServer 軟件例如Tomcat, Weblogic功能強大得多也健壯得多, 但是基本原理是相似的.
總結
以上是生活随笔為你收集整理的WebServer 软件原理简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java TCP 编程简介
- 下一篇: Servlet 生命周期介绍