SpringBoot中處理的轉(zhuǎn)發(fā)與重定向方式
轉(zhuǎn)發(fā):一次請求,服務器內(nèi)部調(diào)用另外的組件處理,request和response可以共用,有限制性,只能轉(zhuǎn)發(fā)到本應用中的某些資源,頁面或者controller請求可以訪問WEB-INF目錄下面的頁面
重定向:兩次請求,地址會改變,request和response不能共用,不能直接訪問WEB-INF下面的資源,
根據(jù)所要跳轉(zhuǎn)的資源,可以分為跳轉(zhuǎn)到頁面或者跳轉(zhuǎn)到其他controller
一、返回ModelAndView時的請求轉(zhuǎn)發(fā)
當controller中的方法返回ModelAndView的時候,默認是使用的轉(zhuǎn)發(fā)。當然,我們也可以顯式的指出要使用轉(zhuǎn)發(fā),此時,需在 setViewName()指定的視圖前添加forward:,此時springmvc.xml文件中配置的視圖解析器將會失效,即需要在setViewName中寫上jsp相對于項目根的路徑。
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"); //默認情況下使用轉(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后面
如果要實現(xiàn)重定向,則需在setViewName()指定的視圖前添加redirect:,此時springmvc.xml文件中配置的視圖解析器將會失效,即需要在setViewName中寫上jsp相對于項目根的路徑。重定向的方式在request域中的數(shù)據(jù)會失效,此時可以通過ModelAndView來傳遞數(shù)據(jù),但是只能傳遞基本數(shù)據(jù)類型和String類型,因為spring mvc會將傳遞的數(shù)據(jù)以請求參數(shù)的方式放到url的后面,此時任何數(shù)據(jù)類型都會被轉(zhuǎn)換為普通的字符串。另外,我們在jsp中取值的時候需要使用 EL 表達式中的請求參數(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ù)名一致即可實現(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{ //默認會使用轉(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實現(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ā)
當方法沒有返回值即返回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 }
到此這篇關于SpringBoot中處理的轉(zhuǎn)發(fā)與重定向方式的文章就介紹到這了,更多相關SpringBoot 轉(zhuǎn)發(fā)與重定向內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- springBoot熱部署、請求轉(zhuǎn)發(fā)與重定向步驟詳解
- springboot如何重定向外部網(wǎng)頁
- springboot?實戰(zhàn):異常與重定向問題
- 使用springboot跳轉(zhuǎn)到指定頁面和(重定向,請求轉(zhuǎn)發(fā)的實例)
- springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes
- springboot 重定向方式(redirect前綴)
- springboot項目攔截器重定向循環(huán)問題的解決
- 基于springboot redirect重定向路徑問題總結(jié)
- springboot 如何重定向redirect 并隱藏參數(shù)
- Springboot轉(zhuǎn)發(fā)重定向?qū)崿F(xiàn)方式解析
- SpringBoot后端服務重定向的實現(xiàn)示例
相關文章
Java使用application.property讀取文件里面的值
本文通過實例代碼給大家介紹了Java使用application.property讀取文件里面的值,需要的朋友可以參考下2018-10-10Java編程中靜態(tài)內(nèi)部類與同步類的寫法示例
這篇文章主要介紹了Java編程中靜態(tài)內(nèi)部類與同步類的寫法示例,用于構(gòu)建靜態(tài)對象以及實現(xiàn)線程同步等,需要的朋友可以參考下2015-09-09Spring中的DefaultResourceLoader使用方法解讀
這篇文章主要介紹了Spring中的DefaultResourceLoader使用方法解讀,DefaultResourceLoader是spring提供的一個默認的資源加載器,DefaultResourceLoader實現(xiàn)了ResourceLoader接口,提供了基本的資源加載能力,需要的朋友可以參考下2024-02-02