servlet中doGet()和doPost()的用法

轉自:https://blog.csdn.net/qq_38963960/article/details/79468182java

一、servlet中doGet()和doPost()的用法 

通常來講咱們是用不到doGet方法的,doGet方法提交表單的時候會在url後邊顯示提交的內容,因此不安全。並且doGet方法只能提交256個字符(1024字節),而doPost沒有限制,由於get方式數據的傳輸載體是URL(提交方式能form,也能任意的URL連接),而POST是HTTP頭鍵值對(只能以form方式提交)。一般咱們使用的都是doPost方法,你只要在servlet中讓這兩個方法互相調用就好了,例如在doGet方法中這樣寫瀏覽器

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        doPost(request,response);
    }

再把業務邏輯直接寫在doPost方法中。servlet碰到doGet方法調用直接就會去調用doPost由於他們的參數都同樣。並且doGet方法處理中文問題很困難,要寫過濾器之類的。    安全

以上from 百度知道 @權寶兒服務器

在網上搜集了一些資料,把兩方法的區別整理以下:
get和post是http協議的兩種方法,另外還有head, delete等 
這兩種方法有本質的區別,get只有一個流,參數附加在url後,大小個數有嚴格限制且只能是字符串。post的參數是經過另外的流傳遞的,不經過url,因此能夠很大,也能夠傳遞二進制數據,如文件的上傳。 
在servlet開發中,以doGet()和doPost()分別處理get和post方法。 
首先判斷請求時是get仍是post,若是是get就調用doGet(), 若是是post就調用doPost()。都會執行這個方法。 
1.doGet
GET調用用於獲取服務器信息,並將其作爲響應返回給客戶端。當經由Web瀏覽器或經過HTML、JSP直接訪問Servlet的URL時,通常用GET調用。GET調用在URL裏顯示正傳送給SERVLET的數據,這在系統的安全方面可能帶來一些問題,好比用戶登陸,表單裏的用戶名和密碼須要發送到服務器端,若使用Get調用,就會在瀏覽器的URL中顯示用戶名和密碼。
例:
jsp頁代碼:jsp

    <form action="/doGet_servlet" method="get">
    ………
    <input type="text" >
    ………
    </form>

servlet代碼:post

    public class doGet_servlet extends HttpServlet {
      public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
          request.setCaracterEncoding(「gb2312」);//漢字轉碼
          PrintWriter out = response.getWriter();
          out.println("The Parameter are :"+request.getParameter("name1"));
      }
    }

這樣提交表單後,參數會自動添加到瀏覽器地址欄中,帶來安全性問題。性能

2.doPost
它用於客戶端把數據傳送到服務器端,也會有反作用。但好處是能夠隱藏傳送給服務器的任何數據。Post適合發送大量的數據。
例:
jsp頁代碼:this

    <form action="/doPostt_servlet" method="post">
    ………
    <textarea cols="50" rows="10"></textarea>
    ………
    </form>

servlet代碼:編碼

    public class doPostt_servlet extends HttpServlet {
      public void doPost(HttpServletRequest request,HttpServletResponse esponse) throws IOException,ServletException {
          request.setCaracterEncoding(「gb2312」);//漢字轉碼
          PrintWriter out = response.getWriter();
          out.println("The Parameter are :"+request.getParameter("name2"));
      }
    }

3.能夠把方法寫在doGet()方法中,在doPost()方法中調用執行,這樣,不管你提交的是post仍是get方法均可以執行
例如:
jsp頁代碼:url

    <form action="/servlet" method="post">
    ………
    <input type="text" >
    ………
    </form>

servlet代碼:

    public class servlet extends HttpServlet {
      public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
          request.setCaracterEncoding(「gb2312」);//漢字轉碼
          PrintWriter out = response.getWriter();
          out.println("The Parameter are :"+request.getParameter("name1"));
      }
     
      public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
          this.goGet(request,response);//調用doGet()方法
      }
    }

另外,HttpServlet處理客戶端請求方式還有doPut、doDelete、doTrace、doHead、doOptions,但使用的比較少。

 

 

 

二、servlet中doGet()和doPost()的區別

1,生成方式

get方式有四種:1)直接在URL地址欄中輸入URL。2)網頁中的超連接。3)form中method爲get。4)form中method爲空時,默認是get提交。

post只知道有一種:form中method屬性爲post。

二、數據傳送方式

get方式:表單數據存放在URL地址後面。全部get方式提交時HTTP中沒有消息體。

post方式:表單數據存放在HTTP協議的消息體中以實體的方式傳送到服務器。

三、服務器獲取數據方式

GET方式:服務器採用request.QueryString來獲取變量的值。

POST方式:服務器採用request.Form來獲取數據。

四、傳送的數據量

GET方式:數據量長度有限制,通常不超過2kb。由於是參數傳遞,且在地址欄中,故數據量有限制。

POST方式:適合大規模的數據傳送。由於是以實體的方式傳送的。

五、安全性

GET方式:安全性差。由於是直接將數據顯示在地址欄中,瀏覽器有緩衝,可記錄用戶信息。因此安全性低。

POST方式:安全性高。由於post方式提交數據時是採用的HTTP post機制,是將表單中的字段與值放置在HTTP HEADER內一塊兒傳送到ACTION所指的URL中,用戶是看不見的。

六、在用戶刷新時

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方法好。 建議: 一、get方式的安全性較Post方式要差些,包含機密信息的話,建議用Post數據提交方式;

二、在作數據查詢時,建議用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獲得的每一個數據進行編碼轉換了。

一、安全

GET調用在URL裏顯示正傳送給SERVLET的數據,這在系統的安全方面可能帶來問題,例如用戶名和密碼等

POST就能夠在必定程度上解決此類問題

二、服務器接收方式

服務器隨機接受GET方法的數據,一旦斷電等緣由,服務器也不知道信息是否發送完畢

而POST方法,服務器先接受數據信息的長度,而後再接受數據

三、form運行方式

當form框裏面的method爲get時,執行doGet方法
當form框裏面的method爲post時,執行doPost方法

四、容量限制

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   執行.

相關文章
相關標籤/搜索