1. 程式人生 > >IDEA 中手寫 一個SpringMVC框架

IDEA 中手寫 一個SpringMVC框架

不說了直接上程式碼吧(裡面也有相應的說明)

程式碼地址 https://github.com/dongfucai/handerMVC

自己自己java 。如果有幫助,可以點贊,點星。

有問題可以提出,一起學習改正。

後面是設計思路

梳理SpringMVC的設計思路

       本文只實現自己的@Controller、@RequestMapping、@RequestParam註解起作用,其餘SpringMVC功能讀者可以嘗試自己實現。

       1、讀取配置

         

    從圖中可以看出,SpringMVC本質上是一個Servlet,這個 Servlet 繼承自 HttpServlet。FrameworkServlet負責初始化SpringMVC的容器,並將Spring容器設定為父容器。因為本文只是實現SpringMVC,對於Spring容器不做過多講解(有興趣同學可以看看我另一篇文章:

向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如下: