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


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

1、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頁代碼:

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

servlet代碼:

    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頁代碼:

    <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頁代碼:

    <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,但使用的比較少。

 

 

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM