數據是如何從用戶到Servlet的,然後服務器生成的數據又如何反饋給用戶的?

           填寫表單並提交——瀏覽器編碼—提交— 解碼——存儲

 用戶以表單的形式提交,在標籤<form>中指定目標servlet ,找到後由servlet處理。

<form name="register" action="/CarProject3/UserServlet" method="get"></form>

在向服務器端提交請求時,瀏覽器需要將大量的數據一同提交給 Server 端, 而提交前,瀏覽器需要按照 Server 端可以識別的方式進行編碼。 

提交請求的過程由瀏覽器完成的,並且遵循 HTTP 協議,每一個從瀏覽器端到服務器端的一個請求,都包含了大量與該請求有關的信息,在 Servlet 中,HttpServletRequest 類將這些信息封裝起來,便於我們提取使用。在文件上載和表單提交的過程中,有兩個值得關心的問題,一是上載的數據是是採用的那種方式的編碼,這個問題的可以從 Content-Type 中得到答案,另一個是問題是上載的數據量有多少即Content-Length ,知道了它,就知道了 HttpServletRequest 的實例中有多少數據可以讀取出來。這兩個屬性,我們都可以直接從 HttpServletRequest 的一個實例中獲得,具體調用的方法是getContentType() 和 getContentLength() 。

服務器根據提交的信息處理請求,將處理後的數據封裝到HttpServletResponse中,然後由response對象讀出數據,返回給客戶端(瀏覽器)。

提交的方式有兩種,get和post兩種,他們的區別爲:

1.GET一般用於獲取/查詢資源信息,而POST一般用於更新資源信息。

2.根據HTTP規範,GET用於信息獲取,而且應該是安全的和冪等的

3.根據HTTP規範,POST表示可能修改變服務器上的資源的請求

4.GET請求的數據會附在URL之後(就是把數據放置在HTTP協議頭中),以?分割URL和傳輸數據,參數之間以&相連,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果數據是英文字母/數字,原樣發送,如果是空格,轉換爲+,如果是中文/其他字符,則直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX爲該符號以16進製表示的ASCII。POST把提交的數據則放置在是HTTP包的包體中。

5.特定的瀏覽器及服務器對URl的長度有限制,所以get提交的數據也會有限制,IE對URL長度的限制是2083字節(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操作系統的支持。

理論上講,POST是沒有大小限制的,HTTP協議規範也沒有進行大小限制,起限制作用的是服務器的處理程序的處理能力。

6.POST的安全性要比GET的安全性高。注意:這裏所說的安全性和上面GET提到的“安全”不是同個概念。上面“安全”的含義僅僅是不作數據修改,而這裏安全的含義是真正的Security的含義,比如:通過GET提交數據,用戶名和密碼將明文出現在URL上,因爲(1)登錄頁面有可能被瀏覽器緩存,(2)其他人查看瀏覽器的歷史紀錄,那麼別人就可以拿到你的賬號和密碼了,除此之外,使用GET提交數據還可能會造成Cross-site request forgery攻擊。

7.Get是向服務器發索取數據的一種請求,而Post是向服務器提交數據的一種請求,在FORM(表單)中,Method默認爲"GET",實質上,GET和POST只是發送機制不同,並不是一個取一個發!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章