天天看點

servlet中doGet方法和doPost方法的差別

1,生成方式 get方式有四種:1)直接在URL位址欄中輸入URL。2)網頁中的超連結。3)form中method為get。4)form中method為空時,預設是get送出。 post隻知道有一種:form中method屬性為post。 2、資料傳送方式 get方式:表單資料存放在URL位址後面。所有get方式送出時HTTP中沒有消息體。 post方式:表單資料存放在HTTP協定的消息體中以實體的方式傳送到伺服器。 3、伺服器擷取資料方式 GET方式:伺服器采用request.QueryString來擷取變量的值。 POST方式:伺服器采用request.Form來擷取資料。 4、傳送的資料量 GET方式:資料量長度有限制,一般不超過2kb。因為是參數傳遞,且在位址欄中,故資料量有限制。 POST方式:适合大規模的資料傳送。因為是以實體的方式傳送的。 5、安全性 GET方式:安全性差。因為是直接将資料顯示在位址欄中,浏覽器有緩沖,可記錄使用者資訊。是以安全性低。 POST方式:安全性高。因為post方式送出資料時是采用的HTTP post機制,是将表單中的字段與值放置在HTTP HEADER内一起傳送到ACTION所指的URL中,使用者是看不見的。 6、在使用者重新整理時 GET方式:不會有任何提示、 POST方式:會彈出提示框,問使用者是否重新送出

1. get是從伺服器上擷取資料,post是向伺服器傳送資料。 2. get是把參數資料隊列加到送出表單的ACTION屬性所指的URL中,值和表單内各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,将表單内各個字段與其内容放置在HTML HEADER内一起傳送到ACTION屬性所指的URL位址。使用者看不到這個過程。 3. 對于get方式,伺服器端用Request.QueryString擷取變量的值,對于post方式,伺服器端用Request.Form擷取送出的資料。 4. get傳送的資料量較小,不能大于2KB。post傳送的資料量較大,一般被預設為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。 5. get安全性非常低,post安全性較高。但是執行效率卻比Post方法好。 建議: 1、get方式的安全性較Post方式要差些,包含機密資訊的話,建議用Post資料送出方式; 2、在做資料查詢時,建議用Get方式;而在做資料添加、修改或删除時,建議用Post方式;

 Servlet的doGet/doPost 是在 javax.servlet.http.HttpServlet 中實作的

          doGet:處理GET請求 

          doPost:處理POST請求 

      當發出用戶端請求的時候,調用service 方法并傳遞一個請求和響應對象。Servlet首先判斷該請求是GET 操作還是POST 操作。然後它調用下面的一個方法:doGet 或 doPost。如果請求是GET就調用doGet方法,如果請求是POST就調用doPost方法。doGet和doPost都接受請求(HttpServletRequest)和響應(HttpServletResponse)。

      get隻有一個流,參數附加在url後,位址行顯示要傳送的資訊,大小個數有嚴格限制且隻能是字元串,大小限制在1024KB。post的參數是通過另外的流傳遞的, 不通過url,是以可以很大,也可以傳遞二進制資料,如檔案的上傳。

     get通過URL送出的參數會顯示在位址欄中,這在系統的安全方面可能帶來問題;post送出的參數不會顯示在位址欄中。這樣post就可以提高get的安全性能,避免資料的洩露。

     當form框裡面的method為get時,執行doGet方法,使用get送出就必須在伺服器端用doGet()方法接收;當form框裡面的method為post時,執行doPost方法,使用post送出就必須在伺服器端用doPost()方法接收。

     在request請求裡面,編碼轉換;get方法得到的内容每一個都要進行編碼轉換,而post方法則隻要設定request.setCharacterEncoding("UTF-8")就可以,不要再從request得到的每個資料進行編碼轉換了。

1、安全

GET調用在URL裡顯示正傳送給SERVLET的資料,這在系統的安全方面可能帶來問題,例如使用者名和密碼等

POST就可以在一定程度上解決此類問題

2、伺服器接收方式

伺服器随機接受GET方法的資料,一旦斷電等原因,伺服器也不知道資訊是否發送完畢

而POST方法,伺服器先接受資料資訊的長度,然後再接受資料

3、form運作方式

當form框裡面的method為get時,執行doGet方法

當form框裡面的method為post時,執行doPost方法

4、容量限制

GET方法後面的資訊量位元組大小不要超過1.3K,而Post則沒有限制

###########最後說明的是:

你可以用service()來實作,它包含了doget和dopost ;service方法是接口中的方法,servlet容器把所有請求發送到該方法,該方法預設行為是轉發http請求到doXXX方法中,如果你重載了該方法,預設操作被覆寫,不再進行轉發操作!

service()是在javax.servlet.Servlet接口中定義的,   在   javax.servlet.GenericServlet   

    中實作了這個接口,   而   doGet/doPost   則是在   javax.servlet.http.HttpServlet   中實作的,  javax.servlet.http.HttpServlet   是   javax.servlet.GenericServlet   的子類.   

  所有可以這樣了解,   其實所有的請求均首先由   service()   進行處理,   而在  javax.servlet.http.HttpServlet   的   service()   方法中,   主要做的事情就是判斷請求類型是   Get   還是   Post,   然後調用對應的   doGet/doPost   執行.

繼續閱讀