天天看點

SpringMVC中轉發和重定向(轉發和重定向的路徑問題,ModelAndView的初識)

當我們使用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;
    }
           

繼續閱讀