作者:小亮,原创投稿
知音专栏
先放一张网上的很好的一张原理图
图片出自,这篇博客原理也写的很清晰明了。我的实现也是借鉴了这张图
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
领取专属 10元无门槛券
私享最新 技术干货