背景
Servlet和JSP是開發Java Web應用程序的兩種基本技術,Spring MVC是Spring框架中用於開發Web應用的一個模塊。相信大家也和我一樣,是從編寫Servelt和JSP開始,然後一步步向Spring MVC靠攏。那麼Spring MVC到底簡化了Servlet什麼地方,使Spring MVC成為Web應用開發的首選框架呢,本文將會就這個方面進行探討。
Servlet簡介
什麼是Servlet
Servlet是一種基於Java語言,用於創建Web應用程序。在Servlet之前,CGI(通用網關接口)腳本語言作為服務端編程語言很受歡迎,但是這門技術有很多的缺點:
CGI(通用網關接口)CGI即使可以讓服務器能夠調用外部程序,並將HTTP請求信息傳遞給外部程序處理,對於每一個請求,會啟動一個新的進程。
CGI技術的缺點
客戶端數量增加時,響應時間更多
每一個其請求,需要啟動一個新的進程,消耗大量的系統資源
使用平臺依賴語言,如:C、C++、Perl
Servlet
Servlet的優點
更好的性能:每個請求創建的是線程,而不是進程
可移植性:使用Java跨平臺語言
更強大:Servlet有JVM管理,不需要擔心內存洩露、溢出等
想學習這些技術的朋友可以加群:582505643。群裡會分享這些技術知識點供大家學習免費下載
Servlet的演化
Servlet的基本目錄
Servlet接口在最基本的Servlet類中,需要實現Servlet接口定義的init()、servic()、destroy()、getServletConfig()和geServletInfo()方法,其中業務邏輯在service中編寫,在service方法中最常用的是通過PrintWriter對象進行內容的輸出。
演進1:GenericServlet抽象類實現Servlet接口的時候必須將所有的方法實現,即使方法中沒有任何代碼。在GenericServlet抽象類的幫助下,只需要重寫service方法即可。
在tomcat/webapps目錄下創建上述目錄結構,所有HTML,靜態文件直接保存在應用程序目錄下,所有的Servlet類保存在web-inf/classe目錄或子目錄下,web.xml(部署描述符)文件保存在web-inf目錄下。
演進2:HttpServlet抽象類HttpServlet覆蓋了GenericServlet類,將ServletRequest和ServletResponse對象分別封裝為HttpServletRequest和HttpServletResponse對象。HttpServlet同時實現了service方法,在請求進來時,Web容器首先調用HttpServlet的service方法,並根據請求的類型調用doGet或doPost方法,搜易我們只需要覆蓋doGet()和goPost()方法即可。
演進3:JSP的加入
寫過Servlet的朋友應該知道,Servlet的最大缺點就是在Servlet類中編寫大量繁雜的HTML代碼,使得Java代碼與HTML代碼糅雜在一起,所以JSP應運而生。
JSP本質也是Servelt,然而其不需要編譯,JSP頁面是一個以.jsp擴展名的文本文件。簡單的JSP頁面在第一次請求後被翻譯為(JSP名)_jsp的servlet,翻譯之後的Servelt可以看到:_jspInit(),_jspDestory(),_jspService()這樣的方法其實都是和Servlet相對應的。
演進4:Spring橫空出世
Spring提供了強大的控制反轉(IOC)和依賴注入(DI)功能,達到項目組件的解耦。
演進5:Spring Web模塊 - Spring MVC
想學習這些技術的朋友可以加群:582505643。群裡會分享這些技術知識點供大家學習免費下載
學過Servlet的朋友應該知道,當要使用Servlet完成的複雜的功能時,需要編寫多個Servlet類,並且在web.xml進行註冊,這對於完成複雜的Web應用,代碼編寫會變得很複雜,開發成本也會很高。所以Spring提供了強大的Web開發框架Spring MVC。Spring MVC是Spring產品的一部分,享有Spring松耦合等所有優點。
Spring MVC是一個模型-視圖-控制器的Web框架,建立在前端控制器servlet(DispatcherServlet),它負責發送每個請求到合適的處理程序,使用視圖來返回響應結果。
Spring MVC的架構:
Spring web MVC框架提供了MVC(模型 - 視圖 - 控制器)架構和用於開發靈活和鬆散耦合的Web應用程序的組件。MVC模式導致應用程序的不同方面(輸入邏輯,業務邏輯和UI邏輯)分離,同時提供這些元素之間的鬆散耦合
模型(Model):封裝了應用程序的數據,通常由POJO類組成
視圖(View):負責渲染模型數據,一般來說它生成客戶端瀏覽器可以解釋HTML輸出
控制器(Controller):負責處理用戶請求並構建適當的模型,並將其傳遞給視圖進行渲染
DispatcherServlet組件類Spring MVC框架是圍繞DispatcherServlet設計的,它處理所有的請求和響應。Spring MVC DispatcherServlet的工作流程:
DispatcherServlet處理HTTP請求的工作流程:
接受HTTP請求後,DispatcherServlet
會查詢HandlerMapping以調用相應的Controller(根據請求的url)
Controller接受請求並根據請求的類型Get/Post調用相應的服務方法,服務方法進行相應的業務處理,並設置模型數據,最後將視圖名稱返回給DispatcherServlet
DispatcherServlet根據返回的視圖名稱從ViewResolver獲取對應的視圖
DispatcherServlet將模型數據傳遞到最終的視圖,並將視圖返回給瀏覽器。
總結
至此Servlet到Spring MVC的演化之路落下帷幕,只能感慨,技術的變更和迭代速度遠遠超乎我們的意料,我們只有不斷地學習,才能跟上時代的潮流。
閱讀更多 Java高級架構師 的文章