基于DispatcherServlet对C/S交互的理解

众所周知,服务器作为网络中的服务提供者(响应客户端发送的请求),可以针对不同的请求对数据库做出恰当的处理,同时可以响应给发送该请求的客户端对应的资源:

Json对象或者静态资源(前端页面,图片等)。从而为用户的生活带来便捷(例如网上购物,网上打车等服务)。

1.客户端想要向对应服务器端发送Http请求,首先要建立TCP连接,通过ip+port找到对应的服务器进程,然后经过三次握手建立TCP连接

2.发送Http请求或Https请求(连接建立后可多次发送请求)。

3.Tomcat收到请求后会开启一个线程来处理该请求,解析该请求的uri。

4.通过解析好的路径调用恰当的过滤器(一般用于身份的认证以及过滤掉不可通过的请求)

5.通过过滤后的请求,服务器会执行对应的Servlet,这里我拿SpringMVC的DispatcherServlet为例分享Servlet的执行流程,这里不对其生命周期做具体说明(init一般在该servlet实例化的时候调用,destroy一般在服务器的结束,对象需要被释放的时候调用),主要针对service方法分享。

  调用Servlet的service方法后,该方法首先会获取请求对象的请求类型,通过请求类型调用恰当的方法,例如类型为“GET”的调用servlet对象的doGet方法,其它同理。如下图该请求方法为“GET”,则调用DoGet方法。

  doGet等方法在FrameworkServlet类中被重写,方法内部并没有对请求做任何处理而是将请求委托给了FrameworkServlet的processRequest方法,如下图 

   processReqeust方法同样在FrameworkServlet被实现,方法内部主要对请求做了一系列前置的准备,准备完成后调用doService方法。如下图

   doService方法在DispatcherServlet类中被实现,该方法中仍然是在为处理请求做前置处理:主要将web容器对象和一些视图属性置于request域中,然后执行doService方法,如下图

  doDispatch方法在DispatcherServlet类中被实现,是DispatcherServlet的核心方法。在该方法中:(1)首先会通过checkMultipart方法判断是否为上传请求,如果是则将请求封装成MultipartHttpServletReqeust对象,(2)通过“映射器”获得本次请求的执行链对象。(3)以执行链对象为参数调用getHandlerAdapter方法获取适配器对象。(4)如果是“GET”或者“POST”方法则需要处理lastModified。(5)执行拦截器的前置处理(applyPreHandle)。(6)处理请求(7)执行拦截器的后置处理请求(applyPostHandle)(8)处理返回结果,包括处理异常和渲染。源码如下图

 6.最终将json对象或静态资源响应给客户端,客户端得到响应后重新渲染页面,从而完成客户端与服务器端的交互。若长时间为发送请求,则释放TCP连接.

总结:这是我对客户端与服务器端交互的见解,主要对DispatcherServlet做了较为详细的分享。感谢观看!

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值