Javaweb客戶端和服務器端交互的原理_第1頁
Javaweb客戶端和服務器端交互的原理_第2頁
Javaweb客戶端和服務器端交互的原理_第3頁
Javaweb客戶端和服務器端交互的原理_第4頁
Javaweb客戶端和服務器端交互的原理_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Javaweb客戶端和效勞器端交互的原理其實客戶端和效勞器端的交互原理很簡單:即先是瀏覽器和效勞器端建立Socket無狀態(tài)連接,也就是短連接,然后通過10流進行報文信息(這個報文是嚴格遵循報文接口的)的交互,最后會話結束后就關閉連接。對于這些底層的協(xié)議和報文的打包解包交互的實現(xiàn),其實java和瀏覽器早都已經(jīng)封裝好了,程序員只要專注于業(yè)務邏輯的實現(xiàn)就行。TCP/IP整體構架概述TCP/IP協(xié)議并不完全符合OSI的七層參考模型。傳統(tǒng)的開放式系統(tǒng)互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執(zhí)行某一特定任務。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數(shù)據(jù)鏈路層、網(wǎng)路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協(xié)議采用了4層的層級結構,每一層都呼叫它的下一層所提供的網(wǎng)絡來完成自己的需求。這4層分別為:應用層:應用程序間溝通的層,如超文本傳送協(xié)議()、簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡遠程訪問協(xié)議(Tel)等。傳輸層:在此層中,它提供了節(jié)點間的數(shù)據(jù)傳送效勞,如傳輸控制協(xié)議(TCP)、用戶數(shù)據(jù)報協(xié)議(UDP)等,TCP和UDP給數(shù)據(jù)包參加傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又校@一層負責傳送數(shù)據(jù),并且確定數(shù)據(jù)已被送達并接收?;ミB網(wǎng)絡層:負責提供根本的數(shù)據(jù)封包傳送功能,讓每一塊數(shù)據(jù)包都能夠到達目的主機(但不檢查是否被正確接收),如網(wǎng)際協(xié)議(IP)。網(wǎng)絡接口層:對實際的網(wǎng)絡媒體的管理,定義如何使用實際網(wǎng)絡(如Ether、SerialLine等)來傳送數(shù)據(jù)。協(xié)議介紹:是一種超文本傳送協(xié)議(HyperTextTransferProtocol),是一套計算機在網(wǎng)絡中通信的一種規(guī)那么。在TCP/IP體系結構中,屬于應用層協(xié)議,位于TCP/IP協(xié)議的頂層是一種無狀態(tài)的的協(xié)議,意思是指在Web瀏覽器(客戶端)和Web效勞器之間不需要建立持久的連接。整個過程就是當一個客戶端向效勞器端發(fā)送一個請求(request),然后Web效勞器返回一個響應(response),之后連接就關閉了,在效勞端此時是沒有保存連接的信息。遵循請求/響應(request/response)模型的,所有的通信交互都被構造在一套請求和響應模型中。瀏覽WEB時,瀏覽器通過協(xié)議與WEB效勞器交換信息,Web效勞器向Web瀏覽器返回的文件都有與之相關的類型,這些信息類型的格式由MIME定義。協(xié)議的java實現(xiàn)方式不管是TCP/IP協(xié)議也好,還是協(xié)議也好,java都是通過套接字(java..Socket)來實現(xiàn)的,可以參考我的另一篇技術博客:一個工程看javaTCP/IPSocket編程(1.3版)a.定義的事務處理由以下四步組成:建立連接:例如我在瀏覽器里輸入cuishen.iteye.,客戶端請求這個地址時即翻開了web效勞器端口的一個套接字。因為在網(wǎng)絡中間作為傳遞數(shù)據(jù)的實體介質就是網(wǎng)線,數(shù)據(jù)實質上是通過IO流進行輸出和輸

入,這就不難理解我們?yōu)槭裁丛趯懸粋€Servlet的時候要引用importjava.io.*;的原因,包括我們在向客戶端回發(fā)結果的時候要用到PrintWriter對象的println()方法。其實請求的這個地址還要加上端口號80,80可以不寫,是因為瀏覽器默認的端口號是80。在Java底層代碼中是這樣實現(xiàn)的,只不過它們已經(jīng)幫我們做了。Socketsocket=newSocket("cuishen.iteye.",80);InputStreamin=socket.getInputStream();OutputStreamout=socket.getOutputStream();客戶端發(fā)送請求報文(request)一旦建立了TCP連接,Web瀏覽器就會向Web效勞器發(fā)送請求命令,是一個ASCII文本請求行,后跟0個或多個頭標,一個空行和實現(xiàn)請求的任意數(shù)據(jù)。即報文分四個局部:請求行,請求頭標,空行和請求數(shù)據(jù)請求行請求行由三個標記組成:請求方法、請求URL和版本,中間用空格分開例如:GETcuishen.iteye./blog/242842/1.1標準定義了8種可能的請求方法:(最常見的就是GET和POST兩種方法)GET—檢索URI中標識資源的一個簡單請求HEAD—與GET方法相同,效勞器只返回狀態(tài)行和頭標,并不返回請求文檔POST效勞器承受被寫入客戶端輸出流中的數(shù)據(jù)的請求

