手写spring+springmvc+mybatis框架篇springmvc

作者:小亮,原创投稿

知音专栏

先放一张网上的很好的一张原理图

图片出自,这篇博客原理也写的很清晰明了。我的实现也是借鉴了这张图

https://www.cnblogs.com/xiaoxi/p/6164383.html

先说一下我的实现思路:

1 在MyDispatcherServlet中的servlet初始化的时候,绑定标有@MyController注解类下面的@MyRequestMappign的value值和对应的方法。绑定的方式是放在map集合中。这个map集合就是上图说的handlerMapping,返回的handler也就是一组键值对。

2 找到对应的方法后,反射执行方法,在方法中创建一个modelandview对象,model也就是我们说的数据域,view返回的是一个视图名称,也就是我们说的视图域,当然,我这里只有jsp,spring做的很复杂。支持多种类型。最后所谓的渲染,也就是将这个数据域中的数据会添加到request请求中,然后转发。返回客户端。

3 绑定参数模型这一部分略为复杂。在下面讲解

下面是MyDispatcherServlet

这个servlet的作用就是接收用户请求,然后派发注意标红处bingdingMethodParamters方法,这个方法实现了参数的绑定。

首先是绑定方法和url,是Handler类,用如下对象绑定

参数绑定支持

@MyRequestMapping(用来绑定简单数据类型)

@MyModelAndAttribute(绑定实体类)

不写注解,直接写实体类。

下面先贴一下这一部分的结构关系图

这里用多态的设计思想,对于bindingParamter方法写了两种实现,方便大家自行扩展

下面是接口BindingParamter和两个实现类BindingByMyModelAttribute和BindingByMyRequstParam

绑定完参数,就该返回ModelAndView了,

view是视图名称,还有viewResolver,用来接收xml文件中定义的前缀和后缀。modelMap是数据域,最后渲染的时候要绑定到request中。

最后的渲染类

至此,最后在MyDispatcherServlet中用转发操作将试图返回。

我将此项目上传到了github,需要的童鞋可以自行下载。

https://github.com/836219171/MySSM

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180726A0AEO900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券