IDEA 中手寫 一個SpringMVC框架
不說了直接上程式碼吧(裡面也有相應的說明)
程式碼地址 https://github.com/dongfucai/handerMVC
自己自己java 。如果有幫助,可以點贊,點星。
有問題可以提出,一起學習改正。
後面是設計思路梳理SpringMVC的設計思路
本文只實現自己的@Controller、@RequestMapping、@RequestParam註解起作用,其餘SpringMVC功能讀者可以嘗試自己實現。
1、讀取配置
從圖中可以看出,SpringMVC本質上是一個Servlet,這個 Servlet 繼承自 HttpServlet。FrameworkServlet負責初始化SpringMVC的容器,並將Spring容器設定為父容器。因為本文只是實現SpringMVC,對於Spring容器不做過多講解(有興趣同學可以看看我另一篇文章:
為了讀取web.xml中的配置,我們用到ServletConfig這個類,它代表當前Servlet在web.xml中的配置資訊。通過web.xml中載入我們自己寫的MyDispatcherServlet和讀取配置檔案。
2、初始化階段
在前面我們提到DispatcherServlet的initStrategies方法會初始化9大元件,但是這裡將實現一些SpringMVC的最基本的元件而不是全部,按順序包括:
- 載入配置檔案
- 掃描使用者配置包下面所有的類
- 拿到掃描到的類,通過反射機制,例項化。並且放到ioc容器中(Map的鍵值對 beanName-bean) beanName預設是首字母小寫
- 初始化HandlerMapping,這裡其實就是把url和method對應起來放在一個k-v的Map中,在執行階段取出
3、執行階段
每一次請求將會呼叫doGet或doPost方法,所以統一執行階段都放在doDispatch方法裡處理,它會根據url請求去HandlerMapping中匹配到對應的Method,然後利用反射機制呼叫Controller中的url對應的方法,並得到結果返回。按順序包括以下功能:
- 異常的攔截
- 獲取請求傳入的引數並處理引數
- 通過初始化好的handlerMapping中拿出url對應的方法名,反射呼叫
web.xml 配置如下
pom.xml
目錄物件
不說了直接上程式碼吧(裡面也有相應的說明)
程式碼地址 https://github.com/dongfucai/handerMVC
自己自己java 。如果有幫助,可以點贊,點星。
有問題可以提出,一起學習改正。
訪問http://localhost:8080/liughMVC/test/doTest?param=dongfucai如下: