SpringCloud URL重定向及轉(zhuǎn)發(fā)代碼實(shí)例
Web UI項(xiàng)目中, 很多 Spring controller 視圖函數(shù)直接返回 html 頁(yè)面, 還有一些視圖函數(shù)是要重定向或轉(zhuǎn)發(fā)到其他的 url 上.
redirect 和 forward的區(qū)別:
重定向 redirect: 完整的重定向包含兩次request-response過(guò)程, 第一次是訪問(wèn)原始url, 第二次是服務(wù)器通知客戶端訪問(wèn)重定向后的url. 重定向完成后, 瀏覽器的地址是重定向后的url, 而不是原始的url.
重定向的使用場(chǎng)景: 因?yàn)橹囟ㄏ驎?huì)修改瀏覽器地址, 所以 form 提交應(yīng)該使用重定向, 以免用戶刷新頁(yè)面導(dǎo)致form重復(fù)提交.
轉(zhuǎn)發(fā) forward: 完整的轉(zhuǎn)發(fā)僅包含一次 request-response 過(guò)程, 用戶發(fā)出request后, 服務(wù)器端視圖函數(shù)先處理自己的邏輯, 然后在服務(wù)器端有調(diào)用另一個(gè)視圖函數(shù), 最后將response返回給瀏覽器.
示例:
@RequestMapping("/")
public class DemoController {
/*
* forward 示例: 以字符串的形式構(gòu)建目標(biāo)url, url 需要加上 forward: 前綴
* */
@RequestMapping("/forwardTest1")
public String forwardTest1() {
return "forward:/forwardTarget?param1=v1¶m2=v2";
}
/*
* forward 示例: 使用 ModelAndView() 設(shè)置轉(zhuǎn)發(fā)的目標(biāo)url
* */
@RequestMapping("/forwardTest2")
public ModelAndView forwardTest2() {
ModelAndView mav=new ModelAndView("/forwardTarget"); // 絕對(duì)路徑OK
//ModelAndView mav=new ModelAndView("forwardTarget"); // 相對(duì)路徑也OK
mav.addObject("param1", "value1");
mav.addObject("param2", "value2");
return mav ;
}
/*
* redirect 目標(biāo)有三種構(gòu)建方式
* 1. 使用 redirect: 前綴url方式構(gòu)建目標(biāo)url
* 2. 使用 RedirectView 類型指定目標(biāo)
* 3. 使用 ModelAndView 類型指定目標(biāo), ModelAndView 視圖名默認(rèn)是forward, 所以對(duì)于redirect, 需要加上 redirect: 前綴
* */
@RequestMapping("/noParamRedirect")
public RedirectView noParamTest() {
return new RedirectView("http://www.qq.com");
}
public String noParamTest2() {
return "redirect:http://www.qq.com";
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java黑科技之通過(guò)Google Java Style 文件配置IDEA和Ecplise代碼風(fēng)格
在日常開(kāi)發(fā)中,多人團(tuán)隊(duì)協(xié)作開(kāi)發(fā)一個(gè)項(xiàng)目是很常見(jiàn)的,特別是大公司,這就會(huì)涉及到多人在一個(gè)工程上開(kāi)發(fā)代碼.無(wú)規(guī)矩不成方圓,一個(gè)好的代碼風(fēng)格,更加有利于團(tuán)隊(duì)協(xié)作,減少代碼沖突,提高代碼可閱讀性,美觀性.本文就帶著大家仔細(xì)研究這個(gè)黑科技 ,需要的朋友可以參考下2021-05-05
如何通過(guò)zuul添加或修改請(qǐng)求參數(shù)
這篇文章主要介紹了如何通過(guò)zuul添加或修改請(qǐng)求參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
4個(gè)Java8中你需要知道的函數(shù)式接口分享
Java?8?中提供了許多函數(shù)式接口,包括Function、Consumer、Supplier、Predicate?等等。本文主要來(lái)和大家介紹一下它們的具體使用,需要的可以參考一下2023-04-04
mybatis自定義類型處理器TypehHandler示例詳解
我們?cè)趯憁apper映射器的配置文件時(shí),不經(jīng)意間已經(jīng)用到類型轉(zhuǎn)換,不過(guò)是mybatis幫我們完成的,下面這篇文章主要給大家介紹了關(guān)于mybatis自定義類型處理器TypehHandler的相關(guān)資料,需要的朋友可以參考下2018-09-09
Springboot2.x+Quartz分布式集群的實(shí)現(xiàn)
這篇文章主要介紹了Springboot2.x+Quartz分布式集群的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

