# 重定向和轉發 ###### tags: `SpringMVC-基礎` ## ModelAndView 設置ModelAndView對象 , 根據view的名稱 , 和視圖解析器跳到指定的頁面 . **頁面 : {視圖解析器前綴} + viewName +{視圖解析器後綴}** ```xml= <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /> </bean> ``` 對應的controller類 ```java= public class ControllerTest1 implements Controller { public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { //返回一个模型视图对象 ModelAndView mv = new ModelAndView(); mv.addObject("msg","ControllerTest1"); mv.setViewName("test"); return mv; } } ``` ## SpringMVC:不使用視圖解析器來轉發的方式 測試前,需要將視圖解析器注釋掉 ```java= @Controller public class ResultSpringMVC { @Controller public class ModelTest1 { @RequestMapping("/m1/t1") public String test(Model model){ model.addAttribute("msg","modeltest"); //轉發一 return "/WEB-INF/jsp/test.jsp"; } } @RequestMapping("/rsm/t2") public String test2(){ //轉發二 return "forward:/WEB-INF/jsp/test.jsp"; } @RequestMapping("/rsm/t3") public String test3(){ //重定向 return "redirect:/index.jsp"; } } ``` 轉發一與轉發二成功(url不變,因此為轉發) ![](https://i.imgur.com/mf8Yv41.png) ## SpringMVC:使用視圖解析器來轉發的方式 重定向 , 不需要視圖解析器 , 本質就是重新請求一個新地方嘛 , 所以注意路徑問題. 可以重定向到另外一個請求實現 . ```java= @Controller public class ResultSpringMVC2 { @RequestMapping("/rsm2/t1") public String test1(){ //转发 return "test"; } @RequestMapping("/m1") public String test(Model model){ model.addAttribute("msg","modeltest"); //重定向 return "redirect:/index.jsp"; } } ``` #### 重定向結果 網址改變了,將addAttribute的內容拼接到網址欄 ![](https://i.imgur.com/F9XOUc2.png) ### Q:為何不使用WEB-INF資料夾的底下的jsp來重定向? #### A:因為WEB-INF資料夾是被保護的,不被外人所觀測到,因此無法重定向 ### 完整解答: 原因既然WEB-INF是安全目錄,客戶端無法訪問,而重定向就相當於用戶直接從客戶端訪問了的路徑,自然就不可以啦,只有程序內部轉發的時候才能轉發到WEB-INF下的JSP。