Http詳解及Servlet入門

一面睛、HTTP協(xié)議

    1.1協(xié)議的作用及版本
        1.1.1HTTP是Hyper Text Transfer Protocol(超文本--html傳輸協(xié)議)昵时。
        1.1.2HTTP協(xié)議的作用用戶描述客戶端與服務(wù)器間的數(shù)據(jù)傳遞的。
        1.1.3:Http協(xié)議的版本:
                1.0:特點(diǎn):每次請(qǐng)求服務(wù)器上的資源都要建立新的連接湾蔓,響應(yīng)完畢后都會(huì)關(guān)閉連接。是無(wú)狀態(tài)的協(xié)議砌梆。
                1.1:特點(diǎn):在一次TCP/IP連接的基礎(chǔ)上可以發(fā)出多次請(qǐng)求和得到多次的響應(yīng)默责。比1.0多了一些請(qǐng)求和響應(yīng)頭。
                
    1.2協(xié)議的組成
        1.2.1請(qǐng)求部分:
            GET /App1/1.html HTTP/1.1
            Accept: */*
            Accept-Language: zh-cn
            Accept-Encoding: gzip, deflate
            User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
            Host: localhost:8080
            Connection: Keep-Alive
            
            username=admin&password=123
            
            請(qǐng)求部分由三部分組成的:
                請(qǐng)求行:位于第一行
                請(qǐng)求消息頭:從第二行開(kāi)始至第一個(gè)空行結(jié)束
                請(qǐng)求正文:從第一個(gè)空行之后的都是正文
                
        1.2.2響應(yīng)部分:
            HTTP/1.1 200 OK
            Server: Apache-Coyote/1.1
            Accept-Ranges: bytes
            ETag: W/"65-1366335797484"
            Last-Modified: Fri, 19 Apr 2013 01:43:17 GMT
            Content-Type: text/html
            Content-Length: 65
            Date: Fri, 19 Apr 2013 02:06:23 GMT
            Warnning:w1
            Warnning: w2

            hello http
            <a href="b.html">click</a>
            ![](1.jpg)

            響應(yīng)部分由三部分組成的:
                響應(yīng)行:位于第一行
                響應(yīng)消息頭:從第二行開(kāi)始至第一個(gè)空行結(jié)束
                響應(yīng)正文:從第一個(gè)空行之后的都是正文
    1.3協(xié)議詳細(xì)講解
            請(qǐng)求行:GET /App1/1.html HTTP/1.1
                    GET:請(qǐng)求方式咸包。默認(rèn)的請(qǐng)求方式桃序。其他常用的請(qǐng)求方式還有POST。
                        GET的特點(diǎn):默認(rèn)的請(qǐng)求方式烂瘫。
                            /App1/c.html?username=sdsfds&password=234324
                            把表單的請(qǐng)求的數(shù)據(jù)放在了請(qǐng)求的URI的后面媒熊。?username=sdsfds&password=234324
                            這樣不好:暴露數(shù)據(jù)奇适;請(qǐng)求行長(zhǎng)度有限。
                        POST的特點(diǎn)(經(jīng)常使用的):借助HTML中的form表單芦鳍。<form action="c.html" method="post">
                            請(qǐng)求參數(shù)出現(xiàn)在正文部分嚷往。長(zhǎng)度木有限制。相對(duì)安全柠衅。
                    ---------------------------
                    /App1/1.html:請(qǐng)求的資源的URI皮仁。
                    ---------------------------
                    HTTP/1.1:客戶端使用的協(xié)議的版本
                    
            響應(yīng)行:HTTP/1.1 200 OK
                    HTTP/1.1:服務(wù)器用的協(xié)議版本
                    200:響應(yīng)碼。代表服務(wù)器處理的結(jié)果的一種表示
                            200:正常
                            302/307:重定向
                            304:服務(wù)器的資源沒(méi)有被修改
                            404:請(qǐng)求的資源不存在
                            500:服務(wù)器報(bào)錯(cuò)了
                    OK:響應(yīng)碼描述
            請(qǐng)求消息頭:向服務(wù)器傳遞附加信息
                Accept:通知服務(wù)器菲宴,瀏覽器可以接受的MIME類型贷祈。(文件系統(tǒng)中用文件擴(kuò)展名區(qū)分?jǐn)?shù)據(jù)的類型。網(wǎng)絡(luò)上用MIME類型來(lái)區(qū)分?jǐn)?shù)據(jù)類型喝峦。Tomcat\conf\web.mxl)
                                                    MIME類型名稱:大類型/小類型
                Accept-Charset:通知服務(wù)器势誊,瀏覽器支持的字符集
                Accept-Encoding:通知服務(wù)器,瀏覽器能夠解碼的數(shù)據(jù)壓縮方式谣蠢。比如:gzip
                Accept-language:通知服務(wù)器粟耻,所希望的語(yǔ)言
                Host:請(qǐng)求的主機(jī)和端口
                *Referer:是一個(gè)URL地址。取值是當(dāng)前頁(yè)面之前的那個(gè)頁(yè)面地址的漩怎。防盜鏈
                *Content-Type:通知服務(wù)器勋颖,請(qǐng)求正文的MIME類型。
                        取值:application/x-www-form-urlencoded默認(rèn)值
                        對(duì)應(yīng)的是form表單的enctype屬性
                If-Modified-Since:通知服務(wù)器勋锤,緩存的文件的最后修改時(shí)間饭玲。
                User-Agent:通知服務(wù)器,瀏覽器類型.
                Content-Length:表示請(qǐng)求消息正文的長(zhǎng)度 
                Connection:表示是否需要持久連接叁执。如果服務(wù)器看到這里的值為“Keep -Alive”茄厘,或者看到請(qǐng)求使用的是HTTP 1.1(HTTP 1.1默認(rèn)進(jìn)行持久連接 
                *****Cookie:這是最重要的請(qǐng)求頭信息之一(會(huì)話有關(guān))
            響應(yīng)消息頭:
                *Location:通知客戶端,指示新的資源的位置(結(jié)合302/307來(lái)用谈宛。請(qǐng)求重定向)
                Server:通知客戶端次哈,服務(wù)器的類型
                *Content-Encoding:通知客戶端,響應(yīng)正文的壓縮編碼方式吆录。常用的是gzip窑滞。
                *Content-Length:通知客戶端響應(yīng)正文的數(shù)據(jù)大小
                *Content-Type:通知客戶端響應(yīng)正文的MIME類型
                *Refresh:讓瀏覽器自動(dòng)刷新。取值為整數(shù)(刷新的時(shí)間間隔恢筝,單位是秒)
                            Refresh:3
                            Refresh:3;URL=其他資源的URI
                *Content-Disposition:通知客戶端哀卫,以下載的方式打開(kāi)資源。
                            Content-Disposition:attachment;filename=1.jpg
                *****Set-Cookie:SS=Q0=5Lb_nQ; path=/search服務(wù)器端發(fā)送的Cookie(會(huì)話有關(guān))
                
                *Expires: -1             網(wǎng)頁(yè)的有效時(shí)間撬槽。單位是毫秒
                *Cache-Control: no-cache (1.1)  
                *Pragma: no-cache   (1.0)                               通知客戶端不要緩存

二此改、Servlet概述

    1、Servlet是SUN公司制定的一套開(kāi)發(fā)動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)侄柔。
    2共啃、JavaEE相關(guān)的類占调,包名一般都是以javax開(kāi)頭

三、編寫(xiě)第一個(gè)Servlet案例應(yīng)用

    1移剪、建立一個(gè)標(biāo)準(zhǔn)的JavaWeb應(yīng)用目錄
        FirstApp:
            WEB-INF:
                classes:
                lib:
                web.xml
    2究珊、進(jìn)入classes目錄,建立一個(gè)文本文件(所有的Servlet類都必須間接或直接實(shí)現(xiàn)javax.servlet.Servlet接口)
        package cn.itcast.servlet;

        import java.io.*;
        import javax.servlet.*;

        public class FirstServlet extends GenericServlet{
            public void service(ServletRequest req,
                                     ServletResponse res)
                              throws ServletException,
                                     java.io.IOException{
                OutputStream out = res.getOutputStream();
                out.write("Hello Servlet".getBytes());
                out.close();
                                     
            }

        }
    3挂滓、進(jìn)入classes目錄苦银,對(duì)FirstServlet進(jìn)行編譯:
        前提:把servlet-api.jar加入到你的構(gòu)建路徑中.set classpath=%classpath%;C:\apache-tomcat-6.0.35\lib\servlet-api.jar
        執(zhí)行:javac -d . FirsetServlet.java
    4、修改web.xml赶站,對(duì)FirsetServlet進(jìn)行url地址映射幔虏,配置如下:
        <?xml version="1.0" encoding="ISO-8859-1"?>
        <web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
           version="2.5"> 
            <servlet>
                <servlet-name>FirstServlet</servlet-name>
                <servlet-class>cn.itcast.servlet.FirstServlet</servlet-class>
                      
            </servlet>
            <servlet-mapping>
                <servlet-name>FirstServlet</servlet-name>
                <url-pattern>/hello</url-pattern>
            </servlet-mapping>
        </web-app>
    5、把你的應(yīng)用部署到Tomcat中贝椿。
    6想括、訪問(wèn)地址:http://localhost:8080/FirstApp/hello就可以看到寫(xiě)的Servlet類的輸出結(jié)果了。

四烙博、Servlet的生命周期

        容器最終要調(diào)用service方法為客戶進(jìn)行服務(wù)
        1瑟蜈、Servlet接口中的常用方法:
                public void init(ServletConfig config):初始化。Servlet類被實(shí)例化后就執(zhí)行渣窜,且執(zhí)行一次铺根。由容器進(jìn)行調(diào)用
                public void destroy():銷毀Servlet對(duì)象。由容器進(jìn)行調(diào)用
        在內(nèi)存中一個(gè)Servlet只有一個(gè)實(shí)例乔宿。針對(duì)不同的用戶請(qǐng)求位迂,容器采用多線程的機(jī)制調(diào)用service方法的。
        
        Servlet實(shí)例對(duì)象和初始化方法详瑞,默認(rèn)情況下掂林,只有第一次訪問(wèn)時(shí)才執(zhí)行,且只執(zhí)行一次坝橡。
        
        希望在應(yīng)用被Tomcat加載完畢后(此時(shí)還沒(méi)有任何人訪問(wèn))泻帮,就實(shí)例化并完成初始化Servlet的工作?
        <servlet>startup</servlet>
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>cn.itcast.servlet.FirstServlet</servlet-class>
        <load-on-startup>2</load-on-s

五计寇、Servlet的孩子們(模板方法設(shè)計(jì)模式)

    如果設(shè)計(jì)與HTTP協(xié)議有關(guān)的Servlet锣杂,一般選擇集成javax.servlet.http.HttpServlet.
    不要覆蓋其中的service(ServletRequest req,ServletResponse resp)方法,而應(yīng)該覆蓋掉番宁,doXXX方法蹲堂。
    doXXX就是根據(jù)你的請(qǐng)求方式來(lái)的。
    
    
    HttpServlet中的service方法是典型的模板方法設(shè)計(jì)模式的具體應(yīng)用贝淤。

六、Servlet配置

    1政供、一個(gè)Servlet可以被映射到多個(gè)URL地址上
    2播聪、URL地址映射還支持通配符*
        方式一:以*開(kāi)頭朽基,以擴(kuò)展名結(jié)尾。比如 <url-pattern>*.do</url-pattern>
        方式二:以/前綴開(kāi)頭离陶,以*結(jié)尾稼虎。 比如<url-pattern>/action/*</url-pattern>
    3、多個(gè)Servlet使用通配符時(shí)招刨,有可能有多
                以"/"開(kāi)頭(方式二)要比"*"開(kāi)頭(方式一)優(yōu)先級(jí)高
                都以"/"開(kāi)頭霎俩,還是有多個(gè)匹配,找最匹配的
    4沉眶、如果一個(gè)Servlet的映射為一個(gè)"/",就稱之為默認(rèn)的Servlet打却,它負(fù)責(zé)處理沒(méi)有映射路徑的URL請(qǐng)求的響應(yīng)。
        個(gè)配置的Servlet谎倔,到底執(zhí)行哪一個(gè)柳击?
        原則:優(yōu)先級(jí)
                絕對(duì)匹配
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市片习,隨后出現(xiàn)的幾起案子捌肴,更是在濱河造成了極大的恐慌,老刑警劉巖藕咏,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件状知,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡孽查,警方通過(guò)查閱死者的電腦和手機(jī)饥悴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)卦碾,“玉大人铺坞,你說(shuō)我怎么就攤上這事≈夼郑” “怎么了济榨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)绿映。 經(jīng)常有香客問(wèn)我擒滑,道長(zhǎng),這世上最難降的妖魔是什么叉弦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任丐一,我火速辦了婚禮,結(jié)果婚禮上淹冰,老公的妹妹穿的比我還像新娘库车。我一直安慰自己,他們只是感情好樱拴,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布柠衍。 她就那樣靜靜地躺著洋满,像睡著了一般。 火紅的嫁衣襯著肌膚如雪珍坊。 梳的紋絲不亂的頭發(fā)上牺勾,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音阵漏,去河邊找鬼驻民。 笑死,一個(gè)胖子當(dāng)著我的面吹牛履怯,可吹牛的內(nèi)容都是我干的回还。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼虑乖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼懦趋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起疹味,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仅叫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后糙捺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體诫咱,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年洪灯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坎缭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡签钩,死狀恐怖掏呼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铅檩,我是刑警寧澤憎夷,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站昧旨,受9級(jí)特大地震影響拾给,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兔沃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一蒋得、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乒疏,春花似錦额衙、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)追驴。三九已至,卻和暖如春疏之,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暇咆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工锋爪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爸业。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓其骄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親扯旷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拯爽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)钧忽,斷路器毯炮,智...
    卡卡羅2017閱讀 134,716評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,331評(píng)論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,867評(píng)論 6 342
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司耸黑,掛了不少桃煎,但最終還是拿到小米、百度大刊、阿里为迈、京東、新浪缺菌、CVTE葫辐、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,280評(píng)論 11 349
  • 6月5日,臭臭來(lái)到了我的身邊伴郁,我從此走進(jìn)它的世界耿战。 臭臭是一只倉(cāng)鼠,但是我不清楚它是什么種族(^_^)a原諒我這個(gè)...
    賈混蛋是也閱讀 298評(píng)論 1 3