當我們使用springMVC進行頁面跳轉的時候:
在使用springMVC的時候我們在控制器傳回頁面的時候,直接return 一個頁面
// 通路路徑
@RequestMapping("/abc")
public String show(){
System.out.println("a");
// 轉發的方式進行頁面的跳轉,如果是重定向 url的位址會發生變化
return "/success.jsp";
}
預設是轉發。
這個時候我們需要了解轉發和重定向的原理:
轉發是在伺服器内部進行跳轉的。
重定向則是先響應回去 ,然後再由用戶端進行二次請求。伺服器相當于處理了兩次請求。
轉發的方式可以有以下幾種:
可以forward:xxxxx.jsp 也可以直接進行 return
轉發的路徑在代碼中有說明:
轉發不支援絕對路徑!也就是不支援 forward:http://baidu.com 類似于這樣的頁面進行跳轉,因為轉發是在伺服器内部進行的頁面跳轉,伺服器内部就沒有這些路徑,怎麼可以通路到呢?
/**
* 轉發
* return "forward:../success.jsp";
*
* A、相對路徑 ../傳回上一級 ./目前一級
*
* B、根路徑 使用/ 開始 /代表的是目前的上下文路徑 推薦
*
* C、絕對路徑:不支援 ,因為轉發隻可以在伺服器内部跳轉
*
* */
@RequestMapping("demo1")
public String demo1(){
System.out.println("進入控制單元");
/*return "../success.jsp";*/
/*return "forward:/success.jsp";*/
return "forward:http://www.bjsxt.com";
}
使用重定向的方法:
return "redirect:/xxxx.jsp"
這裡我們需要了解一下:
使用根路徑/ :不管是重定向還是轉發,隻要使用/ 就是上下文路徑,就是從Tomcat配置的該項目的路徑開始
重定向是支援絕對路徑的,因為是由用戶端進行頁面的通路。
/**
* 重定向:
* "redirect:跳轉位址";
*
* 支援路徑
* A、相對路徑 ../ ./
*
* B、根路徑 /--代表的是目前的上下文
*
* C、絕對路徑 --支援的
*
*
*
* */
@RequestMapping("demo2")
public String demo2() {
return "redirect:/success.jsp";
/*
* return "redirect:../success.jsp";
* return "redirect:http://www.baidu.com";
* */
}
我們可以發現:
不管是轉發還是跳轉,都可以使用根路徑書寫,根路徑都是/開頭即可,十分的友善。
使用View類進行轉發和重定向:
View是spring中進行的封裝,我們可以通過一下方式來通過View進行轉發和重定向:
@RequestMapping("demo3")
public View demo3(){
//轉發
/* View v =new InternalResourceView("/success.jsp");*/
//重定向
View v =new RedirectView("/springmvc03/success.jsp");
return v;
}
有了View為什麼需要有ModelAndView?
因為View是視圖,Model是模型,return隻能傳回一種類型。是以springMVC又封裝了一種更加全面的類ModelAndView
ModelAndView 轉發和重定向:
ModelAndView一種是通過setViewName通過名稱:
來确定是轉發還是重定向(方式一),然後底層相當于用方式二的方式進行頁面跳轉,
方式二是對方式一的一種封裝,
當然,我們使用return 不管是forward還是redirect,底層都相當于用這種方式進行頁面跳轉。
public ModelAndView demo4(){
//方式一
ModelAndView modelAndView=new ModelAndView();
//轉發一
modelAndView.setViewName("forward:/success.jsp");
//重定向一
modelAndView.setViewName("redirect:/success.jsp");
//方式二
//轉發
modelAndView.setView(new InternalResourceView("/success.jsp"));
//重定向
modelAndView.setView(new RedirectView("/springmvc03/success.jsp"));
return modelAndView;
}