常用的处理器适配器实现类有两种
- 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方法