最近因為在上javaEE的課程一直在學習Spring,在網上找了很多資料,發現大多數都是通過web.xml配置的spring,而通過javaConfig配置的比較少,本人自己嘗試了兩種配置方法。
開發環境Eclipse+Maven+Tomcat
-----------------------------------------------------------
首先我們要清楚Spring整個工作過程--->
盜用Spring in Action里的這張圖片,我們可以看到整個流程:(如果想全面了解可以去查看書籍,這里說一下個人理解,錯了還請見怪)
1、網頁瀏覽器Brower發送Request,服務器需要有個servlet的調度器(DispatcherServlet)----這個就是用來接受客戶端的請求,可以理解成攔截器
2、這是一個處理器映射(好像很復雜)----其實就是能把客戶的請求調度到對應的Controller
3、那么Controller是要做什么事情呢?----Controller顧名思義為控制層,就是說你在Brower里傳遞的相關參數要經過他的手里,然后他根據Brower的請求去尋找對應的jsp,把從Brower得到的參數去傳遞給jsp。
4、所以Controller就返回Model和View的名字給servlet的調度器,DispatcherServlet就知道了,“原來Brower需要的是A這個網頁”。(我猜測這時應該是一個raw的)
5、這時候知道了是哪個頁面,接下來我們要對網頁A進行渲染,渲染什么內容?----就是我們需要告訴這個頁面你這邊需要填寫什么內容,而這些內容就是我們在Controller返回的,也就是我們需要組裝這個網頁。
6、可以了,我們得到了我們需要的網頁View
7、將其返回給Response to Brower
PS:可能會問,為什么需要Controller這個東西呢?直接都放在DispatcherServlet里面不就好了嗎?簡單而又實用。
Answer:這你就錯了,MVC是很有道理的一個結構,仔細想想,為什么需要C(Controller)層呢?很關鍵的一點是我們能把網頁實現的業務邏輯單獨抽取出來操作,就比如你要訪問數據庫,你要進行第三方數據導入,OK的這些都是Controller去處理,我的View層和Model層對這些一無所知,這就是一個很棒的分工。我是View層,我只需要知道你Controller層會給我數據,我去顯示在指定的位置就OK了,我不需要關心你這個數據是搶的,還是偷的。這樣多好。Controller層告訴Model層我需要哪些哪些數據,Model層只需要去拿到指定數據提供給Controller層就可以。多簡單的,多明了,各司其職。
-----------------------------------------------------------
(1)Web.xml ==HelloSpring
首先新建一個Maven工程,使用Maven導入spring所需要的jar包,具體就自己網上找一下都有的。然后因為spring工程是默認的讀取工程內的Web.xml進行一系列配置,所以我們需要對web.xml進行編寫。那么為什么要對這個Web.xml進行編寫呢?寫這個xml是為了干什么?
1、現在我們對照着上面這個流程來,web.xml就是要對DispatcherServlet進行定義,說明我使用的是什么樣的Servlet的容器,怎么使用它的。
2、接下來我們需要去攔截客戶的請求,所以我們需要一個攔截器,其實是需要另一個xml來實現。(在我的工程里我命名為springContext.xml)
3、那么現在我們需要去定義Controller了,ok的,我定義了HelloSpringController.java
4-6、最為簡單的渲染就是你寫的HTML網頁代碼。在我的工程中我默認為index.html還有一個home.html
7、發送給網頁,顯示內容。
至此一個簡單的web.xml的SpringMVC就ok了,配置完Tomcat就可以運行了。
(2)JavaConfig ==other-spring
同樣新建一個Maven工程,(這里不得不啰嗦一下,Maven真是一個太棒的工具!),這里值得一說的是,使用Config配置的時候,可能Eclipse或者Tomcat的會有很多奇怪的錯誤,我也經歷了好多,因為舊版本都是用的xml,所以對Config的兼容有點不好,但請務必務必堅信使用Config是可以完成SpringMVC的配置的,而且個人感覺還比web.xml好理解。
1、同樣的我們需要一個DispatcherServlet,在這里我們需要定一個類WebInitializer.java去繼承一個類AbstractAnnotationConfigDispatcherServletInitializer(名字超長-.-)網上有其他說web什么的一個類,也是可以的,他們就只是繼承的一些父子代的關系而已,並不影響。
2、然后這個WebInitializer需要我們去實現繼承來的類getServletConfigClasses和其他的什么,其實道理都一樣,就是說我們現在需要配置他所需要的Servlet的屬性。
3、現在我們就可以去定義我們需要的Controller了。----在我的工程中是HelloController.java這個類
4-7、同樣的也是HTML代碼,然后發送到Brower
OK,這樣就完成了。
其實Config想做的就是代替工程中的xml的工作,每次Tomcat啟動的時候會去找到繼承了AbstractAnnotationConfigDispatcherServletInitializer相關類進行初始化,就像去找web.xml一樣,然后我們在WebInitializer.java指定我們的相關配置(在我的工程中是Web.config和Root.config),然后我們定義Controller進行業務操作,編寫網頁HTML代碼,返回給瀏覽器。
------------------
結束了,接下來要進行volecity和tiles的集成,這個是關於渲染器那方面的。祝我好運!
GitHub地址:https://github.com/monster5475/2017.4.9