先把昨天剩餘的一點知識補上,打包web應用war;
C:/new>jar -cvf news.war *.*/ .;
代表在c盤下的javaweb應用news文件,打包成war,擴展名是war;把這個news目錄下的所有文件和他下面的文件夾的內容都打到war包裏,最後一點代表打包到當前文件夾;
這個僅適於文件夾過大,在運行tomcat程序時自動解包;挺方便的;
在http://localhost:8080/主頁裏,Tomcat Manager代表創建一個管理員賬戶,需要在Apache-tomcat-6.0.18\conf裏的tomcat-users.xml文件里加入下列用戶名和密碼;
<role rolename="manager"/>
<user username="tomcat" password="tomcat" roles="manager"/>
這樣就可以打開管理了;爲了防止賬戶被盜,所以用完之後最好刪掉;
HTTP簡介
客戶端連上web服務器後,若想獲得web服務器中的某個web資源,需遵守一定的通訊格式,HTTP協議用於定義客戶端與web服務器通迅的格式。
WEB瀏覽器與WEB服務器之間的一問一答的交互過程必須遵循一定的規則,這個規則就是HTTP協議。
HTTP是hypertext transfer protocol(超文本傳輸協議)的簡寫,它是TCP/IP協議集中的一個應用層協議,用於定義WEB瀏覽器與WEB服務器之間交換數據的過程以及數據本身的格式。
HTTP協議的版本
HTTP/1.0、HTTP/1.1
HTTP協議是學習JavaWEB開發的基石,不深入瞭解HTTP協議,就不能說掌握了WEB開發,更無法管理和維護一些複雜的WEB站點。深入理解HTTP協議,對管理和維護複雜的WEB站點、開發具有特殊用途的WEB服務器程序具有直接影響。
http1.0的會話方式:
瀏覽器與WEB服務器的連接過程是短暫的,每次連接只處理一個請求和響應。對每一個頁面的訪問,瀏覽器與WEB服務器都要建立一次單獨的連接。
支持代理:有緩存;
瀏覽器到WEB服務器之間的所有通訊都是完全獨立分開的請求和響應對。
HTTP 1.1的特點
在一個TCP連接上可以傳送多個HTTP請求和響應
多個請求和響應過程可以重疊進行
增加了更多的請求頭和響應頭
HTTP1.0和HTTP1.1的區別
在HTTP1.0協議中,客戶端與web服務器建立連接後,只能獲得一個web資源。
HTTP1.1協議,允許客戶端與web服務器建立連接後,在一個連接上獲取多個web資源。
使用telnet舉例說明。
首先在命令窗口輸入 telnet 主機名 端口號;
在輸入ctrl+],再按空格;GET /news/1.html HTTP/1.1 news代表javaweb應用,後面是裏面的html文件 和http版本;
如果不會用tenlnet或者用不了,請點擊我的博客裏的另一篇文章有專門介紹的;
安裝IE瀏覽器插件HttpWatch,查看IE瀏覽器通過HTTP協議獲取某個頁面。
安裝HttpWatch:
HttpWatch工具的使用
功能:監聽和截獲本地機器每次向服務器發送的http請求數據和服務器向本地機器返回的http響應數據。
下載:http://www.httpwatch.com/
下載後,直接雙擊下載文件安裝即可。之後打開IE瀏覽器,選擇“工具”→“瀏覽器欄”→“HttpWatch Professional”。
這樣操作之後,就可以打開HttpWatch工具了。
一個web頁面中,使用img標籤引用了三幅圖片,當客戶端訪問服務器中的這個web頁面時,客戶端總共會訪問幾次服務器,即向服務器發送了幾次HTTP請求。
HTTP請求消息
客戶端連上服務器後,向服務器請求某個web資源,稱之爲客戶端向服務器發送了一個HTTP請求。一個完整的HTTP請求包括如下內容:
一個請求行、若干消息頭、以及實體內容,
請求消息的結構:
一個請求行、若干消息頭、以及實體內容,其中的一些消息頭和實體內容都是可選的,消息頭和實體內容之間要用空行隔開。
舉例:
GET /books/java.html HTTP/1.1 //請求行
Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/links.asp
User-Agent: Mozilla/4.0
Accept-Encoding: gzip, deflate //多個消息頭
//一個空行
請求行用於描述客戶端的請求方式、請求的資源名稱,以及使用的HTTP協議版本號
消息頭用於描述客戶端請求哪臺主機,以及客戶端的一些環境信息等
請求行中的GET稱之爲請求方式,請求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用的有: GET、 POST
用戶如沒有設置,默認情況下瀏覽器向服務器發送的都是get請求,例如在瀏覽器直接輸地址訪問,點超鏈接訪問等都是get,用戶如想把請求方式改爲post,可通過更改表單的提交方式實現。
不管POST或GET,都用於向服務器請求某個WEB資源,這兩種方式的區別主要表現在數據傳遞上:
如請求方式爲GET方式,則可以在請求的URL地址後以?的形式帶上交給服務器的數據,多個數據之間以&進行分隔,例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特點:在URL地址後附帶的參數是有限制的,其數據容量通常不能超過1K。
如請求方式爲POST方式,則可以在請求的實體內容中向服務器發送數據,Post方式的特點:傳送的數據量無限制。
用於HTTP請求中的常用頭
Accept: text/html,p_w_picpath/*
Accept-Charset: ISO-8859-1
Accept-Encoding: gzip,compress
Accept-Language: en-us,zh-cn
Host: www.it315.org:80
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT
Referer: http://www.it315.org/index.jsp
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Cookie
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
HTTP響應
一個HTTP響應代表服務器向客戶端回送的數據,它包括:
一個狀態行、若干消息頭、以及實體內容 。
舉例:
HTTP/1.1 200 OK //狀態行
Server: Microsoft-IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Cache-control: private //多個消息頭
// 一個空行
<HTML> // 實體內容
<BODY>
……
1.狀態行用於描述服務器對請求的處理結果。
2.消息頭用於描述服務器的基本信息,以及數據的描述,服務器通過這些數據的描述信息,可以通知客戶端如何處理等一會兒它回送的數據。
3.代表服務器向客戶端回送的數據
在一個HTTP響應中,WEB服務器通過響應頭向web客戶端描述客戶端的請求成功與否,以及它所發送的數據類型等一些信息,客戶端通過這些信息,進而可以知道如何對數據進行處理
狀態行
格式: HTTP版本號 狀態碼 原因敘述<CRLF>
舉例:HTTP/1.1 200 OK
狀態碼用於表示服務器對請求的處理結果,它是一個三位的十進制數。響應狀態碼分爲5類,如下所示:
200(正常)
表示一切正常,返回的是正常請求結果。
302/307(臨時重定向)
指出被請求的文檔已被臨時移動到別處,此文檔的新的URL在Location響應頭中給出。
304(未修改)
表示客戶機緩存的版本是最新的,客戶機應該繼續使用它。
403(禁止)
服務器理解客戶端請求,但拒絕處理它。通常由於服務器上文件或目錄的權限設置所致。
404(找不到)
服務器上不存在客戶機所請求的資源。
500(內部服務器錯誤)
服務器端的CGI、ASP、JSP等程序發生錯誤。
HTTP請求中的常用響應頭
Location: http://www.it315.org/index.jsp
Server:apache tomcat
Content-Encoding: gzip
Content-Length: 80
Content-Language: zh-cn
Content-Type: text/html; charset=GB2312
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT
Refresh: 1;url=http://www.it315.org
Content-Disposition: p_w_upload; filename=aaa.zip
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
ETag: W/"7777-1242234904000"
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
帶顏色的代表常用的三個響應頭Expires(0,1)、Cache-Control、Pragma;
在HTTP消息中,也可以使用一些在HTTP 1.1正式規範裏沒有定義的頭字段,這些頭字段統稱爲自定義的HTTP頭或擴展頭,它們通常被當作是一種實體頭處理。
現在流行的瀏覽器實際上都支持Cookie、Set-Cookie、Refresh和Content-Disposition等幾個常用的擴展頭字段。
Refresh頭字段
Refresh: 1
Refresh: 1;url=http://www.it315.org
Content-Disposition頭字段
Content-Type: application/octet-stream
Content-Disposition: p_w_upload; filename=aaa.zip
1.請按自己的理解簡述HTTP 1.1與HTTP 1.0的區別。
HTTP1.0特點:他的每一次連接都是隻處理一個請求和響應,支持代理,瀏覽器到WEB服務器之間的所有通訊都是完全獨立分開的請求和響應對。
HTTP1.1特點:在一個TCP連接上可以傳送多個HTTP請求和響應
多個請求和響應過程可以重疊進行
增加了更多的請求頭和響應頭
2.請描述HTTP請求消息和HTTP響應消息的組成結構,並各舉一例進行說明。
請求消息:
POST /aa/1.html HTTP/1.1 //請求行
Accept: text/html, application/xhtml+xml, */*
Referer: http://localhost:8080/aa/1.html
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 11
Connection: Keep-Alive
Cache-Control: no-cache //多個消息頭
//一個空行
響應消息:
HTTP/1.1 200 OK //響應行
Server: Apache-Coyote/1.1
ETag: W/"194-1350445441233"
Last-Modified: Wed, 17 Oct 2012 03:44:01 GMT
Content-Type: text/html
Content-Length: 194
Date: Wed, 17 Oct 2012 11:05:23 GMT //多個消息頭
//一個空行
11111111111111111111111111111111111111111111111111 // 實體內容
<img src="D:\aa\460.jpg" />
<form method="post">
<input type="text" name="username" />
<input type="submit" value="提交" />
</form>
3.瀏覽器分別在哪些情況下使用GET方式和POST方式訪問WEB服務器?如果瀏覽器傳遞給WEB服務器的參數內容超過1K,應該使用那種方式發送請求消息?
數據容量通常不能超過1K,安全性差的使用GET
數據容量超過1k,安全性好的可以使用POST;
應該用POST;
4.請描述200、302、304、404和500等響應狀態碼所表示的意義。
200 表示正常,返回正常結果;
302:表示臨時重定向,指出被要求的文檔已被臨時移動到別處
304:表示未修改,客戶機緩存的版本是最新的,客戶機應該繼續使用;
403:表示禁止,服務器理解客戶端請求,但拒絕處理;
404:表示找不到,服務器不存在客戶機所請求的資源;
500:內部服務器出錯;
5.請列舉三種禁止瀏覽器緩存的頭字段,並寫出相應的設置值。
1、 Expires: 0
2、Cache-Control: no-cache
3、Pragma: no-cache 這三個頭組合使用,讓瀏覽器不要緩存數據