Http詳解及Servlet入門

一、HTTP協(xié)議

    1.1協(xié)議的作用及版本
        1.1.1HTTP是Hyper Text Transfer Protocol(超文本--html傳輸協(xié)議)。
        1.1.2HTTP協(xié)議的作用用戶描述客戶端與服務器間的數(shù)據(jù)傳遞的。
        1.1.3:Http協(xié)議的版本:
                1.0:特點:每次請求服務器上的資源都要建立新的連接,響應完畢后都會關(guān)閉連接。是無狀態(tài)的協(xié)議。
                1.1:特點:在一次TCP/IP連接的基礎(chǔ)上可以發(fā)出多次請求和得到多次的響應。比1.0多了一些請求和響應頭。
                
    1.2協(xié)議的組成
        1.2.1請求部分:
            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
            
            請求部分由三部分組成的:
                請求行:位于第一行
                請求消息頭:從第二行開始至第一個空行結(jié)束
                請求正文:從第一個空行之后的都是正文
                
        1.2.2響應部分:
            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)

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

二、Servlet概述

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

三、編寫第一個Servlet案例應用

    1、建立一個標準的JavaWeb應用目錄
        FirstApp:
            WEB-INF:
                classes:
                lib:
                web.xml
    2、進入classes目錄,建立一個文本文件(所有的Servlet類都必須間接或直接實現(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、進入classes目錄,對FirstServlet進行編譯:
        前提:把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,對FirsetServlet進行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、把你的應用部署到Tomcat中。
    6、訪問地址:http://localhost:8080/FirstApp/hello就可以看到寫的Servlet類的輸出結(jié)果了。

四、Servlet的生命周期

        容器最終要調(diào)用service方法為客戶進行服務
        1、Servlet接口中的常用方法:
                public void init(ServletConfig config):初始化。Servlet類被實例化后就執(zhí)行,且執(zhí)行一次。由容器進行調(diào)用
                public void destroy():銷毀Servlet對象。由容器進行調(diào)用
        在內(nèi)存中一個Servlet只有一個實例。針對不同的用戶請求,容器采用多線程的機制調(diào)用service方法的。
        
        Servlet實例對象和初始化方法,默認情況下,只有第一次訪問時才執(zhí)行,且只執(zhí)行一次。
        
        希望在應用被Tomcat加載完畢后(此時還沒有任何人訪問),就實例化并完成初始化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è)計模式)

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

六、Servlet配置

    1、一個Servlet可以被映射到多個URL地址上
    2、URL地址映射還支持通配符*
        方式一:以*開頭,以擴展名結(jié)尾。比如 <url-pattern>*.do</url-pattern>
        方式二:以/前綴開頭,以*結(jié)尾。 比如<url-pattern>/action/*</url-pattern>
    3、多個Servlet使用通配符時,有可能有多
                以"/"開頭(方式二)要比"*"開頭(方式一)優(yōu)先級高
                都以"/"開頭,還是有多個匹配,找最匹配的
    4、如果一個Servlet的映射為一個"/",就稱之為默認的Servlet,它負責處理沒有映射路徑的URL請求的響應。
        個配置的Servlet,到底執(zhí)行哪一個?
        原則:優(yōu)先級
                絕對匹配
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,602評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,134評論 25 708
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,275評論 6 342
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,815評論 11 349
  • 6月5日,臭臭來到了我的身邊,我從此走進它的世界。 臭臭是一只倉鼠,但是我不清楚它是什么種族(^_^)a原諒我這個...
    賈混蛋是也閱讀 379評論 1 3

友情鏈接更多精彩內(nèi)容