美文网首页
DispatchServlet干了啥

DispatchServlet干了啥

作者: cfc1823bdc2b | 来源:发表于2018-12-11 18:29 被阅读0次

 

HandlerMapping是个接口,里面就只有一个方法getHandler,源码如下:

spring项目启动的时候会扫描包,专门有个map用来存储controller类的(key是@RequestMapping里面的value),这个getHandler方法就是根据这个value找到这个类对象。

HandlerAdapter里面有个方法handle,参数需要一个handler,返回值就是ModelAndView,model是键值对形式的参数啦,view就是返回的那个String,比如:/login,在SpringMVC配置文件里面不是配置了视图解析器么,完了还配置了前缀和后缀,前缀是**/jsp/后缀是.jsp还记得么,完了万一找不到你写的那个返回视图还会报404,这里就是原因。

下面来看看ViewResolver,这哥们也是个接口,里面就一个方法,resolveViewName,所以说源码写得好,光看名字就知道是干啥的,参数一个name一个locale,就是根据名字和前后缀就能找到那个jsp了,View也是个接口有很多实现类,配置文件里面不是要注明解析类么,解析类就是View的子类,找到jsp把里面的东东解析成浏览器能认识的东东。

最后返回给DispatchServlet,这个类自己做后面的操作,也就是渲染view再返回给浏览器,这里DispatchServlet类做了一个判断,处理返回的不是view而是其他的类型的情况,比如移动端请求一些数据,如果不是view那么就没有viewResolver什么事了,跳过它往下执行,如果是view就会进入到render方法中。

最终会执行到AbstractView类中的render方法,我们来看看这哥们干了啥事:

最后是个renderMergedOutputModel方法,这个方法的实现类是AbstractView的子类,叫InternalResourceView,这个类又调用父类AbstractView的exposeModelAsRequestAttributes方法,这个方法就是把model注入到request的attribute中,这里你肯定要问,为嘛调来调去呢,不麻烦么,我来简单解释一下,根据java设计理论,顶层肯定是接口,抽象类实现这个接口,并可以添加一些通用的方法,这个exposeModelAsRequestAttributes就是起到这个作用。

最后一步,请看下图:

forward是不是很熟悉,这不是服务端发起的请求么,好了,以上,就是这样。

相关文章

  • DispatchServlet干了啥

    ​ HandlerMapping是个接口,里面就只有一个方法getHandler,源码如下: ​ spring项目...

  • 干了啥

    为了显示我的改变,从减体重开始。这样一来,大家都能看到,李老师的确是变了个样啊!至于内在的思想,是隐形的。不容易看...

  • SpringMVC常见问题

    工作原理 用户发送请求,请求被前端控制器DispatchServlet捕获 DispatchServlet都请求U...

  • SpringBoot 分析

    DispatchServlet的功能 捕获特定格式的Url请求 初始化DispatchServlet的上下问,处理...

  • 2021-05-03日记

    干了啥你?

  • SpringBoot 整合Spring MVC

    之(DispatchServlet添加流程) 参考

  • 干了些啥

  • 最近干了啥

    好久没在这里留个脚印了,不禁回想,都干了些啥呢?时间都浪费掉了吗? 主要还是上下班赶时间的点了,路有点远,工作并没...

  • 今日干了啥

    昨天由于改简历忙到3点多,就忘了更文,直到和4点钟才想起来,还以为又要从零开始了,结果刚刚一看,才知道还有一张复活...

  • 不知干了啥

    一天下来,似乎忙忙叨叨,却好像也能忙里偷闲逛个淘宝啥的,到底干啥了呢? 早上吃了早餐,进办公室收拾了办公桌,摘抄了...

网友评论

      本文标题:DispatchServlet干了啥

      本文链接:https://www.haomeiwen.com/subject/dmbehqtx.html