【问题标题】:Multiple SpringDispatcherServlet to handle different url多个 Spring DispatcherServlet 处理不同的 url
【发布时间】:2010-07-07 09:38:02
【问题描述】:
是否可以在 web.xml 中有超过 1 个 DispatcherServlet 来处理不同的 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>
【问题讨论】:
标签:
java
spring
servlets
spring-mvc
【解决方案1】:
您不一定需要同一个 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>
这对于你不知道的情况也完全有效。
【解决方案2】:
是的,绝对没问题。根据应用程序的复杂性和架构,它实际上可能会变得非常有用。您可以使用它在调度程序级别(而不是控制器)构建应用程序。或者当您希望某些 URL 类具有不同的调度程序配置(视图解析器、区域设置解析器等)时
【解决方案3】:
是的,没关系。唯一的缺点是每个 servlet 的应用程序上下文无法相互通信,但这是一种完全有效的方法。
不过,我建议最好只拥有一个DispatcherServlet,并在其中处理所有请求路由。出错少了一件。
【解决方案4】:
当然取决于您的需要,但在大多数情况下最好有一个 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>