手寫MVC框架(一)-再出發

背景

前段時間把以前寫的DAO框架(手寫DAO框架(一)-從「1」開始)整理了一下,重構了一版。整理過程當中看之前寫的代碼,只是爲了瞭解實現,只是爲了實現,代碼寫的有點粗糙。既然已經整理了DAO框架,索性繼續整理一下MVC框架(https://github.com/shuimutong/zxmvc.git),所謂溫故知新也。html

1、關於Servlet

一、簡介

學習web的時候,通常都是先學Servletgit

經過Servlet能夠接受到http請求,並進行響應github

這個時候,是不須要struts、SpringMVC等框架的web

二、tomcat、jetty

web應用服務器瀏覽器

servlet容器tomcat

servlet須要運行在容器裏服務器

三、servlet生命週期

1)服務啓動時加載servletmvc

2)第一次請求時app

2.1)實例化servlet框架

2.2)執行init方法

3)調用service方法,判斷請求的類型

3.1)get類型則調用doGet方法

3.2)post類型則調用doPost方法

4)服務重啓或者關閉時,調用destroy方法

2、MVC框架

Model(模型)

應用程序中用於處理應用程序數據邏輯的部分

View(視圖)

應用程序中處理數據顯示的部分

Controller(控制器)

應用程序中處理用戶交互的部分

3、SpringMVC

一、概述

Controller接收請求,而後返回ModelAndView

二、請求處理流程

1)SpringMVC將全部的請求提交給DispatcherServlet,它會委託應用系統的其餘模塊負責對請求進行真正的處理

2)DispatcherServlet查詢HandleMapping,找處處理請求的Controller

3)DispatcherServlet將請求提交到目標Controller

4)Controller進行業務邏輯處理後,返回一個ModelAndView

5)DispatcherServlet查詢ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象

6)將頁面渲染到瀏覽器端

三、思考

1)關於視圖解析器

以前的頁面常常用到freeMarker、jsp等,須要通過視圖解析器解析成Html

我的以爲上面兩種方式,還不如直接html,經過js刷頁面來的直觀

本身寫MVC框架,能夠先實現MC,V暫時用html

2)主要功能

封裝了servlet

IOC:實例管理

AOP:動態代理、cglib

4、實現思路

一、如何接收請求,分發請求

相似DispatcherServlet

服務初始時掃描全部URI,並放入一個URIMAP中

定義一個Servlet來接收全部請求

根據請求URL匹配URIMAP中對應的Controller

將請求分發給對應的Controller

二、IOC如何實現

註解形式

定義須要的註解

服務啓動時,掃描註解的類

將註解的類根據依賴(經過反射)進行實例化

三、AOP

暫緩實現

5、實現概述

一、實現註解

1)各層註解

Controller、Service、Repository、Component

2)自動注入註解

Autowired

3)URI註解

RequestMapping

二、掃描註解類

掃描填寫的URI

三、實現DispatcherServlet

1)接收請求

2)分發請求

 

附腦圖:

 

下篇:手寫MVC框架(二)-代碼實現和使用示例

相關文章
相關標籤/搜索