手寫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框架(二)-代碼實現和使用示例


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM