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:即可解決資料共享的問題。
相關文章
- 轉發與重定向的區別
- 轉發和重定向的區別?
- 轉發和重定向的區別(轉)
- 重定向和請求轉發的區別
- 轉發和重定向的過程和區別
- HTTP中的重定向和請求轉發的區別HTTP
- 請求重定向和請求轉發的區別
- javaweb重定向JavaWeb
- 關於重定向符>>與>的區別與作用
- javaWeb03-請求轉發和請求重定向【包含編碼格式與路徑問題】JavaWeb
- 手摸手教你解決重定向快取問題快取
- 請求轉發與URL重定向
- nginx和Tomcat整合後發生的重定向問題分析和解決NginxTomcat
- 轉發和重定向
- Shell重定向&>file、2>&1、1>&2的區別
- 資料流重定向
- jmeter學習指南之HTTP請求中自動重定向和跟隨重定向的區別JMeterHTTP
- HTTP 的重定向HTTP
- laravel線上環境表單驗證重定向問題解決方案Laravel
- Linux 資料重定向Linux
- stm32 printf 重定向問題
- [提問交流]在Apache下重定向問題 /login 重定向到 /home/passport/login 有問題ApachePassport
- 解決動靜分離架構後臺重定向頁面問題架構
- Go排坑:http.ServeMux意外重定向的問題分析GoHTTPUX
- Spring MVC 轉發和重定向SpringMVC
- Springmvc中轉發和重定向SpringMVC
- ipf導致sendmail不能正確轉發郵件的問題解決AI
- 解決兩相同資料庫資料同步的問題 (轉)資料庫
- 不能建立降序索引的問題的解決索引
- 資料不能同步的問題?
- Linux系統的Shell I/O重定向詳解(轉)Linux
- 教你如何實現SpringCloud URL的重定向及轉發SpringGCCloud
- 併發處理中的問題以及解決這些問題的併發模型模型
- Webpack的理解以及解決了的問題Web
- 關於資料共享的問題
- 重定向Redirect 的知識
- Spring MVC 中檢視的實現原理,在Spring MVC 中實現重定向和轉發,以及訪問靜態資源SpringMVC
- Laravel HTTP—— 重定向的使用與原始碼分析LaravelHTTP原始碼