2012-09-02 59 views
5

好的春天的大師......爲我打破這一個。在閱讀關於Spring MVC中的文檔,我凸輪跨ê這一說法:Spring DispatcherServlet多個實例

」 ......在Spring中的ApplicationContext可以作用域在Web MVC框架中,每個DispatcherServlet有它自己的WebApplicationContext,它繼承所有。這些bean已經在根WebApplicationContext中定義了,這些定義的繼承bean可以在特定於servlet的範圍中重寫,並且新的特定於作用域的bean可以在給定的servlet實例的本地定義。

Spring Docs Reference

我必須在此基礎上幾個問題:

  1. 聲明意味着有可能的DispatcherServlet的多個實例。這完全不是真的,因爲在一個Web應用程序中,只有一個Servlet實例可以(並且理想情況下)存在?
  2. 「特定於servlet的範圍」在上述語句中意味着什麼?

回答

2

是不是完全不是真正的

這相當於「偶爾真的,」我不認爲這是你的意思。

在一個Web應用程序

,一個Servlet只有一個實例可以(也應該理想地)存在

這不是完全不正確的 - 只是大多不正確。您將部署描述符(web.xml)的<servlet>元素與實現該servlet的類相混淆。

的確,除了在某些有限的情況下,容器只允許實例化每個servlet的類的一個實例。但是,您可以有多個指定相同類的<servlet>條目。

究竟做「特定的servlet-範圍」指的是在上面的語句

作爲一個不是非常好的例子(事實上,我認爲有幾個很好的例子)的情況下:你可能有一個支持多個客戶端的應用程序,每個客戶端都有不同的URL和不同的數據庫,但在其他方面是相同的。您可以在根配置中定義業務對象,在web-app配置中定義數據源。以及任何客戶特定的配置bean。

+0

我糾正了我的錯誤,如上所述,'不',謝謝。無論如何,很好的解釋。我認爲這清除了很多。然而,我仍然在摸索爲什麼你想在一個Web應用程序中使用多個類似的servlet,只是爲了處理映射不同的請求。爲什麼不有不同的網絡應用程序,每個應用程序都有不同的上下文路徑前一種情況(一個Web應用程序中的多個類似的servlet處理不同的URL)是否會成爲嚴重頭痛的祕訣? – mainas