手写Spring之MVC实现(二)

继手写spring之Ioc、DI之后,对其中的mvc功能做了进一步操作
主要是自己手动实现mvc九大组件中的其中3个,包括HandlerMapping、HandlerAdapter、ViewResovler。另外又实现了View以及ModelAndView对象

代码整体结构如图

在这里插入图片描述
完整代码发布在Github:https://github.com/yangzhenyan/spring_mvc.git

基本思路流程:
MVC(初始化Ioc DI操作完成之后,会初始化MVC九大组件,这里我们实现其中3个组件,初始化之后会执行service)

一、initHandlerMapping()

1、调用applicationContext中的方法获取beanName数组
2、通过getBean(beanName)方法获取对象 
3、取出RequestMapping注解上的值
4、封装HandlerMapping对象并放入list集合

二、initHandlerAdapter()

1、遍历HandlerMapping,一个HandlerMapping对应一个HandlerAdapter
2、将遍历HandlerMapping、new HandlerAdapter放入adapterMap集合中

三、initViewResolvers()

1、调用ApplicationContext中的getConfig方法,获取配置文件中定义的页面存放路径

2、根据页面存放路径获取文件的File对象,遍历File,一个File对应一个new ViewResovler(一个页面对应一个视图解析器)

3、并用list集合接收ViewResovler

以上mvc组件初始化完成之后,进入service方法doDisPath()

1、根据前端传过来的uri拿到对应的HandlerMapping

2、如果传过来的uri没有对应的HandlerMapping,processDispatchResult()对结果做判断,new ModelAndView('404')参数传过去

3、processDispatchResult()中遍历ViewResovler集合,调用ViewResovler中resolveViewName(mv.getName())方法并返回View

4、调用View中render()方法对页面进行渲染,render方法中定义RandomAccessFile对象对文件进行逐行读取赋值

5、如果uri有对应的HandlerMapping,则从adapterMap集合获取对应的HandlerAdapter

6、调用HandlerAdapter中getModelAndView()方法,进行参数适配反射执行invoke方法并返回ModelAndView对象

7、最后再调用processDispatchResult()方法,解析相应的页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值