java--org.springframework.web.servlet.FrameworkServlet 抽象类 - 源码阅读 - 笔记 - spring mvc ( 二 )

java--org.springframework.web.servlet.FrameworkServlet 抽象类 - 源码阅读 - 笔记 - spring mvc ( 二 )_第1张图片

第一步:
  1. 用户GET 请求—> 调用 Servlet 的 service() 方法, 而抽象类型 javax.servlet.http.HttpServlet 实现了 service() 方法
  2. HttpServlet 的 service() 做了请求类型分发, 调用 doGet 方法
    java--org.springframework.web.servlet.FrameworkServlet 抽象类 - 源码阅读 - 笔记 - spring mvc ( 二 )_第2张图片
第二步:
  1. org.springframework.web.servlet.FrameworkServlet 抽象类 重写了 HttpServlet 的 doGet 方法,没有调用父的 doGet 方法,所以程序跑到了 FrameworkServlet 的 doGet 方法里
    java--org.springframework.web.servlet.FrameworkServlet 抽象类 - 源码阅读 - 笔记 - spring mvc ( 二 )_第3张图片
第三步:调用 processRequest 方法
	/**
	 * Process this request, publishing an event regardless of the outcome.
	 * 

The actual event handling is performed by the abstract * {@link #doService} template method. */ protected final void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 开始时间 long startTime = System.currentTimeMillis(); Throwable failureCause = null; // 当前线程关联的 LocaleContext LocaleContext previousLocaleContext = LocaleContextHolder.getLocaleContext(); // LocaleContext localeContext = buildLocaleContext(request); // RequestAttributes previousAttributes = RequestContextHolder.getRequestAttributes(); // 构建请求属性 ServletRequestAttributes requestAttributes = buildRequestAttributes(request, response, previousAttributes); // WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request); // 注册可调用拦截器 asyncManager.registerCallableInterceptor(FrameworkServlet.class.getName(), new RequestBindingInterceptor()); // 初始化上下文持有者 initContextHolders(request, localeContext, requestAttributes); try { // ###################################### 重点、重点、重点 doService(request, response); } catch (ServletException | IOException ex) { failureCause = ex; throw ex; } catch (Throwable ex) { failureCause = ex; throw new NestedServletException("Request processing failed", ex); } finally { resetContextHolders(request, previousLocaleContext, previousAttributes); if (requestAttributes != null) { requestAttributes.requestCompleted(); } logResult(request, response, failureCause, asyncManager); publishRequestHandledEvent(request, response, startTime, failureCause); } }

第三步: 调用 doService(request, response) 方法
  1. 在FrameworkServlet 抽象类型下 doService 方法是抽象方法,所以我们要找它实现类
  2. DispatcherServlet 类 doService 方法
哈哈 ^ _ ^ 到这里就是我们配置 web.xml 文件 DispatcherServlet 类 , 进入了spring mvc 的世界了

你可能感兴趣的:(jsp,servlet,spring,java,mvc)