手写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)分发请求
附脑图:
最新文章
- Android编译环境折腾记
- 使用pango-Cairo列出系统中的有效字体
- 软件工程课设day3
- EETOP中关于Gm仿真的一些帖子的总结
- iOS: FFMpeg编译和使用问题总结
- django template中load的作用
- mysql加密解密方式用法
- 【MySQL】计算 TPS,QPS 的方式
- poweshell批量删除某类型文件
- POJ - 1426 暴力枚举+同余模定理 [kuangbin带你飞]专题一
- win10系统的“USB选择性暂停设置”怎么打开
- Maven 属性
- python 笔记 week1-- if while for
- The Django Book第七章(表单)
- ovs flow 原理及实验
- 手速太慢QAQ
- SpringMVC学习笔记六:使用Formatter解析或格式化数据
- js获取或判断任意数据类类型的通用方法(getDataType)和将NodeList转为数组(NodeListToArray)
- [leetcode]115. Distinct Subsequences 计算不同子序列个数
- Verilog 位拼接运算符的优先级
热门文章
- LeetCode 848. Shifting Letters
- [教程]Ubuntu16.04安装TeX Live
- my OD
- UFUN函数 UF_ASSEM UF_PART函数(UF_ASSEM_ask_work_part,UF_PART_ask_part_name)
- ubuntu 安装任何版本的Firefox
- P3350 [ZJOI2016]旅行者
- linux命令之------部分细节点
- wireshark安装和使用 -基础篇
- 【Spring Boot】内嵌容器
- golang字节数组拷贝BlockCopy函数实现