SpringMVC4 學習筆記(四)【處理器介面卡HandlerAdapter】
阿新 • • 發佈:2019-01-05
常用的處理器介面卡實現類有兩種
- HttpRequestHandlerAdapter
處理實現了HttpRequestHandler介面的處理器,當處理器實現介面後複寫handleRequest方法(無返回值)。
public class MyController implements HttpRequestHandler { public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("message", "Hello SpringMVC World!"); request.getRequestDispatcher("/WEB-INF/jsp/welcome.jsp").forward(request, response); } }
- SimpleControllerHandlerAdapter
處理實現了Controller介面的處理器,當處理器實現介面後複寫handleRequest(帶有返回值ModelAndView)
public class MyController implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mv = new ModelAndView(); mv.addObject("message", "Hello SpringMVC World!"); mv.setViewName("welcome"); return mv; } }
部分原始碼解析:
在中央排程器(DispatcherServlet)的doDispatch方法中,通過getHandlerAdapter方法獲取處理器相對應的介面卡
在getHandlerAdapter方法中:通過遍歷所有介面卡,驗證所有介面卡中的supports()方法,查詢處理器所對應的介面卡,找到則返回相對應的介面卡傳給ha
HttpRequestHanderAdapter原始碼示例:
supports方法通過instanceof判斷處理器是否實現了HttpRequestandler介面,返回相對應的boolean值給呼叫者
最後中央排程器(DispatcherServlet)再呼叫介面卡中的handle方法,
然後具體呼叫每個處理器複寫的handlerRequest方法