springmvc 中handlerAdapters 简介
HandlerAdapter作用:主要处理方法参数、相关注解、数据绑定、消息转换、返回值、调用视图解析器等等。
HandlerAdapter接口中定义了三个方法
public interface HandlerAdapter {
// 判断是否支持传入的handler
boolean supports(Object handler);
// 使用handler处理请求
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
// 获取资源的LastModified值
long getLastModified(HttpServletRequest request, Object handler);
}
类图
SimpleControllerHandlerAdapter
SimpleControllerHandlerAdapter-处理普通的Controller工作流接口。
@org.springframework.stereotype.Controller("/welcome")
public class WelcomeController implements org.springframework.web.servlet.mvc.Controller
{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView model = new ModelAndView("welcome");
model.addObject("message", "JavaInterviewPoint");
return model;
}
}
HttpRequestHandlerAdapter
HttpRequestHandlerAdapter-处理普通的HttpRequestHandler接口。
@org.springframework.stereotype.Controller("/welcome")
public class WelcomeController implements HttpRequestHandler {
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.getWriter().write("hello");
}
}
SimpleServletHandlerAdapter
SimpleServletHandlerAdapter- 处理普通的Servlet接口。
@org.springframework.stereotype.Controller("/welcome")
public class WelcomeController implements Servlet {
@Override
public void init(ServletConfig config) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
res.getWriter().write("hello");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
RequestMappingHandlerAdapter
RequestMappingHandlerAdapter-支持携带方法参数和返回类型签名的HandlerMethod,如通过@RequestMapping定义的。
@Controller
public class WelcomeController {
@RequestMapping("/welcome")
public ModelAndView hello(HttpServletRequest request, HttpServletResponse response) throws IOException {
ModelAndView mv = new ModelAndView("hi");
return mv;
}
}