SpringMvc中的頁面跳轉


SpringMvc跳轉問題

SpringMvc的Controller每次處理完數據后都會返回一個邏輯視圖(view)和模型(model)
所以我們會看到原生的Controller是返回一個ModelAndView(內部包含了view和model)。
正常情況下(除非被@ModelAttribute注解了的方法),否則最終都會返回ModelAndView
當然有時候一個功能處理方法不一定要返回一個邏輯視圖,也可以重定向到另一個功能方法
服務器內部轉發到一個邏輯視圖或者另一個功能方法。

SpringMvc的強大之處在於它封裝了Servlet大量底層代碼,但是有沒有完全屏蔽用戶對Servlet API
的使用。所以SpringMvc中頁面跳轉也是分為兩大類:

  • 使用Servlet API實現頁面跳轉

    • 重定向方式: 由於重定向的本質是要求瀏覽器重新發送一個請求,SpringMvc里面的頁面一般是放到WEB-INF下,瀏覽器不可以直接訪問)
      所以這里的重定向實質是重定向到另一個功能方法。

    • 服務器內部請求轉發: 請求轉發為服務器內部行為,所以可以直接跳轉訪問一個jsp頁面也可以跳轉到另一個功能處理方法。

          //使用原生的ServletApi進行頁面跳轉
              @RequestMapping("/c")
              public String test(HttpServletResponse response, HttpServletRequest request) throws ServletException, IOException {
                  System.out.println("testC");
                  //跳轉到服務器內部的一個頁面
                  //request.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(request,response);         
                  
                  //跳轉到服務器內部的一個功能處理方法
                  //request.getRequestDispatcher("/dispather/b").forward(request,response);
              
                  //重定向一個功能方法
                  response.sendRedirect(request.getContextPath()+"/dispather/b");
          
                  return null;
              }
      
  • 使用SpringMvc的API實現頁面跳轉

    • 直接返回邏輯視圖名
        @RequestMapping("/b")
            public String testB(){
                System.out.println("testB");
                //直接返回一個視圖
                return "index";
            }
      
    • 返回自定義的ModelAndView: 自定義ModelAndView時,可以重定向或請求轉發
        //Controller中使用ModelAndView進行跳轉和重定向
            @RequestMapping("/e")
            public ModelAndView testE(){
                System.out.println("testE");
                //跳轉到服務器內部的一個頁面
                //return "index";
        
                //跳轉到服務器內部的一個功能處理方法
                //return new ModelAndView("forward:/dispather/b");
                //重定向一個功能方法
                return new ModelAndView("redirect:/dispather/b");
            }
      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM