Spring 3, AbstractAnnotationConfigDispatcherServletInitializer, несколько сервлетов

В Servlet 2.5 можно было использовать несколько сервлетов, настроенных в файле web.xml, путем простого дублирования и редактирования следующих тегов xml.

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Можно ли как-то создать несколько сервлетов, используя Spring AbstractAnnotationConfigDispatcherServletInitializer с Servlet 3?

Я думал, что возврата 2 классов в методе getServletConfigClasses() и 2 путей в методе getServletMappings() будет достаточно, но это не работает так, как я ожидал.

Итак, есть ли (простой) способ настроить несколько сервлетов с помощью Spring 3 и Servlet 3?

Спасибо за ваши ответы!


person user2391602    schedule 16.05.2013    source источник


Ответы (1)


Вы можете сделать что-то вроде:

public class MyWebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) {

      XmlWebApplicationContext appContext = new XmlWebApplicationContext();
      appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");

     ServletRegistration.Dynamic dispatcher =
        container.addServlet("dispatcher", new DispatcherServlet(appContext));
      dispatcher.setLoadOnStartup(1);
      dispatcher.addMapping("/");

     ServletRegistration.Dynamic anotherServlet =
        container.addServlet("anotherServlet", "com.xxx.AnotherServlet");
      anotherServlet.setLoadOnStartup(2);
      anotherServlet.addMapping("/another/*");

     ServletRegistration.Dynamic yetAnotherServlet =
        container.addServlet("yetAnotherServlet", "com.xxx.YetAnotherServlet");
      yetAnotherServlet.setLoadOnStartup(3);
      yetAnotherServlet.addMapping("/yetanother/*");

    }

 }

Конечно, вы можете использовать любой из addServlet(). методы в соответствии с вашим удобством.

person 2020    schedule 17.05.2013
comment
Идеально! Я даже не знал класс ServletRegistration. Спасибо! - person user2391602; 19.05.2013