2010-07-07 27 views
1

可以在web.xml中有多個DispatcherServlet處理不同的URL嗎? 缺點是什麼?多個SpringDispatcherServlet處理不同的url

<servlet> 
    <servlet-name>servlet1</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

<servlet> 
    <servlet-name>servlet2</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 


<servlet-mapping> 
    <servlet-name>servlet1</servlet-name> 
    <url-pattern>/url2/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>servlet2</servlet-name> 
    <url-pattern>/url1/*</url-pattern> 
</servlet-mapping> 

回答

1

是的,這是絕對沒問題。根據應用程序的複雜性和架構,它實際上可能會變得非常有用。您可以使用它來構建調度程序級別的應用程序(而不是控制器)。或者當你想讓某些URL類具有不同的調度器配置(視圖解析器,區域設置解析器等)

1

是的,沒關係。唯一的缺點是每個servlet的應用程序上下文都不能相互交流,但這是一個非常有效的方法。

不過,我建議,一般只需要一個DispatcherServlet,然後處理所有的請求路由。這是錯誤的一件事。

2

你不一定需要同一個servlet的多個實例,除非你想給他們每個不同的init-param值。我寧願只分配不同的映射到同一個servlet像這樣:

<servlet> 
    <servlet-name>springDispatcherServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>springDispatcherServlet</servlet-name> 
    <url-pattern>/url1/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>springDispatcherServlet</servlet-name> 
    <url-pattern>/url2/*</url-pattern> 
</servlet-mapping> 

這也完全適用於你不知道的情況下。

0

當然取決於你的需求,但在大多數情況下最好有一個servlet。

所以,你可以配置簡化您:

<servlet> 
    <servlet-name>servlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>servlet</servlet-name> 
    <url-pattern>/url2/*</url-pattern> 
    <url-pattern>/url1/*</url-pattern> 
</servlet-mapping>