http://www.thinksaas.cn/group/topic/133101/web
雖說get 與post 問題很老套了,可是做爲web 開發人員來講對於這個的理解確實頗有必要,其實說到get 和post,還能夠有doGet 與doPost 和客戶端跳轉與服務端跳轉的區別;數據庫
GET 與POST 的區別:瀏覽器
1、Get 是從服務器上獲取 數據,Post 則是向服務器傳送 數據;安全
2、Get 將表單中數據的按照variable=value 的形式,添加到action 所指向的URL 地址的後面 ,而且二者用「?」 鏈接,而各個變量之間使用「&」 鏈接。Post 是將表單中的數據放在form 的數據體中( 或者說把內容放在了http消息體裏) ,按照變量和值相對應的方式,傳遞到action 所指向URL ;服務器
因此從上第二點也能夠獲得另外兩個結論:app
1 、Get 傳送的數據量較小 ,不能大於2KB ,這主要是由於受URL 長度限制。webapp
Post 傳送的數據量較大 ,因此在上傳文件只能使用Post( 注意在文件上傳時還要加上enctype="multipart/form-data" 做爲上傳文件的標識) 。通常被默認爲不受限制。但理論上,IIS4 中最大量爲80KB ,IIS5 中爲100KB ;jsp
2 、Get 安全性很是低 (由於用戶能夠經過URL 看到)post
Post 安全性較高 (其全部操做對用戶來講都是不可見的)。可是執行效率卻比Post 方法要高點(優勢造就了 其缺點);url
總結:
a 、若是是包含機密信息的話,建議用Post 數據提交方式;
b 、當數據處理不改變數據模型的狀態則推薦使用Get 方式,例如在作數據查詢。而操做改變了數據模型的狀態時,則建議使用Post 方式,例如數據添加、修改或刪除,送電子郵件等;
3、Get 限制Form 表單的數據集的值必須爲ASCII 字符;而Post 支持整個ISO10646 字符集,因此說在出現一些亂碼時有時候能夠將Get 請求換爲Post 請求;
4、Get 是Form 的默認方法;
5、Get 方式提交來的數據在服務器端用Request.QueryString() 來獲取,用Post 方式提交的數據用Request.Form() 來獲取;
服務器端跳轉與客戶端跳轉:
首先咱們須要理解什麼是服務器端跳轉,什麼是客戶端的跳轉。簡單理解所謂服務器端跳轉就是指地址欄內容不變(客戶端瀏覽器的地址欄不會顯示目標地址的URL ),而客戶端跳轉是指地址欄內容發生改變(客戶端向服務器發請求偶,而後服務器再給客戶端一個響應,而後客戶端再根據服務器端給的響應中的URL 再向服務器發送請求,因此是兩次請求,所以地址欄改變了顯示最後一次請求地址);
Java 中服務器端跳轉:
1 、request.getRequestDispatcher("success.jsp").forward(request,response) ,它是隻要執行到此語句以後則馬上進行跳轉,能夠傳遞request 屬性 ;
2 、<jsp:forward>, 這種跳轉屬於無條件跳轉,它只能在棧內轉,而sendREdirect 中則能夠任意轉,甚至能夠輸入baidu ;
客戶端跳轉:
1 、response.sendRedirect("fail.jsp") ,全部頁面執行完以後再進行跳轉, 不能傳遞request 範圍的屬性 ,可是能夠經過地址重寫的方式向跳轉頁傳遞參數,由於該方法執行完以後就至關於一次http request 的結束,這是服務器會向客戶端發送302 狀態碼和新的url ,告訴客戶端從新發送request 請求到新的url ,而後客戶端照此執行,執行即新的請求響應流程開始,服務器再從新建立HttpServletRequest 對象和HttpServletResponse 對象,此時兩個請求已經不在一個線程了,因此request 和response 對象都不是開始的那個了;
2 、response.setHeader("refresh","2;URL=index.jsp"),2 秒後跳轉到其餘頁面;
3 、<a href="http://www.baidu.com"> 百度</a> ,超連接;
4 、表單提交;
經過以上能夠得知,若是如今一個頁面中使用了JDBC ,則應該在forward 跳轉以前關閉數據庫連接,而使用respose則能夠在任意的位置處關閉;
注意:
1 、客戶端跳轉「/ 」表明服務器路徑webapps ,即服務器根路徑,服務器端跳轉「/ 」表明站點根路徑,即應用程序根路徑;
2 、儘可能使用response.sendRedirect("fail.jsp") 而不去使用forward ,由於當服務器崩潰了,那麼sendRedirect 則就會起很大的好處了。