轉發和重定向的區別

一直沒有搞懂轉發和重定向的概念,更別提區別了。今天在上面栽跟頭,特查資料總結如下。

轉發(服務端行爲)

形式:request.getRequestDispatcher().forward(request,response)
在springboot中的controller進行試圖解析時默認轉發。
轉發在服務器端發揮作用,通過forward()方法提交信息在多個頁面之間進行傳遞。

  • 地址欄不會變
  • 轉發只能轉發到當前web應用內的資源
  • 在轉發過程中,可以將數據保存到request域對象中去
  • 轉發只有一次請求
    轉發是服務器端行爲

轉發過程

1.客戶端瀏覽器發送http
2.web瀏覽器接受請求
3.調用內部的一個方法在容器內部完成請求處理和轉發動作

需要注意的是:轉發路徑必須是同一個web容器下的url。在客戶端瀏覽器路徑顯示的仍然是第一次訪問的路徑。轉發行爲是瀏覽器只做了一次訪問請求。

重定向(客戶端行爲)

形式:response.sendRedirect("");
springboot中進行重定向時,controller中寫

	mv.setViewName("redirect:/main.html");
	return mv;

隨後使用WebMvcConfigurer擴展SpringMVC

	@Configuration
	public class ViewControllerimpl implements WebMvcConfigurer {
	    @Override
	    public void addViewControllers(ViewControllerRegistry registry) {
	    	//將templates中的StudentPage.html映射到路徑urlpath爲“/main.html”上
	        registry.addViewController("/main.html").setViewName("StudentPage");
	    }
	}

如果controller中直接寫mv.setViewName("redirect:StudentPage")的話,將會出現404(若StudentPage.html存放在templates文件夾中)。這是因爲templates不是springboot項目的靜態資源地址,重定向是二次請求,所以無法訪問templates中資源。

  • 重定向地址欄會改變
  • 重定向可以跳轉到當前web應用,甚至是外部域名網站
  • 不能在重定向過程中,將數據保存到request域對象中

重定向過程

1.客戶端發送http請求
2.web服務器接收後,發送302狀態碼,以及新的location給客戶端瀏覽器
3.客戶端瀏覽器發現是302響應,則自動發送一個http請求,請求url爲重定向的地址,相應的服務器根據此請求尋找資源併發送給客戶。

發佈了34 篇原創文章 · 獲贊 11 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章