对于用户的请求,有不同的实现方式,为了方便地调用它们,springmvc简单地分类之后,并分别构建成接口,调用之前,让controller实现相关接口,然后就可以利用多态,使用接口名调用用户设计的方法。而适配器的作用就是让springmvc知道使用那个接口名去调用方法。
一、SimpleControllerHandlerAdapter
在springmvc.xml中配置
<!-- 配置处理器适配器 springmvc框架根据HandlerAdapter接口判断是否是处理器适配器 -->
<bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
这个适配器要求controller实现controller接口
public class ItemController1 implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
而Controller接口中
public interface Controller {
/**
* Process the request and return a ModelAndView object which the DispatcherServlet
* will render. A <code>null</code> return value is not an error: It indicates that
* this object completed request processing itself, thus there is no ModelAndView
* to render.
* @param request current HTTP request
* @param response current HTTP response
* @return a ModelAndView to render, or <code>null</code> if handled directly
* @throws Exception in case of errors
*/
ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
二、HttpRequestHandlerAdapter
<!-- HttpRequestHandlerAdapter适配器 -->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"
/>
它要求实现HttpRequestHandler接口
public class ItemController2 implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
而HttpRequestHandler接口中
public interface HttpRequestHandler {
/**
* Process the given request, generating a response.
* @param request current HTTP request
* @param response current HTTP response
* @throws ServletException in case of general errors
* @throws IOException in case of I/O errors
*/
void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException;
}
三、注解RequestMappingHandlerAdapter适配器(与注解映射器配套使用)
<!-- 注解处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!-- 注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
/>
方法名和返回值可以自己定
@Controller
public class ItemController3 {
//商品列表,@RequestMapping中url建议和方法名一致,方便开发维护
@RequestMapping("/queryItems")
public ModelAndView queryItems(){