注:用于对前端控制器的理解
用户从输入url到返回网页在网络中到底发生了什么?
客户端
- 首先用户在浏览器页面输入url地址,计算机会根据用户输入的域名查询目标的IP地址。
- 浏览器使用获取到的IP地址通过TCP/IP协议与目标服务器通过三次握手建立安全连接,确保双方进行可靠性通信。
- 在应用层,根据http通信协议建立http报文,在传输层,通过TCP/UDP协议对http报文进行包装,在头部加上TCP头,然后在网络层加上IP头,最后进入网路接口层添加MAC地址,从而进入互联网中通过各个路由器进行传输。
网络中
- 在此期间,主机会根据自己的路由表决定下一步应该去找哪一个路由器是对的,如果不知道路由器的MAC地址,则使用APR协议广播目标IP地址在局域网中进行询问,直到目标路由器确认并回复自己的MAC地址给主机。
服务器
- 服务器中的DispatcherServlet(前端控制器)接受用户发送的请求,并调用HandlerMapping(处理器映射器)。解释:HandlerMapping是用来查找Handler的,在controller中每一个被标注了@RequestMapping注解的方法都可以是一个handler,也可以是一个类;HandlerMapping就是根据收到的请求查找对应的handler。
- HandlerMapping将对应查找到的处理器对象以及处理器拦截器(如果有)一并返回给DispatcherServlet,返回的是HandlerExecutionChain执行链。
- DispatcherServlet调用HandlerAdapter处理器适配器。解释:DispatcherServlet通过HandlerMapping找到的handler形式其实是不一样的,有可能是一个方法,也有可能是一个类,所以就需要适配器对所找到的handler进行适配,即适配器模式的应用。
- 找到对应的Controller以后执行完返回ModelAndView给HandlerAdapter并返回给前端控制器。
- 前端控制器DispatcherServlet将ModelAndView传给ViewReslover视图解析器,视图解析器解析完了以后返回具体的视图View给前端控制器DispatcherServlet。
- DispatcherServlet拿到View以后进行渲染视图并返回给客户端。