Несколько SpringDispatcherServlet для обработки разных URL - PullRequest
1 голос
/ 07 июля 2010

Можно ли иметь более одного DispatcherServlet в web.xml для обработки другого 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 ]

2 голосов
/ 07 июля 2010

Вам не обязательно использовать несколько экземпляров одного и того же сервлета, если только вы не хотите давать им разные значения init-param.Я бы предпочел просто назначить разные сопоставления для одного и того же сервлета следующим образом:

<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 голос
/ 07 июля 2010

Да, это абсолютно нормально. В зависимости от сложности приложения и архитектуры оно может стать очень полезным. Вы можете использовать его для структурирования приложения на уровне диспетчера (а не на контроллерах). Или если вы хотите, чтобы определенные классы URL имели различную конфигурацию диспетчера (просмотр распознавателей, преобразователи локали и т. Д.)

1 голос
/ 07 июля 2010

Да, все в порядке. Единственным недостатком является то, что контексты приложения для каждого из сервлетов не смогут взаимодействовать друг с другом, но это совершенно правильный подход.

Я хотел бы предложить, однако, что обычно лучше иметь только один DispatcherServlet и обрабатывать все запросы маршрутизации в этом. Это еще одна вещь, чтобы пойти не так.

0 голосов
/ 26 октября 2015

Конечно, зависит от ваших потребностей, но в большинстве случаев лучше иметь один сервлет.

Таким образом, вы можете упростить настройку до:

<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> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...