JAVA 客户端跳转与服务器端跳转 get与post
雖然說get?與post?問題很老套了,但是作為web?開發人員來說對于這個的理解確實很有必要,其實說到get?和post,還可以有doGet?與doPost?和客戶端跳轉與服務端跳轉的區別;
?
GET?與POST?的區別:
?
???????一、Get?是從服務器上獲取?數據,Post?則是向服務器傳送?數據;
?
???????二、Get?將表單中數據的按照variable=value?的形式,添加到action?所指向的URL?地址的后面?,并且兩者用“?”?連接,而各個變量之間使用“&”?連接。Post?是將表單中的數據放在form?的數據體中(?或者說把內容放在了http消息體里)?,按照變量和值相對應的方式,傳遞到action?所指向URL?;
?
???????所以從上第二點也可以得到另外兩個結論:
?
????????????? 1?、Get?傳送的數據量較小?,不能大于2KB?,這主要是因為受URL?長度限制。
?
? ? ? ? ? ? ? ? ? ?Post?傳送的數據量較大?,所以在上傳文件只能使用Post(?注意在文件上傳時還要加上enctype="multipart/form-data"?作為上傳文件的標識)?。一般被默認為不受限制。但理論上,IIS4?中最大量為80KB?,IIS5?中為100KB?;
?
????????????? 2?、Get?安全性非常低?(因為用戶可以通過URL?看到)
?
? ? ? ? ? ? ? ? ???Post?安全性較高?(其所有操作對用戶來說都是不可見的)。但是執行效率卻比Post?方法要高點(優點造就了?其缺點);
?
??????????????總結:
?
???????????????????? ?a?、如果是包含機密信息的話,建議用Post?數據提交方式;
?
??????????????????????b?、當數據處理不改變數據模型的狀態則推薦使用Get?方式,例如在做數據查詢。而操作改變了數據模型的狀態時,則建議使用Post?方式,例如數據添加、修改或刪除,送電子郵件等;
?
???????三、Get?限制Form?表單的數據集的值必須為ASCII?字符;而Post?支持整個ISO10646?字符集,所以說在出現一些亂碼時有時候可以將Get?請求換為Post?請求;
?
???????四、Get?是Form?的默認方法;
?
???????五、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?則就會起很大的好處了。
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的JAVA 客户端跳转与服务器端跳转 get与post的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于大龄程序员的谣言 新手必读
- 下一篇: 再谈 Java中Runnable和Thr