SpringMVC入門學習---結果跳轉方式

Singgle發表於2019-05-10

在之前的專案中,我們在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>,沒錯,就是這個攔截了我們的請求。

那麼我們關於結果跳轉方式的介紹就完成了。

相關文章