手写MVC框架(一)-再出发
背景
前段时间把之前写的DAO框架(手写DAO框架(一)-从“1”开始)整理了一下,重构了一版。整理过程中看以前写的代码,只是为了了解实现,只是为了实现,代码写的有点粗糙。既然已经整理了DAO框架,索性继续整理一下MVC框架(https://github.com/shuimutong/zxmvc.git),所谓温故知新也。
一、关于Servlet
1、简介
学习web的时候,一般都是先学Servlet
通过Servlet可以接受到http请求,并进行响应
这个时候,是不需要struts、SpringMVC等框架的
2、tomcat、jetty
web应用服务器
servlet容器
servlet需要运行在容器里
3、servlet生命周期
1)服务启动时加载servlet
2)第一次请求时
2.1)实例化servlet
2.2)执行init方法
3)调用service方法,判断请求的类型
3.1)get类型则调用doGet方法
3.2)post类型则调用doPost方法
4)服务重启或者关闭时,调用destroy方法
二、MVC框架
Model(模型)
应用程序中用于处理应用程序数据逻辑的部分
View(视图)
应用程序中处理数据显示的部分
Controller(控制器)
应用程序中处理用户交互的部分
三、SpringMVC
1、概述
Controller接收请求,然后返回ModelAndView
2、请求处理流程
1)SpringMVC将所有的请求提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理
2)DispatcherServlet查询HandleMapping,找到处理请求的Controller
3)DispatcherServlet将请求提交到目标Controller
4)Controller进行业务逻辑处理后,返回一个ModelAndView
5)DispatcherServlet查询ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
6)将页面渲染到浏览器端
3、思考
1)关于视图解析器
之前的页面经常用到freeMarker、jsp等,需要经过视图解析器解析成Html
个人觉得上面两种方式,还不如直接html,通过js刷页面来的直观
自己写MVC框架,可以先实现MC,V暂时用html
2)主要功能
封装了servlet
IOC:实例管理
AOP:动态代理、cglib
四、实现思路
1、如何接收请求,分发请求
类似DispatcherServlet
服务初始时扫描所有URI,并放入一个URIMAP中
定义一个Servlet来接收所有请求
根据请求URL匹配URIMAP中对应的Controller
将请求分发给对应的Controller
2、IOC如何实现
注解形式
定义需要的注解
服务启动时,扫描注解的类
将注解的类根据依赖(通过反射)进行实例化
3、AOP
暂缓实现
五、实现概述
1、实现注解
1)各层注解
Controller、Service、Repository、Component
2)自动注入注解
Autowired
3)URI注解
RequestMapping
2、扫描注解类
扫描填写的URI
3、实现DispatcherServlet
1)接收请求
2)分发请求
附脑图: