Spring MVC流程详解

Spring MVC流程图

       从左到右客户端发起用户请求,以http形式进入到servlet容器中,servlet容器解析数据成为一个Endpoint对象,Endpoint对象包含请求的url、HttpHeader以及解析完或者读完的body数据流,然后进入用户自定义的filter,在filter中用户可以对请求进行处理,然后经过多个filter处理完成之后,就进入spring MVC入口DispatcherServlet,之后先进入一些常用的解析器中,比如MultipartResolver用来解析上传文件字节流,以及把一些字符串k:v读出来封装到对象中,以供后续的controller接收,从解析器这一层出来就是通过请求url寻找handler的过程,handler就是我们自己定义的Controller,由于我们在Controller中注解了RequestMapping,url映射在启动过程中,就会通过RequestMapping将Controller对应的方法注册到HandlerMapping中,如果无法在HandlerMapping中找到请求对应的Handler,就会报404错误,否则,会进入拦截器HandlerInceptor中,我们在拦截器中可以打印日志、身份鉴权等相关的操作,经过拦截器之后,spring会对数据进行绑定,与RequestMapping注解的方法参数进行绑定,返回反射调用我们的Controller方法,这时就进入了我们具体的Controller方法体中了,在Controller方法体中可以调用相应的service进行业务处理,从Controller出来之后,开始创建ModelAndView对象,之后进入渲染页面的过程,实际上是将数据进行模板变量替换,渲染之后就经过DispatcherServlet返回,filter后续处理,最终通过Servlet容器形成http响应返回给客户端,这就是spring MVC整体流程。

Servlet容器响应用户请求流程(简约版)

        Java中对Http的处理,是由Servlet来完成的,然而,servlet则由Servlet容器进行管理。当过来一个Http请求,则首先是Servlet容器接收,容器负责对Http进行解析,然后创建Servlet的Request和Response实例(即HttpServletRequest和HttpServletResponse实例,其中HttpServletRequest对象中封装了Http请求信息)。Servlet容器调用了servlet(HttpServlet的service方法)把Request和Response对象最为参数传给serlvet,servlet再调用Request的有关方法获取Http的请求信息(Servlet容器解析后的信息)。而后servlet调用Response的有关方法来生成响应客户端的信息。最终Servlet容器把相应结果传给客户。

 

猜你喜欢

转载自blog.csdn.net/m0_37732829/article/details/90406053