手写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)分发请求
附脑图:

手写MVC框架(一)-再出发的更多相关文章
- 手写MVC框架(二)-代码实现和使用示例
--------上一篇:手写MVC框架(一)-再出发----- 背景 书接上文,之前整理了实现MVC框架需要写哪些东西.这周粗看了一下,感觉也没多少工作量,所以就计划一天时间来完成.周末的时间,哪会那 ...
- 手写MQ框架(一)-准备启程
一.背景 很久以前写了DAO框架和MVC框架,前段时间又重写了DAO框架-GDAO(手写DAO框架(一)-从“1”开始,源码:https://github.com/shuimutong/gdao.gi ...
- 手写MQ框架(二)-服务端实现
一.起航 书接上文->手写MQ框架(一)-准备启程 本着从无到有,从有到优的原则,所以计划先通过web实现功能,然后再优化改写为socket的形式. 1.关于技术选型 web框架使用了之前写的g ...
- 源码分析系列 | 从零开始写MVC框架
1. 前言 2. 为什么要自己手写框架 3. 简单MVC框架设计思路 4. 课程目标 5. 编码实战 5.1 配置阶段 web.xml配置 config.properties 自定义注解 5.2 初始 ...
- 手写MQ框架(四)-使用netty改造梳理
一.背景 书接上文手写MQ框架(三)-客户端实现,前面通过web的形式实现了mq的服务端和客户端,现在计划使用netty来改造一下.前段时间学习了一下netty的使用(https://www.w3cs ...
- 手写SpringMVC 框架
手写SpringMVC框架 细嗅蔷薇 心有猛虎 背景:Spring 想必大家都听说过,可能现在更多流行的是Spring Boot 和Spring Cloud 框架:但是SpringMVC 作为一款实现 ...
- 手写SpringMVC框架(三)-------具体方法的实现
续接前文 手写SpringMVC框架(二)结构开发设计 本节我们来开始具体方法的代码实现. doLoadConfig()方法的开发 思路:我们需要将contextConfigLocation路径读取过 ...
- 手写 jQuery 框架
1.测试页面; <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- 手写DAO框架(三)-数据库连接
-------前篇:手写DAO框架(二)-开发前的最后准备--------- 前言 上一篇主要是温习了一下基础知识,然后将整个项目按照模块进行了划分.因为是个人项目,一个人开发,本人采用了自底向上的开 ...
随机推荐
- base64文件隐写脚本
base64文件隐写脚本 base64 可以在文件中隐藏信息,记录一下提取脚本 ''' base64文件隐写脚本 import re import base64 b64chars = 'ABCDEFG ...
- 使用grok exporter 做为log 与prometheus 的桥
grok 是一个工具,可以用来解析非结构化的日志文件,可以使其结构化,同时方便查询,grok 被logstash 大量依赖 同时社区也提供了一个prometheus 的exporter 可以方便的进行 ...
- Macbook Pro A1398 換電池手札
前不久老MBP总是风扇狂转,cpu 100%,一直觉得有问题,就买了工具想着把機器拆開看一下. 結果,不拆不知道,一拆開發現機器變成下面醬紫了: 整個一炸藥包啊!此時我腦中只有一個念頭:得趕緊馬上立刻 ...
- Harbor基础
harbor: Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功 ...
- GEE windows 环境配置
参照GEE开发大神的一篇文章GEE学习笔记 三十五:windows下配置本地开发环境 - 无形的风的文章 - 知乎. 按他的顺序下来还是出了点问题,再整理一下自己遇到的问题. 1.安装Google的 ...
- Linux-Centos学习笔记
Linux目录结构: 只有1个目录,根目录 usr:相当于program files etc:存放系统配置文件 root:系统管理员默认目录 home:存放其他用户的目录 pwd: 打印当前目录 cd ...
- linux安装chrome及chromedriver(转)
1.chrome: curl https://intoli.com/install-google-chrome.sh | bash 1.1.centos安装chrome: 從 Google 下載最新版 ...
- config:fail,Error: 系统错误,错误码:63002,invalid signature [20191104 17:18:1
需要检查下后端有没有缓存到redis.这个很重要不然也会报这个错
- Python logging模块日志存储位置踩坑
问题描述 项目过程中写了一个小模块,设计到了日志存储的问题,结果发现了个小问题. 代码结构如下: db.py run.py 其中db.py是操作数据库抽象出来的一个类,run.py是业务逻辑代码.两个 ...
- 码云push时提示 DeployKey does not support push code fatal: Could not read from remote repository.
一.如果需要push代码到码云,需要创建个人公钥,公共公钥只可以读不可以修改 二.执行代码即可:git push