亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

深入學習Tomcat----自己動手寫服務器(附服務器

系統 2224 0

相信大多 Web 開發者對 Tomcat 是非常熟悉的,眾所周知 Tomcat 是一款非常好用的開源 Servlet 容器,您一定對這個最流行的 Servlet 容器充滿好奇,雖然它并不像一個黑盒子那樣讓人無法觸摸但是 Tomcat 的源碼的確讓人看起來頭疼。筆者就在這里和大家共同分析一個簡單的 Web服務器是如何工作的源碼 下載地址

Web服務器

Web服務器 是一個復雜的系統,一個 Web服務器 要為一個 Servlet 的請求提供服務,需要做三件事:

1 、創建一個 request 對象并填充那些有可能被所引用的 Servlet 使用的信息,如參數、頭部、 cookies 、查詢字符串等等。一個 request 對象是 javax.servlet.ServletRequest javax.servlet.http.ServletRequest 接口的一個實例

2 、創建一個 response 對象,所引用的 servlet 使用它來給客戶端發送響應。一個 response 對象是 javax.servlet.ServletRequest javax.servlet.http.ServletRequest 接口的一個實例。

3 、調用 servlet service 方法,并傳入 request response 對象。這里 servlet 會從 request 對象取值,給 response 寫值。

在正式展示代碼之前還需要了解一些必須額 HTTP 的知識(如果您對此非常熟悉您可以直接看下面分析代碼)

HTTP

HTTP 的定義不知道的童鞋可以自己去度娘,這里主要要說的就是 HTTP 協議的格式

HTTP 請求包括三部分

1 、方法、統一資源標識符( URI )、協議 / 版本

2 、請求的頭部

3 、主題內容

下面是一個 HTTP 請求的例子


第一行表明這是 POST 請求方法, /examples/default.jsp URI HTTP/1.1 是協議以及版本。其中 URI 指明了一個互聯網資源,這里通常是相對服務器根目錄解釋的,也就是說這個 HTTP 請求就是告訴服務器我需要這個文件目錄如下:根目錄 / examples/default.jsp

最后一行是 HTTP 的主題內容, Servlet 會處理請求的主題內容,然后返回給客戶端 HTTP 響應。

類似于 HTTP 請求,一個 HTTP 響應也包括上面三個部分。

1 、方法、統一資源標識符( URI )、協議 / 版本

2 、響應的頭部

3 、主題內容

下面是一個 HTTP 響應的例子


第一行告訴協議版本,以及請求成功( 200 表示成功)

響應頭部和請求頭部一樣,一些有用的信息。響應的主體就是響應本身 HTML 內容。

好了基本知識介紹完畢,下面開始解釋代碼

部分相關代碼


HttpServer 類代表一個 web 服務器。首先提供一個 WEB_ROOT 所在的目錄和它下面所有的子目錄下靜態資源。其次定義了一個中止服務的命令,也就是說當得到的請求后面跟 /shutdown 的時候停止服務,默認是把服務設置為開啟。下面就是進入 main 函數了,首先實例化一個 HttpServer 類,然后就是通過 await 方法等待客戶端發來的請求。如果客戶端輸入的 URL 不是 http://localhost:8080/SHUTDOWN 則表示不停止服務器,然后就是繼續執行 await 方法中的內容,在 await 方法中最重要的就是定義兩個對象,一個是 request 一個是 response ,下面就來說說 Request Response 類。


首先調用 InputStream 對象中的 read 方法獲取 HTTP 請求的原始數據,然后在 parseUri 方法中獲得 uri 也就是要請求的靜態資源。說白了 Request 類的主要作用就是告訴服務器用戶要的是什么也就是在 http://localhost:8080 后面出現的東西。


Response 類代表一個 HTTP 響應。首先 Response 接收一個 OutputStream 對象,然后通過 sendStaticResource 方法對接收的 Request 進行處理,整個處理過程就是根據請求在服務器端進行尋找對應靜態資源的過程。找到所需要的資源后發送給客戶端然后讓客戶端顯示出來。

運行程序

運行上面的 HttpServer 類,然后在瀏覽器的地址欄中鍵入下面的地址: http:localhost:8080/index.jsp ,然后你會在瀏覽器中看到 index.jsp 頁面。

深入學習Tomcat----自己動手寫服務器(附服務器源碼)

在控制臺可以看到類似于下面的 HTTP 請求



小結

上面自己動手寫的這個所謂的服務器僅僅有三個類組成,從功能上來說他只能顯示一些靜態的資源,并不是全部功能。一個優秀的服務器還有很多細節要做,但是出于學習的目的大家現在有這些了解就足夠了,后面還會有對服務器的詳細介紹,敬請期待。

深入學習Tomcat----自己動手寫服務器(附服務器源碼)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 动漫美女撒尿 | 4hu影院永久在线播放 | 狠色狠色狠狠色综合久久 | 色婷婷5月精品久久久久 | 人人做天天爱夜夜爽中字 | 91视频论坛 | 美女久久久 | 97人人在线观看 | 久久国产精品视频 | 福利视频一区 | 日本中文字幕二区三区 | 91在线亚洲精品一区 | www.奇米.com| 久久色播| 五月天婷婷一区二区三区久久 | 亚洲国产欧美精品 | 殴美毛片 | 久久福利一区二区三区 | 成年午夜视频免费观看视频 | 国产精品成在线观看 | 夜夜欢视频 | 这里只有精品免费视频 | 久久精品亚洲乱码伦伦中文 | 久久久久久国产精品mv | 午夜爱爱小视频 | 成人影院在线免费观看 | 免费欧洲毛片a级视频老妇女 | 色久影院 | 久久久久久久久久免免费精品 | 欧美久久一区二区三区 | 青青福利视频 | 亚洲韩精品欧美一区二区三区 | 四虎影视国产精品婷婷 | 亚洲欧美字幕 | 久久久久久网 | 99久久精品6在线播放 | 日韩欧美色视频 | 深夜福利在线免费观看 | 亚洲综合精品一区二区三区中文 | 起碰成人免费公开网视频 | 国产成人乱码一区二区三区 |