当用户访问一个url时,浏览器便会开始生成一个http请求.web
首先获取http请求中所须要的参数,如url,cookie,User-Agent等,而后请求操做系统发出http请求.spring
操做系统接收到请求以后,接下来就是熟悉的OSI模型走一遍,生成最终在物理层传输的流,经过访问DNS服务器传递给请求的目标ip.浏览器
当服务器接收到http请求以后,OSI模型再走一遍生成http报文传递给web容器.咱们这里以tomcat,spring为例.tomcat
首先来讲一下tomcat接收到请求以后的行为:服务器
当tomcat接收到请求以后会根据其server.xml这个配置文件去匹配http请求的url对应的host(项目),若是匹配到则会匹配这个host中的servlet,查找处理该url的servlet,找到以后便会执行对应的doGet或者doPost等等.cookie
咱们在部署一个web项目的时候,都会去配置web.xml,servlet就须要在这个文件中配置.咱们使用spring的话,咱们都会把DispatcherServlet这个类配置为servlet,而这个类的做用就是用于接收请求,并将请求分发给对应的的controller.app
接下来是具体的接收请求过程:url
①当tomcat收到http请求以后,会根据请求内容生成HttpServletRequest对象和HttpServletResponse对象,而后根据server.xml中的配置,找到对应的host下对应url的servlet并将生成的两个对象传递过去,这个时候若是是有效的请求的话,则会匹配到DispatcherServlet,以上tomcat的传递请求任务就完成了.spa
②DispatcherServlet会根据具体的请求去匹配context中的controller(具体是从handlerMapping中查找对应的handler,而后对应的HanlderAdaptor执行hanler方法),最后返回一个controller会结果给DispatcherServlet.操作系统
③DispatcherServlet收到controller返回的结果以后会处理异常,渲染视图资源等,而后经过HttpServletResponse响应用户的请求,即向用户反馈http请求处理的结果以及相应资源.