http請求中java中的302和sendRedirect的區別


一、HTTP Get請求URL最大長度

各瀏覽器HTTP Get請求URL最大長度並不相同,幾類常用瀏覽器最大長度及超過最大長度后提交情況如下:

IE6.0                :url最大長度2083個字符,超過最大長度后無法提交。
IE7.0                :url最大長度2083個字符,超過最大長度后仍然能提交,但是只能傳過去2083個字符。
firefox 3.0.3     :url最大長度7764個字符,超過最大長度后無法提交。
Opera 9.52       :url最大長度7648個字符,超過最大長度后無法提交。
Google Chrome 2.0.168   :url最大長度7713個字符,超過最大長度后無法提交

二、http請求中java中的302和sendRedirect的區別

============================================================================================

getContextPath、getServletPath、getRequestURI的區別

假定你的工程名稱為projects,你在瀏覽器中輸入請求路徑:

http://127.0.0.1:8080/projects/pages/newForm.jsp

則執行下面向行代碼后打印出如下結果:
1、 System.out.println(request.getContextPath());
打印結果:/projects
 2、System.out.println(request.getServletPath());
打印結果:/pages/newForm.jsp
 3、 System.out.println(request.getRequestURI());
打印結果:/projects/pages/newForm.jsp
 4、 System.out.println(request.getRealPath("/")); 
 JSP servlet API提供了getRealPath(path)方法,返回給定虛擬路徑的真實路徑,如果轉換錯誤,則返回null。

打印結果:C:\Tomcat5.0\webapps\projects\test

============================================================================================
java中有一個sendRedirect函數這個用於跳轉到另外一個頁面,這個實際上是一個302跳轉,但是不完全等同於302跳轉

點擊(此處)折疊或打開

  1. response.sendRedirect("login.jsp");
  2. 不等於
  3. response.addHeader("location", "login.jsp");
  4. response.setStatus(302);
1.比較
response.sendRedirect("login.jsp");的http請求過程如下:
response.addHeader("location", "login.jsp");
response.setStatus(302);
上面兩個比較發現不同的是藍色部分
response.sendRedirect("login.jsp");在重定向時多加了一段http://localhost:8080/xxxSearch/
 
2.分析
1)當我們瀏覽器的訪問路徑是http://localhost:8080/xxxSearch/時,
response.sendRedirect("login.jsp");   等於 response.addHeader("location", "login.jsp");response.setStatus(302);
這時在jsp使用request.getContextPath()獲取訪問絕對路徑是可以的
2)但是當我們的瀏覽器的訪問路徑是http://localhost/時就出現問題了
像我公司經常是這樣的結構:用apache做前端,代理后面的tomcat,在tomcat看來訪問路徑還是http://localhost:8080/xxxSearch/,而用戶真實訪問的是http://localhost/
若是用response.sendRedirect("login.jsp");的話,用戶會跳轉到
http://localhost:8080/xxxSearch/login.jsp
若是我們的防火牆不開放8080端口,我們就會看到無法訪問的頁面,而且我們也不想客戶直接訪問到tomcat上。
而用response.addHeader("location", "login.jsp");response.setStatus(302);的話,客戶會訪問到login.jsp,這個路徑是一個相對的路徑再加上客戶瀏覽器的路徑,客戶實際訪問的是
http://localhost/login.jsp
 
3.結論
因此我認為:
盡量使用
response.addHeader("location", "login.jsp");response.setStatus(302);
而且在jsp頁面里盡量不要使用request.getContextPath()或者絕對路徑,
這樣我們的代碼可以很好的通過不同方式訪問,特別是對SEO優化非常有好處


免責聲明!

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



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