Spring MVC 处理器适配器
本文最后更新于:2024年9月8日 晚上
Spring MVC 处理器适配器
- HandlerAdapter调用具体的方法对用户发来的请求来进行处理。
- 当HandlerMapping获取到执行请求的controller时,DispatcherServlte会根据controller对应的controller类型来调用相应的HandlerAdapter来进行处。
源码分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public class SimpleControllerHandlerAdapter implements HandlerAdapter {
@Override public boolean supports(Object handler) { return (handler instanceof Controller); }
@Override @Nullable public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return ((Controller) handler).handleRequest(request, response); }
@Override public long getLastModified(HttpServletRequest request, Object handler) { if (handler instanceof LastModified) { return ((LastModified) handler).getLastModified(request); } return -1L; }
}
|
自定义handlerAdaptor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public class MyHandlerAdapter implements HandlerAdapter {
@Override public boolean supports(Object handler) { return (handler instanceof MyController); }
@Override @Nullable public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { request.setCharacterEncoding("UTF-8"); System.out.println("Enter MyHandlerAdapter!"); return ((MyController) handler).test(request); }
@Override public long getLastModified(HttpServletRequest request, Object handler) { if (handler instanceof LastModified) { return ((LastModified) handler).getLastModified(request); } return -1L; }
|
1 2 3
| public interface MyController { ModelAndView test(HttpServletRequest req); }
|
1 2 3 4 5 6 7 8 9
| public class DefinedController implements MyController { @Override public ModelAndView test(HttpServletRequest req) { ModelAndView mv = new ModelAndView(); mv.setViewName("test"); mv.addObject("msg", "hello"); return mv; } }
|
1 2 3 4
| <bean class="com.example.MyHandlerAdapter"/>
<bean name="/mycontroller" class="com.example.DefinedController"/>
|