感谢你的到来,这是我第一篇尝试用故事性的方式来记录自己对编码中一些东西的理解。本文只关注过程,不注重解析实现细节。如果想了解具体的实现细节,请自行百度或追踪源码学习。如果在记录中存在不合理的地方,请不吝指教。嘻嘻
当作为人类的你在浏览器点击一个连接时就会激活一个HTTP请求,这个HTTP小伙计就开始了它为你寻找资源的旅程。中间略掉繁琐的HTTP解析,直接来到我们的服务器,被SpringMVC中的门卫DispatcherServlet(核心控制器)拦截下来。
门卫:喂,小子!你要去哪儿?
小伙计吓了一哆嗦,颤抖着拿出来他的路条儿(HttpServletRequest)交给了门卫。
门卫拿着路条去到一个小黑屋里,只听叮叮当当一阵子后,满头大汗的出来又走进一间挂着HandlerMappings的房间,里面有差不多8个黄色的看起来满眼疲惫的小盆友。看到门卫进去立马满眼敬畏的盯着他,门卫从第一个小人儿开始,依次把手里的路条扔给他们进行对比,当走到头上挂着RequestMappingHandlerMapping的小人儿时,他比对成功了。接着门卫就从这个小人儿的屁股里抠出一条说是叫做HandlerExecutionChain的链子,门卫看着手里链子莫名的笑了。
接着门卫从这个叫HandlerMappings的房间里出来,转身来到一间叫HandlerAdapters的屋里。这个屋子很小灯光昏暗,小伙计隐隐能看见里面有三个小人儿被锁在三个笼子里。
只见门卫从手里的链子上扣下一个像手一样的东西,狠狠地把它扔个第一个小人儿,恶恶地说:“这个Handler你能不能处理?”
第一个小人看了看摇摇头,门卫一把拿回来扔给第二个叫做RequestMappingHandlerAdapter的小人儿。这个小人儿一看,喜颜悦色的说:“我可以搞”。
“嗯,那你跟我出来吧!”门卫没好气地说。
门卫把RequestMappingHandlerAdapter从小黑屋带到门卫室,关好门。只听里面咣咣的响,过了一阵子。RequestMappingHandlerAdapter把一个装着各种奇奇怪怪的数据的小篮子交给了门卫。门卫看了看手里的篮子,对RequestMappingHandlerAdapter说“嗯,这个ModelAndView搞的不错”。
门卫拿着这个叫mv的小篮子,从办公桌的抽屉里拿出一个装有各种各样工具和彩盒的叫做ViewResolver的工具箱把这个篮子里的数据和模板进行了填充和渲染。然后出来对小伙计说:“给你”。小伙计看着手里五彩斑斓的画板,刚要说谢谢。就被门卫一脚按照原来踢了回去。而你津津有味的看着浏览器,伴随着一阵舒爽的颤抖结束了这次神秘的网络漫游之旅。