Servlet之HttpServlet源碼介紹

開心一笑

啥叫代溝?
小學(xué)語文題關(guān)聯(lián)詞填空:
他___ 犧牲生命耘纱,____出賣組織敬肚。
60后填“寧可,也不”
70后填“害怕束析,所以”
80后填“與其艳馒,不如”
90后填“即使,也要”
00后填“白白员寇,忘了”
評論:這幾個回答分別體現(xiàn)了60后的無畏弄慰,70后的無奈,80后的自我蝶锋,90后的叛逆陆爽,00后的呆萌……
這不叫代溝,這叫沒法玩了扳缕!

提出問題

HttpServlet類簡單的學(xué)習(xí)和如何利用慌闭?别威??

解決問題

Servlet類的關(guān)系圖如下驴剔,方便理解:


這里寫圖片描述

HttpServlet類源碼的簡單學(xué)習(xí)

當(dāng)前端發(fā)送請求時省古,會首先調(diào)用HttpServlet中的service方法,假如沒有service方法丧失,才會調(diào)用父類方法豺妓。我說的是假如

Service方法的具體源碼為:

//請求會先訪問這個service
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    if(req instanceof HttpServletRequest && res instanceof HttpServletResponse) {
        //將req 和res強(qiáng)制轉(zhuǎn)換為帶Http的request 和response
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse)res;
        //然后調(diào)用帶Http req和res的service方法
        this.service((HttpServletRequest)request, (HttpServletResponse)response);
    } else {
        throw new ServletException("non-HTTP request or response");
    }
}


protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //獲得請求方法的類型     
    String method = req.getMethod();
    long errMsg;
    //如果是GET請求
    if(method.equals("GET")) {
        errMsg = this.getLastModified(req);
        if(errMsg == -1L) {
        //調(diào)用doGet方法
        this.doGet(req, resp);
        } else {
            long ifModifiedSince = req.getDateHeader("If-Modified-Since");
            if(ifModifiedSince < errMsg) {
                this.maybeSetLastModified(resp, errMsg);
                this.doGet(req, resp);
            } else {
                resp.setStatus(304);
            }
    }
    //如果是HEAD請求
    } else if(method.equals("HEAD")) {
        errMsg = this.getLastModified(req);
        this.maybeSetLastModified(resp, errMsg);
        this.doHead(req, resp);
    //如果是POST請求
    } else if(method.equals("POST")) {
        this.doPost(req, resp);
    //如果是PUT請求
    } else if(method.equals("PUT")) {
        this.doPut(req, resp);
    //如果是DELETE請求
    } else if(method.equals("DELETE")) {
        this.doDelete(req, resp);
    //如果是OPTIONS請求
    } else if(method.equals("OPTIONS")) {
        this.doOptions(req, resp);
    } else if(method.equals("TRACE")) {
        this.doTrace(req, resp);
    } else {
        String errMsg1 = lStrings.getString("http.method_not_implemented");
        Object[] errArgs = new Object[]{method};
        errMsg1 = MessageFormat.format(errMsg1, errArgs);
        resp.sendError(501, errMsg1);
    }

}

doGet方法源碼(doPost方法類似)

protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
    //獲取請求協(xié)議
    String protocol = req.getProtocol();
    String msg = lStrings.getString("http.method_get_not_supported");
    //如果是HTTP1.1
    if(protocol.endsWith("1.1")) {
        //設(shè)置響應(yīng)碼405
        resp.sendError(405, msg);
    } else {
        //設(shè)置響應(yīng)碼400
        resp.sendError(400, msg);
    }

}

看到這里我們就知道,我們項目中的Servlet繼承HttpServlet布讹,一般要重寫doGet和doPost方法
然后再方法里實現(xiàn)我們要的邏輯琳拭,否則會出現(xiàn) 405等等異常。

例如下面簡單例子:

package com.evada.de.serialnum.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created by Ay on 2016/5/1.
 */
public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {

        //實現(xiàn)自己的業(yè)務(wù)邏輯
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {

        //實現(xiàn)自己的業(yè)務(wù)邏輯
    }
}

讀書感悟

  • 即便如此還是想要待在這里描验,因為這里是屬于 我的地方白嘁。
  • 即使摔倒又如何?再站起來就行了挠乳。在摔倒的同時仰望天空权薯,廣闊無限的藍(lán)天今天也在對我微笑。
  • 人不是活在過去睡扬,做好現(xiàn)在能做的事就夠了。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末黍析,一起剝皮案震驚了整個濱河市卖怜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阐枣,老刑警劉巖马靠,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蔼两,居然都是意外死亡甩鳄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門额划,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妙啃,“玉大人,你說我怎么就攤上這事俊戳∫靖埃” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵抑胎,是天一觀的道長燥滑。 經(jīng)常有香客問我,道長阿逃,這世上最難降的妖魔是什么铭拧? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任赃蛛,我火速辦了婚禮,結(jié)果婚禮上搀菩,老公的妹妹穿的比我還像新娘焊虏。我一直安慰自己,他們只是感情好秕磷,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布诵闭。 她就那樣靜靜地躺著,像睡著了一般澎嚣。 火紅的嫁衣襯著肌膚如雪疏尿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天易桃,我揣著相機(jī)與錄音褥琐,去河邊找鬼。 笑死晤郑,一個胖子當(dāng)著我的面吹牛敌呈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播造寝,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼磕洪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诫龙?” 一聲冷哼從身側(cè)響起析显,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎签赃,沒想到半個月后谷异,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡锦聊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年歹嘹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孔庭。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡尺上,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出史飞,到底是詐尸還是另有隱情尖昏,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布构资,位于F島的核電站抽诉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吐绵。R本人自食惡果不足惜迹淌,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一河绽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唉窃,春花似錦耙饰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蔓涧,卻和暖如春件已,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背元暴。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工篷扩, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茉盏。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓鉴未,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸠姨。 傳聞我的和親對象是個殘疾皇子铜秆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

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

  • 本文包括: Servlet簡介關(guān)于Servlet的一些類 Servlet生命周期 ServletConfig獲得初...
    廖少少閱讀 3,859評論 1 67
  • 0 系列目錄# WEB請求處理 WEB請求處理一:瀏覽器請求發(fā)起處理 WEB請求處理二:Nginx請求反向代理 本...
    七寸知架構(gòu)閱讀 13,962評論 22 190
  • 簡介 Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務(wù)程序或服務(wù)連接器享怀,用...
    寒橋閱讀 2,256評論 0 10
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法羽峰,類相關(guān)的語法,內(nèi)部類的語法添瓷,繼承相關(guān)的語法,異常的語法值纱,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 我是來自漢江支流里的一滴水鳞贷。請別問我的源頭在哪里?恕我不能回答虐唠,或許老天知道搀愧。我只知道我來自大山深處,神...
    ecf33a82606f閱讀 132評論 0 0