SpringWeb是個什么東西?SpringWeb是一個Java開發Web項目時的Web層框架。所謂Web層,就是直接和用戶打交道的框架,用戶(User)也就是顧客,顧客就是上帝,我們說是Web項目,通常也就是說B/S架構的項目,User通常也就是電腦或者手機中的瀏覽器之類的軟件,或者說瀏覽器是真實用戶、或者說上帝的化身吧。
上帝很厲害,用戶的要求,通常都得滿足。所以,SpringWeb在整個框架的架構中,就弄了一個東西,來專門負責和上帝打交道,這個東西就叫DispatcherServlet,通常我們稱這個東西叫前端控制器。
DispatcherServlet:前端控制器
為什么叫控制器呢?因為負責整體的,用戶或者上帝提出要求,接收請求的是它,對用戶或上帝最終進行響應的,也是它。上帝很厲害,和上帝打交道的,必然也是厲害的角色,也就是它的權力或者說作用很大,或者說地位很高吧。
具體怎么講呢?具體我們可以從SpringWeb的這個前端控制器的名稱,也就是DispatcherServlet這個名稱上可以看出來,DispatcherServlet的本質主要有兩個,一個是它是基于Servlet實現的,另一個是它充當的具體身份或者角色,是一個Dispatcher,也就是調度員的角色,而所謂調度員,我們可以從企業經營或工廠生產的角度來理解,Dispatcher(調度員)通常相當于是公司領導或工廠領導的實際化身,是一種權力的象征,具體就是負責各種任務分配或生產調度的,是不是很厲害呀,人家是專門派任務的。
我們都知道,領導通常是不干實事的,Dispatcher這個東西,通常也是不干實事的,它就是派單、派任務的,具體的事實都是由別人來做,它只要結果,從某種意義上講,它就是領導,就是上帝的化身。所以,Dispatcher也類似一個有錢人、一個富豪,什么事情都不自己干,都外包,它出錢,要干的事情出錢外包掉,他只要結果,當然,在這里DispatcherServlet,不是富豪,我們把它看成是一個權力的代表者,它不需要出錢,它只需要動用權力就可以了,而這個權力來自SpringWeb框架設計給它的定位。
現在,我們以一個具體的場景或需求來說一下DispatcherServlet這個Dispatcher,它是如何將任務外包出去的,是如何分派各種任務的,并是終接收各種結果,最終對用戶(通常也就是瀏覽器)進行響應的。
上帝說,我缺個老婆,SpringWeb,你給我一個老婆吧。服務器這端的SpringWeb,就會找到DispatcherServlet來負責整件事情,DispatcherServlet作為領導或者說調度員,對于上帝提出的這種無理的要求(上帝怎么會缺老婆呢),但它必須滿足,滿足上帝的要求,但DispatcherServlet好歹也是一領導或領導的化身調度員,對不對?DispatcherServlet不可能去手搓一個花姑娘給上帝,他不可能親自干這種體力活,對不對?那么辦呢?
對于上帝的老婆,DispatcherServlet自己不會弄,他就得找手下弄,找專門生產花姑娘的工廠去生產,可是這么大一個領導(可能是集團公司哦),到底公司下面哪一個分公司或哪家工廠能干這件事情呢?DispatcherServlet并不清楚,于是DispatcherServlet會找來他的秘書,說秘書啊,我現在頭疼,上帝要一老婆, 我現在好難呀,我們整個集團公司,哪個子公司或者下面哪個工廠能造一個機器人老婆給上帝啊,然后秘書就會告訴他找誰誰誰,這個DispatcherServlet的秘書,在整個SpringWeb架構中,就叫處理器映射器(HandlerMapping),而那個具體生產機器人老婆的工廠,就叫處理器(Handler),所以,DispatcherServlet聽秘書(處理器映射器,HandlerMapping),一噸聒噪后,大體就知道找誰或哪個下面的子公司或工廠做老婆型機器人了,但通常,DispatcherServlet在聯系下面做事情的時候,電話會先打到下面公司的管理層或生產部,最終具體是哪個工廠或車間去生產機器人,DispatcherServlet是不會管的,這個下面公司或子公司的管理層或生產部,在SpringWeb的整個架構中就叫處理器適配器(HandlerAdapter),而真正實質上執行老婆型機器人生產的工廠或車間,在SpringWeb中就是前面所說處理器(Handler)。
當工廠車間——也就是處理器(Handler),真正把機器人生產出來之后,其實是由生產部或車間的公司上層,也就是處理器適配器負責反饋給DispatcherServlet的,DispatcherServlet拿到老婆型機器人之后,一看,我靠,這機器人功能不錯呀(想想能做老婆的機器人,功能自然很強大吧),但再一細思,這不對呀,這不行呀,這機器人就是幾條棍棍加在一起呀,實在自己看著都難受,上帝會要這么個玩意當老婆?上帝應當是要一個花姑娘吧?所以,新的任務產生了,那就是把老婆型機器人再給包裝包裝、打扮打扮,最后發貨回應給上帝后,自己才能睡個安穩覺吧,是于他又把這個任務,派給了自己下面的包裝公司,這個包裝公司,在SpringWeb架構中,就叫視圖解析器(View Resolver)。
總之,SpringWeb相當于是一個星型結構的架構形式,類似于中央集權吧,權力中心的那個角色,就是DispatcherServlet,它被稱為前端控制器,所以,它是個領導,是務虛的,人家專家負責給下面的人或子公司、機構分配或分派任務的,下面的人或機構,才是干實事的,就以上帝要老婆這個案例來說,其實最終真正干實事、負責核心業務的處理器(Handler),這個處理器(Handler)在實際的編程實踐中,通常被命名為Controller,也就是控制器,所以,這個處理器(Handler)通常被稱為SpringWeb的后端控制器。
當然,故事并沒有就此結束,后來上帝說,這個機器人老婆不錯,不過你們包裝來包裝去,就是給機器人披上幾件漂亮的衣服而已,這件事情你們不用做了,你們給我個老婆型裸機器人就行,你們以為上帝的老婆還會缺幾件漂亮的衣服不成?所以,后來就有了前后端徹底分離這么件事,SpringWeb基本也就不再干視圖解析、數據渲染——給機器人化妝穿衣服這種事情了,因為上帝不需要了。