天天看點

springMVC源碼分析--SimpleServletHandlerAdapter(二)

上一篇部落格​​springMVC源碼分析--HandlerAdapter(一)​​中我們主要介紹了一下HandlerAdapter接口相關的内容,實作類及其在DispatcherServlet中執行的順序,接下來我們詳細介紹一下其實作類SimpleServletHandlerAdapter,SimpleServletHandlerAdapter其實是一個Servlet的擴充卡,其最終執行的方法是Servlet的service方法,源碼如下,我們可以看到其真正起作用的地方是((Servlet) handler).service(request, response),其實也就是調用Servlet的service,其實本質還是比較簡單的。

supports方法就是判斷handler是否是Servlet

getLastModified直接傳回-1

handle方法本質是執行Servlet.service方法。

public class SimpleServletHandlerAdapter implements HandlerAdapter {

  @Override
  public boolean supports(Object handler) {
    return (handler instanceof Servlet);
  }
  
  //執行Servlet的service方法
  @Override
  public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
    //本質還是執行Servlet的service方法
    ((Servlet) handler).service(request, response);
    return null;
  }

  @Override
  public long getLastModified(HttpServletRequest request, Object handler) {
    return -1;
  }

}      

這樣springMVC中就提供了執行Servlet的擴充卡,如果可以的話我們是否也可以自己寫一個擴充卡類然後注入到springMVC 的容器中。