【问题标题】: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> 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-08-20
            • 2012-08-27
            • 2016-05-05
            • 1970-01-01
            • 2019-06-25
            • 2018-02-23
            相关资源
            最近更新 更多