背景
前段時間把之前寫的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)分發請求
附腦圖: