1. 程式人生 > >第四天:HTTP&Tomcat

第四天:HTTP&Tomcat

tomcat

一、HTTP協議

1、HTTP協議的概述

<1>什麽是HTTP協議

HTTP協議:超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。用於定義WEB瀏覽器與WEB服務器之間交換數據的過程

<2>HTTP協議的作用及特點

①HTTP協議的作用

HTTP協議是學習javaweb開發的基石,不深入了解HTTP協議,就不能說掌握了WEB開發,更無法管理和維護一些復雜的WEB站點

②HTTP協議的特點

a)基於請求/響應模型的協議。請求和響應必須成對:先有請求後有響應

b)HTTP協議默認的端口:80

<3>HTTP協議的版本

①HTTP/1.0,發送請求,創建一次連接,獲得一個web資源,連接斷開

②HTTP/1.1,發送請求,創建一次;連接,獲得多個web資源,連接斷開

<4>HTTP協議的組成

HTTP請求協議、HTTP響應協議

HTTP請求包括:請求行、請求頭、請求體

HTTP響應包括:響應行、響應頭、響應體

技術分享

技術分享

<5>HTTP協議入門

①準備工作

a)創建項目,javaWeb項目,選擇版本為2.5

步驟1:在STS中New/Dynaimc Web Project

技術分享

步驟2:

技術分享 測試用例,編寫“form.html”頁面,並提供兩個表單,分別設置表單的提交方式為:

get和post。將表單提交位置設置成#,表示提交到當前表單

技術分享

技術分享

安裝HttpWatch,用於抓取HTTP協議的數據包(抓包)

技術分享

②HTTP請求的詳解

技術分享

如下圖,提供兩種請求方式抓包結果:

GET請求抓包數據

技術分享

POST請求抓包數據

技術分享

請求行

技術分享

請求頭

技術分享

技術分享

技術分享

請求體

技術分享

③HTTP響應的詳解

技術分享

如下圖,提供的響應的抓包結果(HttpWatch只支持GBK編碼,否則中文會出現亂碼)

技術分享

響應行

技術分享

響應頭

技術分享

技術分享

技術分享

響應體

響應體就是服務器發送給瀏覽器的正文

<6>HTTP協議詳解

HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規範化工作正在進行之中,而且HTTP-NG(Next Generation of HTTP)的建議已經提出。

HTTP協議的主要特點可概括如下:

1.支持客戶/服務器模式。

2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯系的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。

3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。采用這種方式可以節省傳輸時間。

5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

Ⅰ、HTTP協議詳解之URL篇


http(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的連接方式,HTTP1.1版本中給出一種持續連接的機制,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。


HTTP URL (URL是一種特殊類型的URI,包含了用於查找某個資源的足夠的信息)的格式如下:

http://host[":"port][abs_path]

http表示要通過HTTP協議來定位網絡資源;host表示合法的Internet主機域名或者IP地址;port指定一個端口號,為空則使用缺省端口80;abs_path指定請求資源的URI;如果URL中沒有給出abs_path,那麽當它作為請求URI時,必須以“/”的形式給出,通常這個工作瀏覽器自動幫我們完成。

eg:

1、輸入:www.guet.edu.cn

瀏覽器自動轉換成:http://www.guet.edu.cn/

2、http:192.168.0.116:8080/index.jsp


Ⅱ、HTTP協議詳解之請求篇


http請求由三部分組成,分別是:請求行、消息報頭、請求正文


1、請求行以一個方法符號開頭,以空格分開,後面跟著請求的URI和協議的版本,格式如下:Method Request-URI HTTP-Version CRLF

其中 Method表示請求方法;Request-URI是一個統一資源標識符;HTTP-Version表示請求的HTTP協議版本;CRLF表示回車和換行(除了作為結尾的CRLF外,不允許出現單獨的CR或LF字符)。


請求方法(所有方法全為大寫)有多種,各個方法的解釋如下:

GET 請求獲取Request-URI所標識的資源

POST 在Request-URI所標識的資源後附加新的數據

HEAD 請求獲取由Request-URI所標識的資源的響應消息報頭

PUT 請求服務器存儲一個資源,並用Request-URI作為其標識

DELETE 請求服務器刪除Request-URI所標識的資源

TRACE 請求服務器回送收到的請求信息,主要用於測試或診斷

CONNECT 保留將來使用

OPTIONS 請求查詢服務器的性能,或者查詢與資源相關的選項和需求

應用舉例:

GET方法:在瀏覽器的地址欄中輸入網址的方式訪問網頁時,瀏覽器采用GET方法向服務器獲取資源,eg:GET /form.html HTTP/1.1 (CRLF)


POST方法要求被請求服務器接受附在請求後面的數據,常用於提交表單。

eg:POST /reg.jsp HTTP/ (CRLF)

Accept:image/gif,image/x-xbit,... (CRLF)

...

HOST:www.guet.edu.cn (CRLF)

Content-Length:22 (CRLF)

Connection:Keep-Alive (CRLF)

Cache-Control:no-cache (CRLF)

(CRLF) //該CRLF表示消息報頭已經結束,在此之前為消息報頭

user=jeffrey&pwd=1234 //此行以下為提交的數據


HEAD方法與GET方法幾乎是一樣的,對於HEAD請求的回應部分來說,它的HTTP頭部中包含的信息與通過GET請求所得到的信息是相同的。利用這個方法,不必傳輸整個資源內容,就可以得到Request-URI所標識的資源的信息。該方法常用於測試超鏈接的有效性,是否可以訪問,以及最近是否更新。

2、請求報頭後述

3、請求正文(略)


Ⅲ、HTTP協議詳解之響應篇


在接收和解釋請求消息後,服務器返回一個HTTP響應消息。


HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文

1、狀態行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。

狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:

1xx:指示信息--表示請求已接收,繼續處理

2xx:成功--表示請求已被成功接收、理解、接受

3xx:重定向--要完成請求必須進行更進一步的操作

4xx:客戶端錯誤--請求有語法錯誤或請求無法實現

5xx:服務器端錯誤--服務器未能實現合法的請求

常見狀態代碼、狀態描述、說明:

200 OK //客戶端請求成功

400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解

401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用

403 Forbidden //服務器收到請求,但是拒絕提供服務

404 Not Found //請求資源不存在,eg:輸入了錯誤的URL

500 Internal Server Error //服務器發生不可預期的錯誤

503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

eg:HTTP/1.1 200 OK (CRLF)


2、響應報頭後述


3、響應正文就是服務器返回的資源的內容


Ⅳ、HTTP協議詳解之消息報頭篇


HTTP消息由客戶端到服務器的請求和服務器到客戶端的響應組成。請求消息和響應消息都是由開始行(對於請求消息,開始行就是請求行,對於響應消息,開始行就是狀態行),消息報頭(可選),空行(只有CRLF的行),消息正文(可選)組成。


HTTP消息報頭包括普通報頭、請求報頭、響應報頭、實體報頭。

每一個報頭域都是由名字+“:”+空格+值 組成,消息報頭域的名字是大小寫無關的。


1、普通報頭

在普通報頭中,有少數報頭域用於所有的請求和響應消息,但並不用於被傳輸的實體,只用於傳輸的消息。

eg:

Cache-Control 用於指定緩存指令,緩存指令是單向的(響應中出現的緩存指令在請求中未必會出現),且是獨立的(一個消息的緩存指令不會影響另一個消息處理的緩存機制),HTTP1.0使用的類似的報頭域為Pragma。

請求時的緩存指令包括:no-cache(用於指示請求或響應消息不能緩存)、no-store、max-age、max-stale、min-fresh、only-if-cached;

響應時的緩存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.

eg:為了指示IE瀏覽器(客戶端)不要緩存頁面,服務器端的JSP程序可以編寫如下:response.sehHeader("Cache-Control","no-cache");

//response.setHeader("Pragma","no-cache");作用相當於上述代碼,通常兩者//合用

這句代碼將在發送的響應消息中設置普通報頭域:Cache-Control:no-cache



Date普通報頭域表示消息產生的日期和時間


Connection普通報頭域允許發送指定連接的選項。例如指定連接是連續,或者指定“close”選項,通知服務器,在響應完成後,關閉連接


2、請求報頭

請求報頭允許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。

常用的請求報頭

Accept

Accept請求報頭域用於指定客戶端接受哪些類型的信息。eg:Accept:image/gif,表明客戶端希望接受GIF圖象格式的資源;Accept:text/html,表明客戶端希望接受html文本。

Accept-Charset

Accept-Charset請求報頭域用於指定客戶端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在請求消息中沒有設置這個域,缺省是任何字符集都可以接受。

Accept-Encoding

Accept-Encoding請求報頭域類似於Accept,但是它是用於指定可接受的內容編碼。eg:Accept-Encoding:gzip.deflate.如果請求消息中沒有設置這個域服務器假定客戶端對各種內容編碼都可以接受。

Accept-Language

Accept-Language請求報頭域類似於Accept,但是它是用於指定一種自然語言。eg:Accept-Language:zh-cn.如果請求消息中沒有設置這個報頭域,服務器假定客戶端對各種語言都可以接受。

Authorization

Authorization請求報頭域主要用於證明客戶端有權查看某個資源。當瀏覽器訪問一個頁面時,如果收到服務器的響應代碼為401(未授權),可以發送一個包含Authorization請求報頭域的請求,要求服務器對其進行驗證。

Host(發送請求時,該報頭域是必需的)

Host請求報頭域主要用於指定被請求資源的Internet主機和端口號,它通常從HTTP URL中提取出來的,eg:

我們在瀏覽器中輸入:http://www.guet.edu.cn/index.html

瀏覽器發送的請求消息中,就會包含Host請求報頭域,如下:

Host:www.guet.edu.cn

此處使用缺省端口號80,若指定了端口號,則變成:Host:www.guet.edu.cn:指定端口號

User-Agent

我們上網登陸論壇的時候,往往會看到一些歡迎信息,其中列出了你的操作系統的名稱和版本,你所使用的瀏覽器的名稱和版本,這往往讓很多人感到很神奇,實際上,服務器應用程序就是從User-Agent這個請求報頭域中獲取到這些信息。User-Agent請求報頭域允許客戶端將它的操作系統、瀏覽器和其它屬性告訴服務器。不過,這個報頭域不是必需的,如果我們自己編寫一個瀏覽器,不使用User-Agent請求報頭域,那麽服務器端就無法得知我們的信息了。

請求報頭舉例:

GET /form.html HTTP/1.1 (CRLF)

Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)

Accept-Language:zh-cn (CRLF)

Accept-Encoding:gzip,deflate (CRLF)

If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)

If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)

User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)

Host:www.guet.edu.cn (CRLF)

Connection:Keep-Alive (CRLF)

(CRLF)


3、響應報頭

響應報頭允許服務器傳遞不能放在狀態行中的附加響應信息,以及關於服務器的信息和對Request-URI所標識的資源進行下一步訪問的信息。

常用的響應報頭

Location

Location響應報頭域用於重定向接受者到一個新的位置。Location響應報頭域常用在更換域名的時候。

Server

Server響應報頭域包含了服務器用來處理請求的軟件信息。與User-Agent請求報頭域是相對應的。下面是

Server響應報頭域的一個例子:

Server:Apache-Coyote/1.1

WWW-Authenticate

WWW-Authenticate響應報頭域必須被包含在401(未授權的)響應消息中,客戶端收到401響應消息時候,並發送Authorization報頭域請求服務器對其進行驗證時,服務端響應報頭就包含該報頭域。

eg:WWW-Authenticate:Basic realm="Basic Auth Test!" //可以看出服務器對請求資源采用的是基本驗證機制。



4、實體報頭

請求和響應消息都可以傳送一個實體。一個實體由實體報頭域和實體正文組成,但並不是說實體報頭域和實體正文要在一起發送,可以只發送實體報頭域。實體報頭定義了關於實體正文(eg:有無實體正文)和請求所標識的資源的元信息。

常用的實體報頭

Content-Encoding

Content-Encoding實體報頭域被用作媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容的編碼,因而要獲得Content-Type報頭域中所引用的媒體類型,必須采用相應的解碼機制。Content-Encoding這樣用於記錄文檔的壓縮方法,eg:Content-Encoding:gzip

Content-Language

Content-Language實體報頭域描述了資源所用的自然語言。沒有設置該域則認為實體內容將提供給所有的語言閱讀

者。eg:Content-Language:da

Content-Length

Content-Length實體報頭域用於指明實體正文的長度,以字節方式存儲的十進制數字來表示。

Content-Type

Content-Type實體報頭域用語指明發送給接收者的實體正文的媒體類型。eg:

Content-Type:text/html;charset=ISO-8859-1

Content-Type:text/html;charset=GB2312

Last-Modified

Last-Modified實體報頭域用於指示資源的最後修改日期和時間。

Expires

Expires實體報頭域給出響應過期的日期和時間。為了讓代理服務器或瀏覽器在一段時間以後更新緩存中(再次訪問曾訪問過的頁面時,直接從緩存中加載,縮短響應時間和降低服務器負載)的頁面,我們可以使用Expires實體報頭域指定頁面過期的時間。eg:Expires:Thu,15 Sep 2006 16:23:12 GMT

