SpringMvc Controller類的方法返回值
•Controller控制器,是MVC中的部分C,是部分的原因是因為此處的控制器主要負責功能處理部分:
•收集、驗證請求引數並繫結到命令物件;
•將命令物件交給業務物件,由業務物件處理並返回模型資料;
•返回ModelAndView(Model部分是業務物件返回的模型資料,檢視部分為邏輯檢視名) ;
•而DispatcherServlet主要負責整體的控制流程的排程部分:
•負責將請求委託給控制器進行處理;
•根據控制器返回的邏輯檢視名選擇具體的檢視進行渲染(並把模型資料傳入) ;
•因此MVC中完整的C(包含控制邏輯+功能處理)由(DispatcherServlet + Controller
•Controller類方法中定義ModelAndView物件並返回,物件中可新增model資料、指定view。
@Controller
public class AnnotationHelloWordController{
@RequestMapping("/helloWorld")
public ModelAndView helloWorld() throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "Hello World");
modelAndView.setViewName("hello");
return modelAndView;
}
}
•該物件中包含了一個model屬性和一個view屬性
•model:其實是一個ModelMap型別。其實ModelMap是一個LinkedHashMap的子類
•view:包含了一些檢視資訊
•當檢視直譯器解析ModelAndView時,其中model本生就是一個Map的實現類的子類。檢視解析器將model中的每個元素都通過request.setAttribute(name, value);新增request請求域中。這樣就可以在JSP頁面中通過EL表示式來獲取對應的值
•向ModelAndView新增資料
•方法1:可以通過ModelAndView的方法
public ModelAndView addObject(String attributeName, Object attributeValue)
•由於我們知道其model屬性是一個Map的實現類。那麼可以通過Map的方法來實現
ModelAndView mav=new ModelAndView();
mav.getModel().put("name", "zhanghw");
•在Controller類方法形參上可以定義request和response,使用request或response指定響應結果
@RequestMapping("/test")
public void testSource(HttpServletRequest request, HttpServletResponse response) throws Exception {
Request.setAttribute(“abc”,”dadadadad”);
// 如果使用原始的方式做頁面跳轉,必須給的是jsp的完整路徑
request.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(request, response);
}
•Controller類方法返回字串可以指定邏輯檢視名,通過檢視解析器解析為物理檢視地址。