在之前的專案中,我們在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>
,沒錯,就是這個攔截了我們的請求。
那麼我們關於結果跳轉方式的介紹就完成了。