SpringMVC中redirect重定向(帶參數(shù))的3種方式
Spring MVC中做form表單功能提交時,防止用戶客戶端后退或者刷新時重復(fù)提交問題,需要在服務(wù)端進行重定向跳轉(zhuǎn),其中redirect是直接跳轉(zhuǎn)到其他頁面,有以下3種方法進行重定向。
redirect重定向流程
客戶發(fā)送一個請求到服務(wù)器,服務(wù)器匹配servlet,這都和請求轉(zhuǎn)發(fā)一樣,servlet處理完之后調(diào)用了sendRedirect()這個方法,這個方法是response的方法,所以,當這個servlet處理完之后,看到response.senRedirect()方法,立即向客戶端返回這個響應(yīng),響應(yīng)行告訴客戶端你必須要再發(fā)送一個請求,去訪問test.jsp,緊接著客戶端受到這個請求后,立刻發(fā)出一個新的請求,去請求test.jsp,這里兩個請求互不干擾,相互獨立,在前面request里面setAttribute()的任何東西,在后面的request里面都獲得不了??梢姡趕endRedirect()里面是兩個請求,兩個響應(yīng)。
1. response.sendRedirect重定向跳轉(zhuǎn)
@RequestMapping(value="/testredirect",method = { RequestMethod.POST, RequestMethod.GET })
public ModelAndView testredirect(HttpServletResponse response){
response.sendRedirect("/index");
return null;
}
2. ViewResolver直接跳轉(zhuǎn)
不帶參數(shù)
@RequestMapping(value="/testredirect",method = { RequestMethod.POST, RequestMethod.GET })
public String testredirect(HttpServletResponse response){
return "redirect:/index";
}
帶參數(shù)
@RequestMapping("/testredirect")
public String testredirect(Model model, RedirectAttributes attr) {
attr.addAttribute("test", "51gjie");//跳轉(zhuǎn)地址帶上test參數(shù)
attr.addFlashAttribute("u2", "51gjie");//跳轉(zhuǎn)地址不帶上u2參數(shù)
return "redirect:/user/users";
}
- 使用RedirectAttributes的addAttribute方法傳遞參數(shù)會跟隨在URL后面,如上代碼即為http:/index.action?test=51gjie
- 使用addFlashAttribute不會跟隨在URL后面,會把該參數(shù)值暫時保存于session,待重定向url獲取該參數(shù)后從session中移除,這里的redirect必須是方法映射路徑,jsp無效。你會發(fā)現(xiàn)redirect后的jsp頁面中b只會出現(xiàn)一次,刷新后b再也不會出現(xiàn)了,這驗證了上面說的,b被訪問后就會從session中移除。對于重復(fù)提交可以使用此來完成.
- spring mvc設(shè)置下RequestMappingHandlerAdapter 的ignoreDefaultModelOnRedirect=true,這樣可以提高效率,避免不必要的檢索。
3. ModelAndView重定向
不帶參數(shù)
@RequestMapping(value="/restredirect",method = { RequestMethod.POST, RequestMethod.GET })
public ModelAndView restredirect(String userName){
ModelAndView model = new ModelAndView("redirect:/main/index");
return model;
}
帶參數(shù)
@RequestMapping(value="/toredirect",method = { RequestMethod.POST, RequestMethod.GET })
public ModelAndView toredirect(String userName){
ModelAndView model = new ModelAndView("/main/index");
model.addObject("userName", userName); //把userName參數(shù)帶入到controller的RedirectAttributes
return model;
}
4. 直接跳轉(zhuǎn)某網(wǎng)頁
import javax.servlet.http.HttpServletResponse;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
httpServletResponse.sendRedirect("http://srip.cpu.edu.cn/#/admins")
總結(jié)
1, redirect重定向可以跳轉(zhuǎn)到任意服務(wù)器,可以用在系統(tǒng)間的跳轉(zhuǎn)。
2, Spring MVC中redirect重定向,參數(shù)傳遞可以直接拼接url也可以使用RedirectAttributes來處理,由于是不同的請求,重定向傳遞的參數(shù)會在地址欄顯示,所以傳遞時要對中文編碼進行處理。
到此這篇關(guān)于SpringMVC中redirect重定向(帶參數(shù))的3種方式的文章就介紹到這了,更多相關(guān)SpringMVC redirect重定向內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot+jwt實現(xiàn)在線用戶功能(示例代碼)
這篇文章主要介紹了Springboot+jwt實現(xiàn)在線用戶功能,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-12-12
Java微服務(wù)分布式調(diào)度Elastic-job環(huán)境搭建及配置
Elastic-Job在配置中提供了JobEventConfiguration,支持數(shù)據(jù)庫方式配置,會在數(shù)據(jù)庫中自動創(chuàng)建JOB_EXECUTION_LOG和JOB_STATUS_TRACE_LOG兩張表以及若干索引,來記錄作業(yè)的相關(guān)信息2023-02-02
Java讀取制表符文本轉(zhuǎn)換為JSON實現(xiàn)實例
在Java開發(fā)中,處理各種數(shù)據(jù)格式是常見的任務(wù),本文將介紹如何使用Java讀取制表符文本文件,并將其轉(zhuǎn)換為JSON格式,以便于后續(xù)的數(shù)據(jù)處理和分析,我們將使用Java中的相關(guān)庫來實現(xiàn)這個過程,并提供詳細的代碼示例2024-01-01
Java數(shù)據(jù)結(jié)構(gòu)之雙向鏈表圖解
這篇文章主要為大家詳細介紹了Java數(shù)據(jù)結(jié)構(gòu)之雙向鏈表,文中圖解分析的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
詳解SpringBoot如何刪除引用jar包中的無用bean
為了趕速度和直接將之前多模塊的maven項目中的部分模塊,直接以jar包的形式引入到新項目中了,雖然省去了不少開發(fā)時間,導致項目臃腫,啟動很慢。本文將用@ComponentScan注解去實現(xiàn)讓項目只加載自己需要的bean,需要的可以參考一下2022-06-06