POST效勞器承受被寫入客戶端輸出流中的數(shù)據(jù)的請求PUT效勞器保存請求數(shù)據(jù)作為指定PUT效勞器保存請求數(shù)據(jù)作為指定URI新內容的請求DELETE—效勞器刪除URI中命名的資源的請求OPTIONS--關于效勞器支持的請求方法信息的請求TRACE—Web效勞器反應Http請求和其頭標的請求CONNECT--已文檔化但當前未實現(xiàn)的一個方法,預留做隧道處理2) 請求頭標請求頭標:由key:value健值組成,每行一對。請求頭標用來通知效勞器有關客戶端的功能和標識。HOST--請求的哪一個效勞器端地址,主地址,比方:我的技術blog:cuishen.iteye.User-Agent--用戶即客戶端可以使用的瀏覽器,如:Mozilla/4.0Aept—即客戶端可以承受的MIME類型列表,如image/gif、text/html、application/mswordContent-Length--只適用于POST請求,以字節(jié)給出POST數(shù)據(jù)的尺寸3) 空行發(fā)送回車符和退行,通知效勞器以下不再有頭標。4) 請求數(shù)據(jù)使用POST傳送數(shù)據(jù),最常使用的是Content-Type和Content-Length頭標。請求報文總結:我們可以這樣寫出一個標準的請求:POST/blog/2428421.1HOST:cuishen.iteye./User-Agent:Mozilla/4.0Apt:image/gif,text/html,application/pdf,image/png...key二value&key二value&key二value (POST()請求的數(shù)據(jù))這上面的一個例子意思是:我要去訪問的效勞器端的地址是cuishen.iteye./它下面的資源/blog/242842連起來就是:cuishen.iteye./blog/242842這個頁面用的是1.1標準,我的瀏覽器版本是Mozilla/4.0可以支持的MIME格式為image/gif,text/html,application/pdf,image/png...等等這個MIME格式我們在servlet中寫法是:response.setContentType("text/html;charset=gb2312");或者在jsp中寫法是:或者在html中寫法是:GET和POST最直觀的區(qū)別就是:GET方法將數(shù)據(jù)的請求跟在了所請求的URL后面,也就是在請求行里面我們是這么樣來做的:GET/blog/242842?key=value&key=value&key=value 1.1實際上用GET是這樣傳遞數(shù)據(jù)的:cuishen.iteye./?page=2 效勞器端響應請求生成結果并回發(fā)(response)Web效勞器解析請求,定位指定的資源cuishen.iteye./blog/242842根據(jù)請求時的GET/POST對應的用servlet里的doGet()/doPost()方法來處理(有可能是一些業(yè)務邏輯,也有可能是一些驗證等等,也有可能是一些數(shù)據(jù)查詢,提交等等)其有效的數(shù)據(jù)就key=value&key=value&key=value ,以及其它的一些封裝在request對象中的數(shù)據(jù)資源。處理請求之后,由response對象得到java.io.PrintWriter輸出流對象out,通過out.println();將數(shù)據(jù)以指定的格式,如按照response.setcontentType("text/html;charset二gb2312");的格式輸出到輸出流。它的響應報文與請求報文非常類似,其區(qū)別就在于:我們在請求階段的請求行被狀態(tài)行給替換了,再來看響應報文:一個響應報文由四個局部組成:狀態(tài)行、響應頭標、空行、響應數(shù)據(jù):.狀態(tài)行:狀態(tài)行由三個標記組成:版本、響應代碼和響應描述。100continue//繼續(xù)追加后繼內容200OK//一切正常301MovedPermanently//請求的文檔在其它地方,會自動連接403Forbidden//絕對拒絕你訪問這個資源,不管授權沒有400BadRequest//客戶端請求中的不良語法404NotFound//最常見,絕對是大名鼎鼎的找不到響應碼:1xx:提示性信息,告訴客戶端應該對某些其它的動作作出響應2xx:這些就代表了請求成功3xx:重定向,為了完成請求,必須進一步執(zhí)行的動作4xx:客戶端錯誤500-599:效勞器端的錯誤.響應頭標:像請求頭標一樣,它們指出效勞器的功能,標識出響應數(shù)據(jù)的細節(jié)。Date:Sat,31Decxx23:59:59GMT--響應生成的日期和時間ContentType:'text/html;charset=gb2312'Content-Length:122--響應中的字節(jié)數(shù),只在瀏覽器使用永久(Keep-alive)連接時需要。.空行:最后一個響應頭標之后是一個空行,發(fā)送回車符和退行,說明效勞器以下不再有頭標。.響應數(shù)據(jù):HTML文檔和圖像等,也就是HTML本身。out.println(" ");寫到客戶端。效勞器端關閉連接,客戶端解析回發(fā)響應報文,恢復頁面瀏覽器先解析狀態(tài)行,查看請求是否成功的狀態(tài)代碼--響應碼:404400200 解析每一個響應頭標,如:ContentType:text/html;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論