手寫Servlet 到 Spring MVC 的簡化之路

背景

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技術的缺點

手寫Servlet 到 Spring MVC 的簡化之路

  1. 客戶端數量增加時,響應時間更多

  2. 每一個其請求,需要啟動一個新的進程,消耗大量的系統資源

  3. 使用平臺依賴語言,如:C、C++、Perl

  • Servlet

  • Servlet的優點

手寫Servlet 到 Spring MVC 的簡化之路

  1. 更好的性能:每個請求創建的是線程,而不是進程

  2. 可移植性:使用Java跨平臺語言

  3. 更強大:Servlet有JVM管理,不需要擔心內存洩露、溢出等

  4. 想學習這些技術的朋友可以加群:582505643。群裡會分享這些技術知識點供大家學習免費下載

Servlet的演化

  • Servlet的基本目錄

  • Servlet接口在最基本的Servlet類中,需要實現Servlet接口定義的init()、servic()、destroy()、getServletConfig()和geServletInfo()方法,其中業務邏輯在service中編寫,在service方法中最常用的是通過PrintWriter對象進行內容的輸出。

手寫Servlet 到 Spring MVC 的簡化之路

  • 演進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的架構:

手寫Servlet 到 Spring MVC 的簡化之路

Spring web MVC框架提供了MVC(模型 - 視圖 - 控制器)架構和用於開發靈活和鬆散耦合的Web應用程序的組件。MVC模式導致應用程序的不同方面(輸入邏輯,業務邏輯和UI邏輯)分離,同時提供這些元素之間的鬆散耦合

  • 模型(Model):封裝了應用程序的數據,通常由POJO類組成

  • 視圖(View):負責渲染模型數據,一般來說它生成客戶端瀏覽器可以解釋HTML輸出

  • 控制器(Controller):負責處理用戶請求並構建適當的模型,並將其傳遞給視圖進行渲染

DispatcherServlet組件類Spring MVC框架是圍繞DispatcherServlet設計的,它處理所有的請求和響應。Spring MVC DispatcherServlet的工作流程:

手寫Servlet 到 Spring MVC 的簡化之路

DispatcherServlet處理HTTP請求的工作流程

  1. 接受HTTP請求後,DispatcherServlet

  2. 會查詢HandlerMapping以調用相應的Controller(根據請求的url)

  3. Controller接受請求並根據請求的類型Get/Post調用相應的服務方法,服務方法進行相應的業務處理,並設置模型數據,最後將視圖名稱返回給DispatcherServlet

  4. DispatcherServlet根據返回的視圖名稱從ViewResolver獲取對應的視圖

  5. DispatcherServlet將模型數據傳遞到最終的視圖,並將視圖返回給瀏覽器。

總結

至此Servlet到Spring MVC的演化之路落下帷幕,只能感慨,技術的變更和迭代速度遠遠超乎我們的意料,我們只有不斷地學習,才能跟上時代的潮流。


分享到:


相關文章: