1. 程式人生 > >SpringMvc Controller類的方法返回值

SpringMvc Controller類的方法返回值

Controller控制器,是MVC中的部分C,是部分的原因是因為此處的控制器主要負責功能處理部分

收集、驗證請求引數並繫結到命令物件;

命令物件交給業務物件,由業務物件處理並返回模型資料;

返回ModelAndViewModel部分是業務物件返回的模型資料,檢視部分為邏輯檢視名 

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類方法返回字串可以指定邏輯檢視名,通過檢視解析器解析為物理檢視地址