SpringBoot中處理的轉(zhuǎn)發(fā)與重定向方式
轉(zhuǎn)發(fā):一次請求,服務(wù)器內(nèi)部調(diào)用另外的組件處理,request和response可以共用,有限制性,只能轉(zhuǎn)發(fā)到本應(yīng)用中的某些資源,頁面或者controller請求可以訪問WEB-INF目錄下面的頁面
重定向:兩次請求,地址會改變,request和response不能共用,不能直接訪問WEB-INF下面的資源,
根據(jù)所要跳轉(zhuǎn)的資源,可以分為跳轉(zhuǎn)到頁面或者跳轉(zhuǎn)到其他controller
一、返回ModelAndView時的請求轉(zhuǎn)發(fā)
當(dāng)controller中的方法返回ModelAndView的時候,默認(rèn)是使用的轉(zhuǎn)發(fā)。當(dāng)然,我們也可以顯式的指出要使用轉(zhuǎn)發(fā),此時,需在 setViewName()指定的視圖前添加forward:,此時springmvc.xml文件中配置的視圖解析器將會失效,即需要在setViewName中寫上jsp相對于項(xiàng)目根的路徑。
1:轉(zhuǎn)發(fā)到頁面
/** * 轉(zhuǎn)發(fā)返回ModelAndView對象 * @return * @throws Exception */ @RequestMapping("/forwardMAV.do") public ModelAndView forwardMAV()throws Exception{ ModelAndView mv = new ModelAndView(); mv.addObject("type", "轉(zhuǎn)發(fā)返回ModelAndView"); //默認(rèn)情況下使用轉(zhuǎn)發(fā) //mv.setViewName("/result"); //手動顯式指定使用轉(zhuǎn)發(fā),此時springmvc.xml配置文件中的視圖解析器將會失效 mv.setViewName("forward:/jsp/result.jsp"); return mv; }
需要在webapp目錄下添加jsp/result.jsp文件:
2:轉(zhuǎn)發(fā)到controller
使用轉(zhuǎn)發(fā)跳轉(zhuǎn)到其他controller中
@RequestMapping("/forwardMAV.do") public ModelAndView forwardMAV()throws Exception{ ModelAndView mv = new ModelAndView(); //手動顯式指定使用轉(zhuǎn)發(fā),此時springmvc.xml配置文件中的視圖解析器將會失效 mv.setViewName("forward:other.do"); return mv; }
創(chuàng)建OtherController:
/** * 被跳轉(zhuǎn)的controller */ @Controller public class OtherController { /** * 被跳轉(zhuǎn)的controller返回result.jsp * @return * @throws Exception */ @RequestMapping("/other.do") public ModelAndView other()throws Exception{ ModelAndView mv = new ModelAndView(); mv.addObject("type", "被跳轉(zhuǎn)的controller"); mv.setViewName("result"); return mv; } }
二、返回ModelAndView時的重定向:發(fā)送的get請求,參數(shù)在url后面
如果要實(shí)現(xiàn)重定向,則需在setViewName()指定的視圖前添加redirect:,此時springmvc.xml文件中配置的視圖解析器將會失效,即需要在setViewName中寫上jsp相對于項(xiàng)目根的路徑。重定向的方式在request域中的數(shù)據(jù)會失效,此時可以通過ModelAndView來傳遞數(shù)據(jù),但是只能傳遞基本數(shù)據(jù)類型和String類型,因?yàn)閟pring mvc會將傳遞的數(shù)據(jù)以請求參數(shù)的方式放到url的后面,此時任何數(shù)據(jù)類型都會被轉(zhuǎn)換為普通的字符串。另外,我們在jsp中取值的時候需要使用 EL 表達(dá)式中的請求參數(shù)param讀取。
除此之外,你還可以將數(shù)據(jù)放到HttpSession域中,這里就不演示了。
1.重定向到頁面
/** * 重定向返回ModelAndView對象 * @return * @throws Exception */ @RequestMapping("/redirectMAV.do") public ModelAndView redirectMAV(School school,String name)throws Exception{ ModelAndView mv = new ModelAndView(); //在重定向中可以使用ModelAndView傳遞數(shù)據(jù),但是只能傳遞基本數(shù)據(jù)類型和String類型 mv.addObject("school",school); mv.addObject("name", name); //使用重定向,此時springmvc.xml配置文件中的視圖解析器將會失效 mv.setViewName("redirect:/jsp/result.jsp"); return mv;
result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${school.schoolName}<br> ${param.school.address}<br> ${param.name} </body> </html>
2,重定向到controller
在重定向到其他controller中的方法的時候,只要保證兩者的參數(shù)名一致即可實(shí)現(xiàn)數(shù)據(jù)的傳遞。
@RequestMapping("/redirectMAV.do") public ModelAndView redirectMAV(School school,String name)throws Exception{ ModelAndView mv = new ModelAndView(); mv.addObject("name", name); mv.addObject("schoolName", school.getSchoolName()); mv.addObject("address", school.getAddress()); System.out.println(school.getAddress()); //使用重定向,此時springmvc.xml配置文件中的視圖解析器將會失效 mv.setViewName("redirect:other.do"); return mv; }
RequestMapping("/other.do") public ModelAndView other(String name, School school)throws Exception{ ModelAndView mv = new ModelAndView(); //單個接收 mv.addObject("name", name); //通過javabean對象接收 mv.addObject("school", school); System.out.println(school.getAddress()); mv.setViewName("result"); return mv; }
返回String類型的轉(zhuǎn)發(fā)
這個整體上跟之前ModelAndView差不多,只不過在controller中的方法參數(shù)會被自動的放到request域中。
@RequestMapping("/forwardStr.do") public String forwardStr(School school)throws Exception{ //默認(rèn)會使用轉(zhuǎn)發(fā) //return "result"; //顯式的使用轉(zhuǎn)發(fā) return "forward:/jsp/result.jsp"; }
result.jsp中直接通過request域獲取數(shù)據(jù),以下兩種方式均可。
${requestScope.school.schoolName} ${school.schoolName}
返回String類型的重定向
這里要想傳遞數(shù)據(jù)的話,需要使用之前介紹過的Model實(shí)現(xiàn),這里的數(shù)據(jù)同樣會放在url中,所以只能傳遞基本數(shù)據(jù)類型和String類型。
@RequestMapping("/redirectStr.do") public String redirectStr(School school, Model model)throws Exception{ //這里的數(shù)據(jù)同樣會放在url中,所以只能傳遞基本數(shù)據(jù)類型和String類型 model.addAttribute("schoolName", school.getSchoolName()); model.addAttribute("address", school.getAddress()); return "redirect:/jsp/result.jsp"; }
result.jsp中需要通過param來獲取數(shù)據(jù):
${param.schoolName} ${param.address}
這里轉(zhuǎn)發(fā)和重定向跟之前返回ModelAndView的時候一樣,所以就不演示了。
返回void的重定向和轉(zhuǎn)發(fā)
當(dāng)方法沒有返回值即返回void的時候,重定向和轉(zhuǎn)發(fā)操作都是使用的servlet的api,就是:
轉(zhuǎn)發(fā):
request.getRequestDispatcher("/jsp/result.jsp").forward(request, response);
重定向:
response.sendRedirect(request.getContextPath()+"/jsp/result.jsp");
***************************************
@RequestMapping(value="/aa",method=RequestMethod.GET) public ModelAndView aaa (HttpServletRequest request) { String user? =? request.getParameter("username"); ModelAndView? mv = new?ModelAndView ("xyxyh/declaration/delcleView"); mv.addObject("pas","bb"): return mv }
@RequestMapping(value="/aa",method=RequestMethod.GET) public ModelAndView aaa (HttpServletRequest request,ModelMap model) { String user = request.getParameter("username"); ModelAndView mv = new ModelAndView ("xyxyh/declaration/delcleView"); mv.addObject("pas","bb"): model.addAttribute("typeFlag","aaaaa"); return mv }
到此這篇關(guān)于SpringBoot中處理的轉(zhuǎn)發(fā)與重定向方式的文章就介紹到這了,更多相關(guān)SpringBoot 轉(zhuǎn)發(fā)與重定向內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springBoot熱部署、請求轉(zhuǎn)發(fā)與重定向步驟詳解
- springboot如何重定向外部網(wǎng)頁
- springboot?實(shí)戰(zhàn):異常與重定向問題
- 使用springboot跳轉(zhuǎn)到指定頁面和(重定向,請求轉(zhuǎn)發(fā)的實(shí)例)
- springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes
- springboot 重定向方式(redirect前綴)
- springboot項(xiàng)目攔截器重定向循環(huán)問題的解決
- 基于springboot redirect重定向路徑問題總結(jié)
- springboot 如何重定向redirect 并隱藏參數(shù)
- Springboot轉(zhuǎn)發(fā)重定向?qū)崿F(xiàn)方式解析
- SpringBoot后端服務(wù)重定向的實(shí)現(xiàn)示例
相關(guān)文章
java高并發(fā)情況下高效的隨機(jī)數(shù)生成器
這篇文章主要介紹了java高并發(fā)情況下高效的隨機(jī)數(shù)生成器,對于性能有要求的同學(xué),可以參考下2021-04-04Java使用application.property讀取文件里面的值
本文通過實(shí)例代碼給大家介紹了Java使用application.property讀取文件里面的值,需要的朋友可以參考下2018-10-10java 中mongodb的各種操作查詢的實(shí)例詳解
這篇文章主要介紹了java 中mongodb的各種操作查詢的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09Java編程中靜態(tài)內(nèi)部類與同步類的寫法示例
這篇文章主要介紹了Java編程中靜態(tài)內(nèi)部類與同步類的寫法示例,用于構(gòu)建靜態(tài)對象以及實(shí)現(xiàn)線程同步等,需要的朋友可以參考下2015-09-09Spring中的DefaultResourceLoader使用方法解讀
這篇文章主要介紹了Spring中的DefaultResourceLoader使用方法解讀,DefaultResourceLoader是spring提供的一個默認(rèn)的資源加載器,DefaultResourceLoader實(shí)現(xiàn)了ResourceLoader接口,提供了基本的資源加載能力,需要的朋友可以參考下2024-02-02