1. 程式人生 > >WEB的發展歷程、Tomcat伺服器、與HTTP協議

WEB的發展歷程、Tomcat伺服器、與HTTP協議

1 web的發展歷程

C/S和B/S都是軟體架構的兩種不同的表現形式:

C/S架構:Client/Server:客戶端和服務端的架構.

        該軟體執行在電腦桌面:比如,QQ,FeiQ,POS機/火車站買票.

        開發語言:Delphi,VB,VC++,C#,JAVA awt ,swing等.

        特點:一般的,服務端僅僅是安裝一個數據庫和資料儲存,所有程式的程式碼(功能/介面)都編寫在客戶端軟體中,(把所有業務邏輯都寫在客戶端,介面渲染也在客戶端).

        優點:直觀,使用者體驗好,安全性高等.

        缺點:每次升級,需要重新安裝,移植性較低,開發和維護成本較高.
B/S架構:Browser/Server:瀏覽器和服務端的架構(通過瀏覽器訪問的應用).

        該軟體是通過瀏覽器訪問.比如入口網站,管理系統等.

        其實B/S是特殊的C/S,因為瀏覽器是一個特殊的客戶端.

        開發語言:JSP,PHP,ASP等.

        特點:在服務端編寫程式碼,所有的業務邏輯都有服務端完成.客戶端只負責介面的渲染.

        優點:可移植性很高,開發和維護較好.

        缺點:使用者體驗不夠好,介面不夠豐富,安全性很低.
    瘦客戶端:傳統的B/S:服務端:負責業務邏輯.客戶端:負責介面渲染.

    富客戶端:超級BS=CS+BS;介面華麗.

            服務端:負責業務邏輯.

            客戶端:負責介面渲染+少量的業務邏輯.

    開發技術:Ext.js,Flash,EasyUI,JavaFX等.

2 伺服器

伺服器分類:


        軟體伺服器:其實就是一個軟體,提供了B/S應用執行環境。

        硬體伺服器:其實就是一臺電腦,該電腦安裝了軟體伺服器。

JavaWeb的軟體伺服器的分類:

        1):http伺服器,用於執行靜態的頁面.

        2):Web伺服器,實現了JavaEE的部分功能(比如Servlet/JSP),沒有實現javaEE中的EJB規範.

            Tomcat,Jetty等.

        3):應用伺服器,實現了JavaEE全部的規範,支援EJBTomcatEE,GlassFish
,JBoss,Weblogic(12306),WebSphere Servlet容器為JavaEeb應用提供執行環境,它負責管理ServletJSP的生命週期,以及管理他們的共享資料. Servlet容器也稱為JavaWeb容器,或者Servlet/JSP容器--->Tomcat

Tomcat伺服器(7.0.64)的安裝使用:


    (bin目錄):Tomcat的工具,啟動,關閉等.

    (conf目錄):裝了 Tomcat的配置檔案.

    (lib目錄):Tomcat的核心包和依賴的jar包.

    logs目錄:裝了日誌檔案.

    temp目錄:臨時目錄,上傳檔案的臨時檔案.

    webapps目錄:預設情況下的部署專案的路徑.

    work目錄:工作目錄,裝JSP翻譯成java檔案的程式碼

1.安裝目錄不能使用中文的,並且安裝路徑不允許出現空格,

2.啟動Tomcat伺服器:Tomcat根/bin/startup.bat

    直到控制檯沒有列印重大的錯誤,Exception,沒有一閃而過,就表示啟動成功.Tomcat的預設埠是8080;

訪問:開啟瀏覽器:

    http://伺服器所在的主機的IP:伺服器的埠號,/資源名字

    http://伺服器所在主機的名字:伺服器的埠號/資源名字

若伺服器在本機:

    http://本機的IP:伺服器的埠號/資源名字

    http://127.0.0.1:伺服器的埠號/資源名字

    http://localhost:伺服器的埠號/資源名字

