轉自:https://blog.csdn.net/qq_38963960/article/details/79468182java
通常來講咱們是用不到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,但使用的比較少。
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 執行.