當前位置:
首頁 > 知識 > 從零學習Spring MVC框架「環境搭建和MVC架構」

從零學習Spring MVC框架「環境搭建和MVC架構」

Web項目聚集地

圖文教程,技術交流

環境搭建

這是Spring MVC框架教程的第一篇,首先為大家講解MVC架構思想,MVC模式並不是Javaweb項目中獨有的,MVC是一種軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分:模型「Model」、視圖「View」和控制器「Controller」,即為MVC。

圖源見文末

我們直接拿例子來解釋,最典型的MVC就是Jsp+servlet+Javabean模式。比如登陸的案例,在視圖層即Jsp中有一個表單,用戶填寫用戶名和密碼,點擊提交。這時候會跳轉到控制層,控制層Servlet會接受到表單提交的用戶名和密碼。

注意:我們並不會在Servlet裡面進行業務邏輯和資料庫SQL編寫,這樣會顯得雜亂不堪。MVC架構的思想是,控制層接到用戶名和密碼送給Service層,在Service層中進行業務邏輯的編寫,比如判斷當前有沒有此用戶、密碼是否正確。

判斷密碼的正確性需要和資料庫進行交互,此時就需要另一個Dao層,Dao是專門和資料庫打交道,在Dao層中可以利用JDBCUtil進行SQL的編寫,並把查詢的結果返回給Service層。Service層有了Dao層的返回結果便可以進一步判斷密碼是否正確、用戶名存不存在,從而給控制層一個答覆。

控制層接到Service層的答覆後進行跳轉,比如:密碼錯誤時,返回Json值到視圖層,視圖層進行渲染展示給用戶,密碼正確就可以直接跳轉到主頁面。這樣分工明確才有利於項目的擴展和維護,我們學習的SSM框架便是很好的實踐:

對於我們學習的SSM框架中,Spring MVC便是充當控制層的角色,即可以近似理解為提到了上面登陸例子中的Servlet,Mybatis作為數據訪問層的解決方案,近似理解為登陸例子中JDBC,而Spring是橫跨三層的一種容器框架。

1.簡介

Spring的模型-視圖-控制器(MVC)框架是圍繞一個DispatcherServlet來設計的,這個Servlet非常重要,此Servlet會把請求分發給各個處理器,並支持可配置的處理器映射、視圖渲染、本地化、時區 與主題渲染等,甚至還能支持文件上傳。這個Servlet是框架的核心,暫時不理解沒關係。

處理器是你的應用中註解 了 @Controller 和 @RequestMapping 的類和方法,Spring為處理器方法提供了極其多樣靈活的 配置。Spring 3.0以後提供了 @Controller 註解機制、 @PathVariable 註解以及一些其他的特 性,也就是說你可以使用RESTful 風格的介面。

上方的簡介涉及的名稱和註解不理解沒關係,只需要有個大體的印象即可,我們會慢慢的為大家解釋清楚。

2.起步

學習Spring MVC框架,首先我們搭建一個環境出來,在搭建環境的過程中就會對此框架有個大體的了解,開始我們的環境搭建。

去官網下載相應的Jar包,解壓後這樣的:

Jar包就在libs此文件夾里,docs是相關文檔,schema是xml上方的約束。

libs下有我們需要的Jar包,它是class文件,docs是文檔,source是源碼java文件,準備好了Jar包我們就開始環境搭建。

3.案例截圖

4.導入Jar包

5.web.xml

在上方web.xml中,配置了一個用於調度控制的Servlet,在我們框架的學習過程中,DispatcherServlet是特別重要的,也是框架的核心。所有的請求驅動都圍繞這個控制器開分派請求,分別Servlet的配置進行解釋:

全限定類名

在中添加的作用是在web伺服器(tomcat)啟動時會不會創建這個Servlet實例,即是否在Web伺服器啟動時調用該Servlet的 init()方法,而不是真正訪問時才創建實例。

值大於等於0時,Web容器啟動時就載入並初始化此Servlet,數字越小,被創建的越早。

當值小於0或不指定時,Servlet在真正被使用時才被創建。

值相同時,容器自己選擇次序。

不要寫/*,否則所有的Jsp頁面會報404錯誤,我們使用的是/:表示包括靜態文件,css、js等一併攔截,這就需要對靜態文件進行處理,否則出現就會沒有樣式的情況,具體處理在後面文章給出。同樣還可以使用/*.do來攔截以.do結尾的請求,這也是開發中常用的。

mvc

在DispatcherServlet載入的時候需要一個Spring MVC 的配置文件,默認情況下,應用會去WEB-INF文件夾下查找對應的[name]-servlet.xml文件。對應我們的的xml配置就是是mvc-servlet.xml,也就是說mvc中參數名一定和Spring mvc的配置文件相同,如圖:

點擊放大圖片

並非一定要把Spring MVC的配置文件放在WEB-INF下面,你可以在Servlet的配置文件添加配置來指定配置文件路徑。

6.HelloWorldController.java

我們創建一個類HelloWorldController,在類的上方添加@Controller註解,表明此類的實例是一個控制器,我們請求會在Controller中匹配方法進行處理,@RequestMapping註解類型用來映射一個請求和請求的方法,@RequestMapping("/test01")此註解表明凡是請求/test01路徑都會被test01方法處理,即列印出Hello World。

在Spring MVC中,控制器Controller 負責處理由DispatcherServlet 分發的請求,它把用戶請求的數據經過業務處理層處理之後封裝成一個Model ,然後再把該Model 返回給對應的View 進行展示。

在SpringMVC 中提供了一個非常簡便的定義Controller 的方法,你無需繼承特定的類或實現特定的介面,只需使用@Controller 註解標記一個類是Controller ,然後使用@RequestMapping 和@RequestParam 等一些註解用以定義URL 請求和Controller 方法之間的映射,這樣的Controller 就能被外界訪問到。

7.mvc-servlet.xml

上面的xml就是Spring MVC的配置文件,這個文件用來編輯Spring MVC相關的配置,對配置的兩行進行講解:

這是一種簡寫形式,完全可以手動配置替代這種簡寫形式,此配置會自動註冊為RequestMappingHandlerMapping和RequestMappingHandlerAdapter兩個Bean,這是Spring MVC為@Controller分發請求所必須的。

在Controller中我們使用了@Controller和@RequestMapping註解,但是使用它們需要在Spring MVC的配置文件中添加配置用來啟動Spring MVC的註解。

在xml配置了這個標籤後,Spring可以自動去掃描base-pack下面或者子包下面的java文件,如果可以掃描到含有@Component @Controller@Service等這些註解的類,則把這些類註冊為bean。

這裡是自動掃描帶@Controller註解的類註冊為bean,沒有學習Spring可能對這個地方不理解,不過沒關係,我們會馬上推出Spring的教程,你先暫時理解為:配置了它後,就可以找到帶@Controller註解的類,我們就可以使用它了即可。

8.運行截圖

注意觀察,箭頭的指向,我們在瀏覽器中請求test01路徑,此時test01的請求會被Servlet攔截,然後去匹配Controller中哪個方法上方@RequestMapping註解的值和test01相同,便會執行相應的方法。

注意觀察,箭頭的指向,我們在瀏覽器中請求/web路徑,此時/web的請求會被Servlet攔截,然後去匹配Controller中哪個方法上方@RequestMapping註解的值和/web相同,便會執行相應的方法。

9.工作原理

如果看到這裡你能明白個大概就說明你已經入門了,接下來我會詳細的和你解釋一些剛剛的案例是怎麼樣的流程,以及Spring MVC的工作原理。

對於我們剛剛搭建的案例工作流程是這樣的:用戶發送請求至前端控制器DispatcherServlet。DispatcherServlet收到請求調用HandlerMapping處理器映射器。處理器映射器找到具體的處理器(可以根據xml配置、註解進行查找),生成處理器對象及處理器攔截器(如果有則生成,我們沒有使用)返回DispatcherServlet。

DispatcherServlet調用HandlerAdapter處理器適配器。HandlerAdapter經過適配調用具體的處理器(Controller,也叫後端控制器)。Controller執行方法在控制台列印"Hello World"等。

我們案例的視圖層可以簡單的理解為是控制台,但實際開發中並非這樣,我只是為了降低難度,不想第一篇文章涉及太多概念,讓讀者失去學習的興趣,而實際開發中Spring MVC的工作流程可以看下圖:


10.流程解釋

用戶發送請求至前端控制器DispatcherServlet。

DispatcherServlet收到請求調用HandlerMapping處理器映射器。

處理器映射器找到具體的處理器(可以根據xml配置、註解進行查找),生成處理器對象及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。

DispatcherServlet調用HandlerAdapter處理器適配器。

HandlerAdapter經過適配調用具體的處理器(Controller,也叫後端控制器)。

Controller執行方法在控制台列印"Hello World"等,我們測試學習使用的控制台,開發中執行完畢常常返回ModelAndView。

HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。

DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。

ViewReslover解析後返回具體View。

DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中)。

DispatcherServlet響應用戶。

上方是對比較完整的Spring MVC搭建的web項目工作原理的描述,我們剛開始的案例很多概念沒有涉及到,如ModelAndView、視圖解析器等,以後我們會逐漸完善項目,並且一一講解。

如果喜歡,點贊分享吧!

圖一:my.oschina.net/TaciturnKnightYQ/blog/539875?p=1

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Web項目聚集地 的精彩文章:

Linux知識點總結

TAG:Web項目聚集地 |