多个Spring DispatcherServlet来处理不同的url

时间:2010-07-07 09:38:02

标签: java spring servlets spring-mvc

在web.xml中有多个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>

4 个答案:

答案 0 :(得分: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>

对于你不知道的情况,这也是完全有效的。

答案 1 :(得分:1)

是的,没关系。唯一的缺点是每个servlet的应用程序上下文将无法相互通信,但这是一种非常有效的方法。

我建议,通常最好只拥有一个DispatcherServlet,并处理其中的所有请求路由。错误就少了一点。

答案 2 :(得分:1)

是的,绝对没问题。根据应用程序的复杂性和架构,它实际上可能变得非常有用。您可以使用它在调度程序级别(而不是在控制器上)构建应用程序。或者当您希望某些URL类具有不同的调度程序配置(视图解析器,区域设置解析器等)时

答案 3 :(得分: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>