Javaweb的轉發與重定向的區別以及解決重定向不能共享資料的問題
轉發:
轉發是內部資源跳轉的一個過程
(瀏覽器呼叫jsp容器中的方法呼叫目標頁面,瀏覽器不知道,所有位址列的地址不會發生變化) request.getRequestDispatcher("/login.jsp").forward(request,response);
重定向:
一個web資源收到客戶端的請求後,通知客戶端去訪問另外一個web資源
(通知瀏覽器傳送一個新的頁面請求,位址列會發生變化)
response.sendRedirect(request.getContextPath() + “/index.jsp”);
兩者的對比如下:
重定向之後當前頁面的資料與跳轉後頁面的資料是不能共享的,要解決這個問題,我們可以新建一個Servlet。
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
/**
* @Author: zc
*
* 抽取出來的servlet
*/
public class BaseServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//通過判斷使用者的方法來執行對應的操作
String methodName = request.getParameter("method");
try {
Method method = this.getClass().getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
String url = (String) method.invoke(this,request,response);//等同於this.method;
//判斷url是否為空 不等0 說明有資料
if (url!=null&&url.length()!=0){
//根據返回值判斷轉發或者是重定向,新增字首名 redirect 或者forward
if (url.startsWith("forward:")){
request.getRequestDispatcher(url.split(":")[1]).forward(request,response);
}else {
response.sendRedirect(url);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
當我們使用重定向時,只需要在重定向的路徑前新增一個forword:即可解決資料共享的問題。
相關文章
- 轉發和重定向的區別?
- 轉發和重定向的過程和區別
- javaweb重定向JavaWeb
- 【轉發與重定向(二)】
- servlet 轉發與重定向Servlet
- javaWeb03-請求轉發和請求重定向【包含編碼格式與路徑問題】JavaWeb
- 解決stderr重定向到stdout造成的輸出亂序問題
- 手摸手教你解決重定向快取問題快取
- 請求轉發與URL重定向
- 轉發和重定向
- Shell重定向&>file、2>&1、1>&2的區別
- jmeter學習指南之HTTP請求中自動重定向和跟隨重定向的區別JMeterHTTP
- Linux 資料重定向Linux
- [提問交流]在Apache下重定向問題 /login 重定向到 /home/passport/login 有問題ApachePassport
- Springmvc中轉發和重定向SpringMVC
- Spring MVC 轉發和重定向SpringMVC
- HTTP 的重定向HTTP
- 教你如何實現SpringCloud URL的重定向及轉發SpringGCCloud
- stm32 printf 重定向問題
- laravel線上環境表單驗證重定向問題解決方案Laravel
- Go排坑:http.ServeMux意外重定向的問題分析GoHTTPUX
- 不能建立降序索引的問題的解決索引
- [轉]重定向輸出
- Spring MVC 中檢視的實現原理,在Spring MVC 中實現重定向和轉發,以及訪問靜態資源SpringMVC
- Webpack的理解以及解決了的問題Web
- URL重定向/跳轉漏洞
- 淺談精益生產與其他問題解決方法的區別
- 重定向Redirect 的知識
- 解決AI的小資料問題AI
- SpringMVC + Shiro重定向次數過多問題SpringMVC
- 你不能訪問此共享資料夾,因為你組織的安全策略的解決辦法
- Windows共享資料夾常見問題解決方法Windows
- 資料併發操作帶的的問題及解決辦法
- APEX重定向頁跳轉1
- 資料庫連結時的時區問題serverTimezone永久解決資料庫Server
- 解決webpack不能匹配post請求的問題Web
- vue中常見的問題以及解決方法Vue
- nginx下thinkphp的URL重定向NginxPHP