Servlet 到 Spring MVC 的簡化之路

背景

Servlet和JSP是開發Java Web應用程序的兩種基本技術,Spring MVC是Spring框架中用於開發Web應用的一個模塊。相信你們也和我同樣,是從編寫Servelt和JSP開始,而後一步步向Spring MVC靠攏。那麼Spring MVC到底簡化了Servlet什麼地方,使Spring MVC成爲Web應用開發的首選框架呢,本文將會就這個方面進行探討。html

Servlet簡介

什麼是Servlet

Servlet是一種基於Java語言,用於建立Web應用程序。在Servlet以前,CGI(通用網關接口)腳本語言做爲服務端編程語言很受歡迎,可是這門技術有不少的缺點:前端

  • CGI(通用網關接口) CGI即便可讓服務器可以調用外部程序,並將HTTP請求信息傳遞給外部程序處理,對於每個請求,會啓動一個新的進程。 web

  • CGI技術的缺點spring

  1. 客戶端數量增長時,響應時間更多
  2. 每個其請求,須要啓動一個新的進程,消耗大量的系統資源
  3. 使用平臺依賴語言,如:C、C++、Perl
  • Servlet 編程

  • Servlet的優勢瀏覽器

  1. 更好的性能:每一個請求建立的是線程,而不是進程
  2. 可移植性:使用Java跨平臺語言
  3. 更強大:Servlet有JVM管理,不須要擔憂內存泄露、溢出等

Servlet的演化

  • Servlet的基本目錄 tomcat

    在tomcat/webapps目錄下建立上述目錄結構,全部HTML,靜態文件直接保存在應用程序目錄下,全部的Servlet類保存在web-inf/classe目錄或子目錄下,web.xml(部署描述符)文件保存在web-inf目錄下。

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

  • 演進1:GenericServlet抽象類 實現Servlet接口的時候必須將全部的方法實現,即便方法中沒有任何代碼。在GenericServlet抽象類的幫助下,只須要重寫service方法便可。架構

  • 演進2:HttpServlet抽象類 HttpServlet覆蓋了GenericServlet類,將ServletRequest和ServletResponse對象分別封裝爲HttpServletRequest和HttpServletResponse對象。HttpServlet同時實現了service方法,在請求進來時,Web容器首先調用HttpServlet的service方法,並根據請求的類型調用doGet或doPost方法,搜易咱們只須要覆蓋doGet()和goPost()方法便可。mvc

演進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

學過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請求的工做流程

  1. 接受HTTP請求後,DispatcherServlet
  2. 會查詢HandlerMapping以調用相應的Controller(根據請求的url)
  3. Controller接受請求並根據請求的類型Get/Post調用相應的服務方法,服務方法進行相應的業務處理,並設置模型數據,最後將視圖名稱返回給DispatcherServlet
  4. DispatcherServlet根據返回的視圖名稱從ViewResolver獲取對應的視圖
  5. DispatcherServlet將模型數據傳遞到最終的視圖,並將視圖返回給瀏覽器。

總結

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

參考連接:參考1 參考2

相關文章
相關標籤/搜索