Servlet和JSP是開發Java Web應用程序的兩種基本技術,Spring MVC是Spring框架中用於開發Web應用的一個模塊。相信你們也和我同樣,是從編寫Servelt和JSP開始,而後一步步向Spring MVC靠攏。那麼Spring MVC到底簡化了Servlet什麼地方,使Spring MVC成爲Web應用開發的首選框架呢,本文將會就這個方面進行探討。html
Servlet是一種基於Java語言,用於建立Web應用程序。在Servlet以前,CGI(通用網關接口)腳本語言做爲服務端編程語言很受歡迎,可是這門技術有不少的缺點:前端
CGI(通用網關接口) CGI即便可讓服務器可以調用外部程序,並將HTTP請求信息傳遞給外部程序處理,對於每個請求,會啓動一個新的進程。 web
CGI技術的缺點spring
Servlet 編程
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
寫過Servlet的朋友應該知道,Servlet的最大缺點就是在Servlet類中編寫大量繁雜的HTML代碼,使得Java代碼與HTML代碼糅雜在一塊兒,因此JSP應運而生。
JSP本質也是Servelt,然而其不須要編譯,JSP頁面是一個以.jsp擴展名的文本文件。簡單的JSP頁面在第一次請求後被翻譯爲(JSP名)_jsp的servlet,翻譯以後的Servelt能夠看到:_jspInit(),_jspDestory(),_jspService()這樣的方法其實都是和Servlet相對應的。
Spring提供了強大的控制反轉(IOC)和依賴注入(DI)功能,達到項目組件的解耦。
學過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邏輯)分離,同時提供這些元素之間的鬆散耦合
DispatcherServlet組件類 Spring MVC框架是圍繞DispatcherServlet設計的,它處理全部的請求和響應。Spring MVC DispatcherServlet的工做流程:
DispatcherServlet處理HTTP請求的工做流程:
至此Servlet到Spring MVC的演化之路落下帷幕,只能感慨,技術的變動和迭代速度遠遠超乎咱們的意料,咱們只有不斷地學習,才能跟上時代的潮流。