servlet中doPost()和doGet()


作者:潛龍勿用
鏈接: https://www.zhihu.com/question/20144588/answer/237176361
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

servlet中doPost()和doGet()

 

一般來說我們是用不到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方法處理中文問題很困難,要寫過濾器之類的。

在網上搜集了一些資料,把兩方法的區別整理如下:

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


免責聲明!

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



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