Spring MVC的DispatcherServlet – Java开发人员应该知道的10件事
如果您使用過Spring MVC,那么您應該知道什么是DispatcherServlet? 它實際上是Spring MVC的心臟,確切地說是MVC設計模式或控制器的C語言。 應該由Spring MVC處理的每個Web請求都通過DispatcherServlet處理。 通常,它是Front Controller Pattern的實現,可在您的應用程序中提供單個入口點。 它處理所有傳入的請求。 它也是Java與Spring和DispatcherServlet之間的橋梁,就像其他任何Servlet在web.xml中聲明的那樣,其URL模式足以將每個單個Web請求映射到DispathcherServlert。
它負責通過將請求委派給Spring MVC的其他組件(例如,實際的控制器類,即使用@Controller或@RestController (對于RESTful Web Services進行注釋),Views,View Resolvers,處理程序映射器等注釋的那些)來負責請求處理。
盡管實際請求映射的工作是通過@RequestMapping注釋完成的,但實際上是DispatcherServlet將請求委托給相應的控制器。
對于RESTful Web服務,它還負責查找正確的消息轉換器,以將響應轉換為客戶端期望的格式,例如JSON,XML或TEXT。 例如,如果客戶端需要JSON,則它將使用MappingJacksonHttpMessageConverter或MappingJackson2HttpMessageConverter(取決于Classpath中的Jackson 1或Jackson 2是否可用)將轉換返回的響應轉換為JSON字符串。 請參閱Baeldung的REST with Spring,以了解有關使用Spring 3和Spring 4開發RESTful Web服務的更多信息。
如前所述,Dispatcher Servlet用于處理所有傳入的請求,并將它們路由到不同的Spring Controller進行進一步處理。 為此,它確定哪些控制器應處理傳入的請求。
DispatcherServlet使用HandlerMapping實現(預先構建或作為應用程序的一部分提供)將傳入的請求路由到處理程序對象。 默認情況下,它使用
BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping,使用@RequestMapping注釋驅動。
為了找到正確的方法來處理請求,它將掃描使用聲明的所有類。
@Controller注釋,它也使用
@RequestMapping批注可查找負責處理請求的類型和方法。 @RequestMapping注釋可以按路徑映射請求,例如 @RequestMapping(“ path”),通過HTTP方法,例如 @RequestMapping(“ path”,method = RequestMethod.GET),通過請求參數,例如 @RequestMapping(“ path””,method = RequestMethod.POST,params =“ param1”)并通過HTTP請求標頭的存在例如
@RequestMapping(“路徑”,標頭=“ content-type = text / *”)。 您還可以在類級別應用@RequestMapping批注以過濾傳入的請求。
處理完請求后,控制器將邏輯視圖名稱和模型返回給DispatcherServlet。 然后,它咨詢視圖解析器以查找實際的View來呈現輸出。 可以使用ViewResolver實現來指定視圖解析策略,默認情況下,DispatcherServlet使用
InternalResourceViewResolver,用于將邏輯視圖名稱轉換為實際的View對象,例如JSP。
此后,DispatcherServlet與選定的視圖聯系,例如具有模型數據的JSP文件,并根據模型數據呈現輸出。 該渲染的輸出作為響應返回給客戶端。 有時甚至不需要視圖,例如在RESTful Web服務的情況下。
他們的處理程序方法使用@ResponseBody批注直接寫入響應,而DispatcherServlet直接將響應返回給客戶端。 請參閱REST with Spring課程,以了解有關使用Spring MVC開發和測試RESTful Web服務的更多信息。
在本文中,我將分享Java Web開發人員應該了解的有關DispatcherServlet的一些有用和必要的知識。 這些要點不僅可以幫助您更好地理解Spring MVC中DispatcherServlet的工作,還可以鼓勵您通過探索和研究每個點來學習更多有關它們的知識。
1)DispatcherServlet是Spring MVC Application的主控制器。 所有傳入的Web請求在通過各個Spring控制器(即使用@Controller注釋進行注釋的類)處理之前,都將通過DispatcherServlet傳遞。
2)Spring MVC的DispatcherServlet是前端控制器模式的實現(請參閱Spring MVC 4簡介 )。 前端控制器不過是處理網站所有請求的控制器。 它們通常在Web應用程序中用于實現工作流。
3)與其他任何Servlet一樣,Spring MVC框架的DispatcherServlet也在web.xml文件中聲明和配置,如下所示:
<web-app><servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet><servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>*</url-pattern> </servlet-mapping></web-app>4)DispatcherServlet是一個實際的Servlet,它繼承自HttpServlet基類。 像Tomcat這樣的Servlet引擎會創建此類的實例,并調用它的各種生命周期方法,例如init(),service()和destroy()。
5)DispatcherServlet為您的Spring MVC Web應用程序提供了一個入口點。 如前所述,它處理所有傳入的請求。 有關Spring內部工作的更多詳細信息,請參見Spring MVC在內部如何工作。
6)Spring的DispatcherServlet也與Spring IoC容器完全集成,因此可以使用Spring框架的所有功能,例如依賴注入。
7)調度程序servlet被配置為load-on-startup = 1,這意味著該Servlet應該在部署應用程序時由Servlet容器創建,而不是在請求到達此請求時創建。 這樣做是為了減少第一個請求的響應時間,因為DispatcherServlet在啟動時做了很多工作來掃描和查找所有控制器和請求映射。 請參閱Kevin Jones的Java Web基礎知識,以了解有關啟動時加載和其他servlet基礎的更多信息。
8)在DispatcherServlet初始化期間,Spring MVC框架將在Web應用程序的WEB-INF目錄中查找名為[servlet-name] -servlet.xml的文件,并在其中創建定義的bean,例如,如果servlet名稱為“ SpringMVC”如上面的web.xml配置所示,它將查找名為SpringMVC-Servlet.xml的文件。 它還覆蓋了在全局范圍內用相同名稱定義的任何bean的定義。 您可以使用contextConfigLocation servlet初始化參數來更改此配置文件的確切位置。
9)在Spring MVC框架中,每個DispatcherServlet都有自己的WebApplicationContext(請參見Spring in Action ),該繼承了在根WebApplicationContext中已經定義的所有bean。 這些繼承的bean可以在servlet特定的作用域中被覆蓋,并且可以在給定servlet實例的本地定義新的scope特定的bean。
10)Spring MVC框架的DispatcherServlet也可以返回Servlet API指定的last-modification-date。 它通過查找適當的處理程序映射來確定最后修改日期,并測試找到的處理程序是否實現了LastModified接口。 如果是,則調用LastModified接口的getLastModified(request)方法,并將值返回給客戶端。
這就是Spring MVC框架的DispatcherServlet的全部內容。 就像我說的那樣,DispatcherServlet是Spring MVC的主干,并充當將不同的HTTP請求路由到相應的Spring Controller的主控制器。 它是Front Controller設計模式的一種實現,并為Spring Web應用程序提供了一個入口。 您可以在web.xml中配置DispatcherServlet,但是將其分配為“啟動時加載”值1,以建議容器在啟動時而不是在請求出現時加載該Servlet。 這減少了第一個請求的響應時間。
進階學習
- Spring MVC 4簡介
- Baeldung的Spring REST
- Spring基本原理作者:布萊恩·哈森(Bryan Hassen)
您可能想探索的其他與Spring相關的文章
- Spring MVC中@RestControler和@Controller之間的區別? ( 回答 )
- 2至3年的23個Spring MVC面試問題經驗( 列表 )
- Spring MVC中DispatcherServlet的用途是什么? ( 回答 )
- 如何在Java應用程序中啟用Spring安全性? ( 回答 )
- Spring認證對工作和職業有幫助嗎? ( 文章 )
- 前五名Spring認證模擬考試( 列表 )
- Pluralsight的Spring基礎知識( 請參閱 )
- Spring中@Autowired和@Injection批注之間的區別? ( 回答 )
- 5個Java開發人員的Spring和Hibernate在線課程( 列表 )
感謝您到目前為止閱讀本文。 如果您喜歡這篇文章,請與您的朋友和同事分享。 如果您有任何疑問,建議或反饋,或者您對DispatcherServlert有任何要點,但這里沒有提及,但是值得您了解,請發表評論,我將其包含在主要文章中。
翻譯自: https://www.javacodegeeks.com/2017/09/dispatcherservlet-spring-mvc-10-things-java-developer-know.html
總結
以上是生活随笔為你收集整理的Spring MVC的DispatcherServlet – Java开发人员应该知道的10件事的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java ee cdi_Java EE
- 下一篇: java ee cdi_Java EE