理解web服務(wù)器端處理流程基本原理

理解web服務(wù)器端處理流程基本原理

為了簡單理解web的運(yùn)行流程朝捆,看了不少博客特此總結(jié)。 首先是最簡單的一個web服務(wù)器是如何工作的义起;上完計算機(jī)網(wǎng)絡(luò)課程之后我們應(yīng)該學(xué)會了操作簡單的socket睛琳;包括基本的服務(wù)器端綁定端口監(jiān)聽,接收最基本的字符串消息做出響應(yīng)以及客戶端請求連接接奈,發(fā)送字符串;

ServerSocketserver=newServerSocket(port);
Socketsocket=server.accept();
InputStreaminputStream=socket.getInputStream();

那么這些基礎(chǔ)操作怎么變成我們所了解的龐大服務(wù)器的呢通孽?參考《How Tomcat Work》的第一份代碼我們可以實(shí)現(xiàn)通過瀏覽器打開第一個靜態(tài)頁面的服務(wù)器序宦;

原理就在于瀏覽器請求會發(fā)送一系列協(xié)議內(nèi)容的socket字符串,這些字符串的意義暫時沒需要的話就不用管背苦,但是我們的服務(wù)器需要對這些進(jìn)行解析互捌; 瀏覽器發(fā)送的socket字符串如下(就是純socket接收的字符串,沒有什么高級的東西)

image

我們唯一關(guān)注的就是GET后面的“/”(GET / HTTP/1.1)表示請求的路徑為 /root路徑行剂,服務(wù)器可以默認(rèn)返回index.html秕噪。

詳細(xì)步驟:從接收這些請求字符串這個過程大致有兩步:(代碼來自《how tomcat work》)

1. 解析請求,搞清瀏覽器要請求什么

對于請求index.html厚宰,我們在瀏覽器輸入localhost:port/index.html后,我們的簡易版服務(wù)器直接通過parse()函數(shù)解析腌巾,邏輯如下:

public void parse() {
    // 初始化一個stringbuffer
    StringBuffer request = new StringBuffer(2048);
    int i;
    byte[] buffer = new byte[2048];
    try {
      i = input.read(buffer);
    }
    catch (IOException e) {
      e.printStackTrace();
      i = -1;
    }
    //將請求放入buffer
    for (int j=0; j<i; j++) {
      request.append((char) buffer[j]);
    }
    System.out.print(request.toString());
    //真正的解析邏輯
    uri = parseUri(request.toString());
  }
private String parseUri(String requestString) {
    int index1, index2;
    //重點(diǎn)就是找到第一行第一個空格所在地方  如GET /index.html HTTP/1.1
    index1 = requestString.indexOf(' ');
    if (index1 != -1) {
      //找到第二個空格;那么兩個空格中間就是我們要請求的資源名
      index2 = requestString.indexOf(' ', index1 + 1);
      if (index2 > index1)
        //解析返回 “index.html”
        return requestString.substring(index1 + 1, index2);
    }
    return null;
  }

這么一來服務(wù)器就用我們初學(xué)者都會的字符串解析獲取了瀏覽器的請求內(nèi)容標(biāo)題:index.html

2.找到對應(yīng)資源并寫入輸出流

接下來就去找文件“index.html”铲觉,沒啥好說的澈蝙,把一個文件打開讀取內(nèi)容到輸出流這類操作隨時都可以搜索到,直接加一堆http中我們暫時用不著的頭撵幽,發(fā)送給瀏覽器碉克;

image

大功告成:

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市并齐,隨后出現(xiàn)的幾起案子漏麦,更是在濱河造成了極大的恐慌客税,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撕贞,死亡現(xiàn)場離奇詭異更耻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)捏膨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門秧均,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人号涯,你說我怎么就攤上這事目胡。” “怎么了链快?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵誉己,是天一觀的道長。 經(jīng)常有香客問我域蜗,道長巨双,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任霉祸,我火速辦了婚禮筑累,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丝蹭。我一直安慰自己慢宗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布奔穿。 她就那樣靜靜地躺著镜沽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪巫橄。 梳的紋絲不亂的頭發(fā)上淘邻,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天茵典,我揣著相機(jī)與錄音湘换,去河邊找鬼。 笑死统阿,一個胖子當(dāng)著我的面吹牛彩倚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扶平,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼帆离,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了结澄?” 一聲冷哼從身側(cè)響起哥谷,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤岸夯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后们妥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猜扮,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年监婶,在試婚紗的時候發(fā)現(xiàn)自己被綠了旅赢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惑惶,死狀恐怖煮盼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情带污,我是刑警寧澤僵控,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站刮刑,受9級特大地震影響喉祭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雷绢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一泛烙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翘紊,春花似錦蔽氨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至踪宠,卻和暖如春自赔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柳琢。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工绍妨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柬脸。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓他去,卻偏偏與公主長得像,于是被迫代替她去往敵國和親倒堕。 傳聞我的和親對象是個殘疾皇子灾测,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容