Tomcat的常見錯誤:


    1):沒有成功啟動Tomcat,就開始訪問.-->無法顯示此網頁

    2):出現404的錯誤提示,HTTP Status 404

        當前訪問的資源地址不存在的時候,就報404錯誤.

        此時的問題是,是我們自己造成的,把資源的名字寫錯了.

    3):Tomcat成功啟動之後,再去啟動當前的Tomcat.

        Tomcat的埠已經被佔用,埠衝突.

    4):不能亂改動Tomcat中配置檔案的結構.

        檢視日誌檔案的,找到錯誤的的位置,錯誤原因-->再修改.

    5):在XML配置檔案中使用中文,此時XML檔案必須使用UTF-8的編碼.

        XML檔案:檔案內容的編碼和檔案本身的編碼要相同,都為UTF-8.

Tomcat的常見配置


    Tomcat的預設埠是8080;

    但是,HTTP協議的預設埠是80,而我們在訪問的時候,是遵循http協議的,

    如果是80:http://localhost:80/index.jsp

                http://localhost/index.jsp

    修改Tomcat根/conf/server.xml檔案中,預設第71行.

    每次配置完之後都要重新啟動Tomcat

Tomcat的安裝有兩種版本:


    1):減壓版,減壓之後,配置java_home可用.

    2):安裝版,在電腦上安裝一個伺服器.

        本身沒有差別,但是設定在開機的時候,自動啟動Tomcat.

把Tomcat作為伺服器安裝在Windows的伺服器列表中:

使用Tomcat/bin/service.bat:

    安裝服務:service install

    解除安裝服務:service remove

安全配置:賬號跟密碼.

<role rolename="manager-gui"/>

<role rolename="admin-gui"/>

<user roles="manager-gui,admin-gui" password="123456" username="admin"/>

JavaWeb專案結構:

                appDemo(web應用根目錄)  根目錄下的檔案外界可以直接訪問

                --html,jsp,css,javascript檔案等.

                --WEB-INF目錄 該目錄下的檔案外界無法直接訪問,由web伺服器負責呼叫.

                        -classes目錄-(java類編譯之後的class檔案)
                        -lib目錄-(java類執行所依賴的jar包)
                        -web.xml檔案-(web應用的配置檔案)

            搭建專案的時候記得改變專案的輸出目錄:也就是改變classpath的路徑,從預設的bin目錄改變為webapp/WEB-INF/class中:

            以後把專案給別人,只給webapp目錄.

新增Tomcat外掛


    1).把外掛jar包拷貝到D:\Eclipes\Eclipes4jee\eclipse\dropins
    2).記得在eclipse中的preferences中設定Tomcat的新增路徑為D:\JAVA\Tomcat\apache-tomcat-7.0.57
    3).重新啟動Tomcat伺服器.

部署web專案:


    方法1:直接把專案的web跟路徑,拷貝到Tomcat跟/webapps目錄中.

         該方式可行,而且是MyEclipse工具的部署方式.

    缺點:

        1:不支援熱部署,(程式碼變動之後,需要重新部署,重新部署的成本很大).

        2:把所有的專案都部署在該路徑,啟動越來越慢,若其中一個專案有問題,Tomcat是啟動不了.

    方法2:告訴Tomcat伺服器,從指定的路徑去部署專案.

        1):找到Tomcat根/conf/server.xml檔案.

        2):在<Host>元素之間,編寫<Context>元素,具體程式碼如下:

            <Context docBase="D:\Java EE\Cookie-Session\webapp" path=""/>

        3):訪問當前專案的路徑:http://ip:port/contextPath/資源名稱

            注意:多個<Context>元素的path不能相同.

虛擬主機配置:


    需求:有兩個公司的web應用都發布在同一個Tomcat伺服器上,可以為每家公司建立一個虛擬主機.

    www.daidu.com            www.google.com

    修改Windows系統中的C:/Windows/system32/driver/etc/hosts.

    配置二級域名,會使用到.

3 HTTP協議

特點:無狀態,預設埠是80 https:

    WEB瀏覽器與web伺服器之間的一問一答的互動過程必須遵循一定的規則,就是HTTP協議.

    HTTP是hypertext transfer Protocol(超文字傳輸協議)的簡寫,它是TCP/IP協議上的一個應用層協議,用於定義WEB瀏覽器與web伺服器之間交換資料的過程以及資料本身的格式.

HTTP協議到底約束了什麼:

    1.約束了瀏覽器以何種格式向服務端發生資料:

    2.約束了伺服器應該以何種格式來接受客戶端發生的資料:

    3.約束了伺服器應以何種格式來反饋資料給瀏覽器;

    4.約束了瀏覽器應以何種格式來接收伺服器反饋的資料.

HTTP1.0規範 跟 HTTP1.1規範

HTTP1.0規範:若請求N個資源,得建立N次連線,傳送N次請求,接收N次響應,關閉N次連線,

            每次請求之間都要建立單獨的連線,請求,響應,響應完關閉該次連線:
       缺點:每請求一個資源都要單獨的建立新的連線,請求完並關閉連線.

    解決方案:能在一次連線之間,多次請求,多次響應,響應完成之後再關閉連線.

HTTP1.1規範:能在一次連線之間,多次請求,多次響應,響應完之後再關閉連線.

       特點:  在一個TCP連線上可以傳送多個HTTP請求和響應,多個請求和響應過程可以重疊進行,增加了更多的請求頭和響應頭

       瀏覽器給伺服器傳送資料:一次請求

       伺服器給瀏覽器反饋資料:一次響應

HTTP協議的版本:HTTP/1.0,HTTP1.1,HTTPS2.0

HTTP請求概述

請求資訊:

    包含三大部分:請求行,請求頭,請求實體.

    請求行:位於請求資訊的第一行,格式:請求方式get/post 資源路徑 HTTP版本號

          get請求方式:a,若請求伺服器上的某個資源,沒有指定請求方式,則預設為GET方式

                     b,可以通過GET方式向伺服器傳遞資料,具體方式就是在URL請求路徑加上?多個引數分割

          post請求方式:a,若使用post請求方式傳遞資料,可以藉助form表單的method="post"

                     b,資料安全,且長度沒有限制

    請求頭:<1>,Accept:瀏覽器可接受的MIME型別(內容型別)(Tomcat安裝目錄/conf/web,xml中查詢)

          <2>,Accept-Charset:告知伺服器,客戶端支援哪種字符集

          <3>,Accept-Encoding:瀏覽器能夠進行解碼的資料編碼方式

          <4>,Accept-Language:瀏覽器支援的語言.

          <5>,Referer:當前頁面有哪個頁面訪問過來的.

          <6>,Content-Type:通知伺服器請求正文的MIME型別.

          <7>,Content-Length:請求正文的長度

          <8>,If-Modified-Since:通知伺服器,快取的檔案的最後修改時間.

          <9>User-Agent:通知伺服器瀏覽器型別.

          <10>,Connection:表示是否需要持久連線.如果伺服器看到這裡的值為"keep-Alive",或者看到的請求使用的是HTTP 1.1(HTTP1.1預設進行持久連線)

    請求實體:從第一個空行開始,後面的都是正文.(可以沒有),只有POST請求才有請求實體

響應資訊:

包含三大部分:

        響應行:位於響應資訊的第一行.格式:HTTP版本號 狀態碼:200(OK) 404(資源名寫錯了) 500(服務端後臺的java程式碼寫錯了)

        響應頭:Server:告訴客戶端伺服器使用的容器型別

              Content-Type:當前響應的MIME格式:text/html--->網頁文字

              Transfer-Encoding:是否要加密

              Date:響應的時間,什麼時候響應的.

        響應實體

GET和POST的區別(面試容易考到):

Get方式請求:

        1):請求的資料全部在瀏覽器位址列(很不安全).

        2):觀察請求資訊:請求資訊會全部儲存到請求行中.

Post方式請求:

        1):請求的資料不會出現在瀏覽器的位址列(比較安全)

        2):觀察請求資訊:請求資訊會全部儲存到請求實體中

引數連線:資源?引數名=引數值&引數名=引數值&....

        資源後第一個引數使用?連線,其他使用&連線.

GET和POST請求的區別:

        1):GET的請求資料在位址列,而POST不會,POST比GET跟安全.

        2):POST請求的引數存放在請求實體中,而get存放於請求行中.

        3):GET方式請求的資料不能超過2k,而POST沒有上限.

           比如檔案上傳時,必須使用POST方式.

        4):GET可以快取,而POST沒有快取

    查詢的時候使用GET其他時候使用POST.表單全部使用post提交,

    哪些時候是GET呢?

        1:直接在瀏覽器位址列敲回車.

        2:表單中,method=get.

        3:超連結.

    只有表單中使用method=post,才是POST方式.