从Spring MVC一次请求开始学习java(一)
作为一个普通web后端的码农,经常接触的就是controller、service、dao三层。但一个请求到达服务器后如果找到对应的controller对应的方法,过滤器及拦截器又是如何工作的,为什么controller层中使用@RequestBody后request中不能再获取到输入流。
请求达到服务器后,请求先经过过滤器,到达Servlet,执行拦截器方法,最后达到Controller层。
在org.apache.catalina.core.StandardWrapperValve
中invoke方法我们可以找到获得过滤器的代码:
在ApplicationFilterFactory.createFilterChain()方法中,会从StandardContext
中获取FilterMap数组,匹配路径及Servlet名称符合FilterMap的过滤器都会添加到过滤器链中。
接下来请求会到达DispatcherServlet,首先到达doService()方法,在这个方法中给request请求设置了一些参数后给doDispatch()方法。都Dispatch()方法,就说来话长了,有时间再聊