HTTP1.1的客戶端和緩存必須將其他非法的日期格式(包括0)看作已經過期。eg:為了讓瀏覽器不要緩存頁面,我們也可以利用Expires實體報頭域,設置為0,jsp中程序如下:response.setDateHeader("Expires","0");



Ⅴ、利用telnet觀察http協議的通訊過程


實驗目的及原理:

利用MS的telnet工具,通過手動輸入http請求信息的方式,向服務器發出請求,服務器接收、解釋和接受請求後,會返回一個響應,該響應會在telnet窗口上顯示出來,從而從感性上加深對http協議的通訊過程的認識。


實驗步驟:


1、打開telnet

1.1 打開telnet

運行-->cmd-->telnet


1.2 打開telnet回顯功能

set localecho


2、連接服務器並發送請求

2.1 open www.guet.edu.cn 80 //註意端口號不能省略


HEAD /index.asp HTTP/1.0

Host:www.guet.edu.cn

/*我們可以變換請求方法,請求桂林電子主頁內容,輸入消息如下*/

open www.guet.edu.cn 80

GET /index.asp HTTP/1.0 //請求資源的內容

Host:www.guet.edu.cn


2.2 open www.sina.com.cn 80 //在命令提示符號下直接輸入telnet www.sina.com.cn 80

HEAD /index.asp HTTP/1.0

Host:www.sina.com.cn


3 實驗結果:


3.1 請求信息2.1得到的響應是:


HTTP/1.1 200 OK //請求成功

Server: Microsoft-IIS/5.0 //web服務器

Date: Thu,08 Mar 200707:17:51 GMT

Connection: Keep-Alive

Content-Length: 23330

Content-Type: text/html

Expries: Thu,08 Mar 2007 07:16:51 GMT

Set-Cookie: ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH; path=/

Cache-control: private


//資源內容省略


3.2 請求信息2.2得到的響應是:


HTTP/1.0 404 Not Found //請求失敗

Date: Thu, 08 Mar 2007 07:50:50 GMT

Server: Apache/2.0.54 <Unix>

Last-Modified: Thu, 30 Nov 2006 11:35:41 GMT

ETag: "6277a-415-e7c76980"

Accept-Ranges: bytes

X-Powered-By: mod_xlayout_jh/0.0.1vhs.markII.remix

Vary: Accept-Encoding

Content-Type: text/html

X-Cache: MISS from zjm152-78.sina.com.cn

Via: 1.0 zjm152-78.sina.com.cn:80<squid/2.6.STABLES-20061207>

X-Cache: MISS from th-143.sina.com.cn

Connection: close



失去了跟主機的連接


按任意鍵繼續...


4 .註意事項:1、出現輸入錯誤,則請求不會成功。

2、報頭域不分大小寫。

3、更深一步了解HTTP協議,可以查看RFC2616,在http://www.letf.org/rfc上找到該文件。

4、開發後臺程序必須掌握http協議

二、Tomcat服務器

2、Web開發概述

<1>Web通信

WEB采用B/C通信模式,通過超文本傳送協議(HTTP,Hypertext transport protocol)進行通信。通過瀏覽器地址欄編寫URL,向服務器發送一個請求,服務器端根據請求進行相應的處理,處理完成之後,會向瀏覽器作出一個響應,即將服務器資源發送給瀏覽器

技術分享

<2>軟件架構

①C/S架構:Client/Server 客戶端/服務端。要求客戶端電腦安裝一個客戶端程序

常見應用:QQ,迅雷,360,旺旺等

優點:

用戶體驗好,效果炫

對信息安全的控制較強

應用服務器運行數據負荷較輕,部分計算功能在客戶端完成

缺點:

占用磁盤空間

維護麻煩

安裝使用依賴其他條件

②B/S架構:Browser/Server 瀏覽器/服務器。通過瀏覽器與服務器交互,不需要安裝其他程序

常見應用:網銀系統,淘寶,京東,12306等

優點:

維護和升級簡單,無縫升級

不用必須安裝程序,操作系統內置了瀏覽器

缺點:

動畫效果受瀏覽器限制

對信息安全控制較差。例如:網銀就需要使用U盾,在瀏覽器端加密

應用服務運行數據負荷較重。大部分計算都在服務器端,增加服務器壓力。使用Ajax可以改善 部分用戶體驗

<3>WEB資源介紹

靜態資源:指web頁面中供人們瀏覽的數據始終是不變。比如:HTML、CSS、JS、圖片、多媒體

動態資源:指web頁面中人們瀏覽的數據是由程序產生的,不同時間點訪問web頁面看到的內容各不相同。比如:JSP/Servlet、ASP、PHP

<4>WEB服務器

JCP(Java Community Process)Java技術規範指定與更新的國際組織。主要維護規範包括:J2ME、J2SE、J2EE、XML等

J2EE企業級開發Java規範。標準規範包括:servlet、jsp、jdbc、xml、jta、javamail等。在java中規範就是接口。J2EE又稱為JavaEE

WEb服務器對JavaEE規範部分或全部支持(實現),也就是WEB服務器實現部分或全部接口

常見的WEB服務器:

①Tomcat:Apache組織提供一個免費的小型的服務器軟件,支持Servlet和JSP規範

②WebLogic:Bea公司的一個收費的大型的服務器軟件,後被Oracle收購,支持EE的所有的規範

③WebSphere:IBM公司的一個收費的大型的服務器軟件,支持EE的所有的規範

④JBoss:是一個基於J2EE的開放源代碼的應用服務器。JBoss是一個管理EJB的容器和服務器, JBoss核心服務不包括支持servlet/JSP的WEB容器,一般與Tomcat或Jetty綁定使用

技術分享

<5>URL請求路徑(待定)

URL(Uniform Resource Location),統一資源定位符是對互聯網上資源位置的一種表示,互聯網上的每個文件都是一個唯一的URL

技術分享

例如:

技術分享

3、Tomcat介紹

<1>概述

Tomcat服務器是一個免費的開放源代碼的web應用服務器,屬於輕量級應用服務器,在中小型系統中和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP程序的首選

支持Servlet和JSP規範,且最新的Servlet和JSP規範總是能在Tomcat中得到體現

Apache軟件基金會有兩款常用軟件:apache web服務器和tomcat web服務器

①apache web 服務器專門處理HTML頁面的

②tomcat web 服務器,不僅可以處理servlet和jsp,而且也能處理html頁面,不過不如apache web 服務器

③在開發中,一般使用tomcat處理servlet和jsp,使用apache服務器處理html頁面。及apache和 tomcat被整合在一起使用

④學習階段,我們使用tomcat所有的特性

技術分享

<2>Tomcat版本

tomcat目前存在很多不同的版本,官網地址:http://tomcat.apache.org/whichversion.html

技術分享

最新版本myeclipse可選的WEB項目版本

技術分享

<3>安裝Tomcat

步驟一:下載一個tomcat服務器軟件

技術分享

技術分享

步驟二:解壓下載好的zip文件

技術分享

<4>Tomcat目錄結構

技術分享

技術分享

技術分享

<5>Tomcat啟動和訪問

tomcat解壓目錄/bin/startup.bat 雙擊運行啟動tomcat

技術分享

技術分享

訪問路徑:http://localhost:8080/

技術分享

<6>Tomcat常見問題

①JAVA_HOME的配置

如果沒有配置JAVA_HOME環境變量,在雙擊“startup.bat”文件運行tomcat時,將一閃立即關閉。且必須配置正確,及JAVA_HOME指向JDK的安裝目錄

技術分享

②端口號沖突

技術分享

控制臺將出現大量異常信息,描述的是3個端口被占用(8080、8009、8005)

通過$JAVA_HOME/conf/server.xml修改端口號

技術分享

4、web項目目錄結構

在javaEE規範中,web項目存在一定的目錄結構,具體結構如下:

技術分享

5、eclipse發布web項目

<1>配置Tomcat

步驟1:獲得服務器運行環境配置,Window/Preferences/Server/Runtime Environmen

技術分享

步驟2:添加服務器

技術分享

步驟3:選擇服務器在硬盤的地址,然後所有的都是確定/Next/Finsh

技術分享

步驟4:完成成功

技術分享

步驟5:設置發布位置

技術分享

修改tomcat發布的位置

技術分享

<2>發布web項目

步驟1:項目右鍵/Run As/Run on Server

技術分享

步驟2:選擇WEB服務器執行程序

技術分享

步驟3:選擇或添加文本框

技術分享


本文出自 “鵬哥的博客” 博客,謝絕轉載!

第四天:HTTP&Tomcat