【框架】126:springMVC框架初體驗

今天是劉小愛自學Java的第126天。

感謝你的觀看,謝謝你。

image

Java應用現在基本都是web應用,而Web層自然就是web應用中非常重要的部分了。

如果說我們前面學的mybatis對應著Dao層,spring對應著Service層。

那springMVC就對應著Web層,它是spring框架為Web層提供的一個Web框架。

我們以前是直接在Web層中創建servlet,使用框架比其更加地強大,本質上差不多。

學習內容安排如下:

  • Web層的MVC設計理念。

  • springMVC架構流程圖。

  • springMVC入門程序的編寫,同時再結合代碼畫下其運行流程圖。

  • 今天主要是學習其運行流程,代碼后續能進一步優化,明天接著學。

一、springMVC概述

springMVC重點是后面的MVC,MVC是web層的設計理念,更重點就是MVC中的C:

image

①控制器(Controller)

當用戶發來請求時,控制器調用②來處理,再選擇對應的視圖展示給用戶看,也就是③

它能起到總調度的作用,控制器通常由框架實現,使用時基本不需要編寫代碼。

②模型(Model)

通常分為數據模型和業務模型:

數據模型用來存放業務數據。簡單的理解就是我在Java中用什么來存數據?是用某個對象、用Map集合、還是字符串就可以?

業務模型包含應用的業務操作。比如用戶的登錄、注冊……等各種業務,通常由Java開發人員編寫完成,代碼量最多。

③視圖(View)

視圖根據處理后的數據,用自己的方式展現對應頁面給用戶,通常由前端和Java開發人員共同完成,代碼量較多。

springMVC架構

springMVC進一步細分了MVC,先做個大致了解,文章后面有詳細的代碼+畫圖說明:

image

①發送請求到DispatcherServlet控制器

②控制器根據請求路徑到映射器查詢具體的Handler處理器

映射器根據用戶請求查找與之對應的處理器執行鏈再回傳給控制器。

④控制器根據映射器返回的結果調用HandlerAdapter適配器

⑤適配器調用具體的處理器處理業務并返回ModelAndView到控制器。

⑥控制器將ModelAndView傳遞到ViewResolver視圖解析器

視圖解析器返回具體的視圖到控制器。

⑧控制器渲染視圖后響應給用戶。

二、springMVC程序編寫

直接在父工程上創建一個子工程,因為我們Web項目,所以設置打包方式為war,再配置web.xml文件,項目最終結構圖如下:

image

具體創建步驟以前講過幾次了,不再贅述。

1配置控制器

在web.xml配置文件中配置:

image

這個就是servlet的xml配置。

以前是自己寫一個servlet,然后填入其全限定名,現在直接使用springMVC中的即可。

其中*.do表示接受以.do結尾的請求路徑。

這個.do是一個約定俗成的規范,就好比我們創建service層的類都是xxxService一樣。

2配置映射器和適配器

springmvc框架默認讀取/WEB-INF/{servlet-name}-servlet.xml這個配置文件。

因為我們在web.xml中的servlet-name配置的是springMVC,所以在WEB-INF目錄下創建springMVC-servlet.xml文件。

和創建spring核心配置文件的方式一樣,只不過文件所在目錄不一樣:

image

①配置映射器

BeanNameUrlHandlerMapping,映射器的一個子類,交給spring容器管理。

我們看這個類的名字就可以理解其作用:根據請求url找到對應的Handler。

②配置適配器

SimpleControllerHandlerAdapter,適配器的一個子類,交給spring容器管理。

③配置處理器

需要我們自己創建一個對應的類,就相當于我們以前創建的servlet,name值對應請求路徑。

④配置視圖解析器

InternalResourceViewResolver,視圖解析器的一個子類,交給spring容器管理:

  • prefix:前綴名,指定視圖的位置。

  • suffix:后綴名,這里是jsp文件。

3處理器代碼和視圖頁面編寫

在Java中創建一個類HelloController,名稱一般都是控制器作為后綴,但它其實是一個處理器,其實現了控制器接口。

image

①ModelAndView

數據模型和視圖模型:

  • 這里的數據模型就是一個鍵值對:msg就是key,后面的為value。

  • 這里的視圖是hello.jsp文件,為了規范該文件是放在WEB-INF/view目錄下的。

view目錄就是專門用來存放各種視圖文件的,總之要和視圖解析器中配置的前綴一致。

②設置視圖名稱

通過setViewName()方法設定視圖名。

③設置視圖內容

通過setaddObject()方法指定視圖的內容,也就是數據模型,設置好后將視圖和模型返回。

在Java代碼中本身是無法直接對jsp文件進行修改的,我們只能設置一個鍵值對,然后在jsp文件中通過el表達式動態獲取。

上述jsp中的${msg}就是獲取msg對應的值,在Java中將msg的值修改,jsp也就變化了。

三、springMVC流程解析

做個測試,同時再梳理一遍其運行流程:

image

1控制器說明

通過流程圖我們其實可以發現,控制器就是起到一個調度的作用:

很多事情都要問它怎么做,但它自己不做都是交給映射器、適配器、視圖解析器做。

所以控制器叫DispatcherServlet,其中的Dispatcher本身也就是調度的意思。

2映射器說明

HandlerMapping,看它的名字就知道是來找處理器(Handler)的,那怎么找到呢?

BeanNameUrlHandlerMapping,看名字就是根據請求url的路徑找對應的控制器。

3適配器說明

映射器只是找到了處理器,而這個處理器怎么用,還需要適配器去調用才行。

4處理器說明

處理器有一個name或者id屬性來表明自己的身份,不然映射器怎么找到你?

同時對應Java中的一個處理器類,要處理具體的業務,返回ModelAndView,也就是視圖和數據模型。

5視圖解析器

根據視圖名,加上前綴和后綴,找到對應路徑下的視圖文件,例子中就是hello.jsp

最后

代碼可以簡化,明天繼續學習。

謝謝你的觀看。

如果可以的話,麻煩幫忙點個贊,謝謝你。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。