SpringMVC入門學習---結果跳轉方式
在之前的專案中,我們在Controller中設定ModelAndView物件來進行結果的跳轉。其實除了這一種方式以外,我們還有其他的方式可以跳轉結果。
1.設定ModelAndView物件。
雖然之前已經用過了,但為了鞏固一下,我們還是簡單提一提吧。
根據View的名稱和檢視解析器跳轉到指定的頁面。
@RequestMapping("/hello") public ModelAndView hello(HttpServletRequest req, HttpServletResponse res) { ModelAndView mv=new ModelAndView(); mv.addObject("msg","hello annotation"); mv.setViewName("hello"); return mv; } 複製程式碼
2.通過ServletAPI物件實現
用ServletAPI來實現跳轉的話,我們就不需要檢視解析器了。
a)用HttpServletResponse來進行輸出
@RequestMapping("/hello") public void hello(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.getWriter().println("use httpservlet api"); } 複製程式碼
b)用HttpServletResponse實現重定向
@RequestMapping("/hello") public void hello(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.sendRedirect("index.jsp"); } 複製程式碼
我們要注意的是在maven專案中index.jsp檔案是在webapp資料夾中,而Web專案中是在WebRoot資料夾中。
c)通過HttpServletRequest實現轉發
@RequestMapping("/hello") public void hello(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { req.setAttribute("msg", "use req send message"); req.getRequestDispatcher("index.jsp").forward(req, resp); } 複製程式碼
3.通過springmvc實現轉發和重定向---不使用檢視解析器
實現轉發
//第一種轉發方式 @RequestMapping("/hello1") public String hello() { return "index.jsp"; } //第二種轉發方式 @RequestMapping("/hello1") public String hello() { return "forward:index.jsp"; } 複製程式碼
實現重定向
@RequestMapping("/hello1") public String hello() { return "redirect:index.jsp"; } 複製程式碼
4.通過springmvc實現轉發和重定向---使用檢視解析器
實現轉發
@RequestMapping("/hello2") public String hello2() { return "hello"; } 複製程式碼
實現重定向
@RequestMapping("/hello2") public String hello2() { //return "hello"; return "redirect:hello.do"; } 複製程式碼
注:重定向"redirect:index.jsp
"不需要檢視解析器
我們看到的是我們重定向到的是一個hello.do,而不是用重定向的方式去跳轉到hello.jsp檔案。也就是說我們重定向到的是一個index.jsp檔案。
重定向是不會用到檢視解析器的。所以用springmvc實現重定向,不管你有沒有檢視解析器都是沒有意義的,因為根本就沒有用過。
接下來,就是一個我遇到的小問題,如果我們return一個這個"redirect:hello"
,也就是不加.do
,我們可不可以跳轉到index.jsp檔案呢?答案是不行。不知道大家記不記得我們在web.xml檔案裡面配置對映加了一個<url-pattern>*.do</url-pattern>
,沒錯,就是這個攔截了我們的請求。
那麼我們關於結果跳轉方式的介紹就完成了。