Избегайте автоматического сопоставления сервлетов для сервлета, созданного как @Bean в Spring Boot - PullRequest
1 голос
/ 31 мая 2019

У меня есть сервлет, для которого мне нужно предоставить зависимости через автопроводку (это класс из внешней библиотеки, я не могу изменить его код). Я пытаюсь зарегистрировать его как компонент, а затем зарегистрировать, используя программную регистрацию (ServletContextInitializer). Вот что у меня есть:

@Configuration
public class MyConfiguration {
    @Bean
    public MyServlet myServlet() {
        return new MyServlet();
    }
}

Кроме того, автоконфигурация, связанная с SpringMVC, создает обычный DispatcherServlet и отображает его на /.

Когда я пытаюсь запустить приложение, я получаю следующее:

Причина: java.lang.IllegalStateException: множественные сервлеты отображаются на путь /: dispatcherServlet [сопоставлено: JAVAX_API: null], myServlet [сопоставлено: JAVAX_API: null]

Таким образом, похоже, что Spring Boot (или сам Spring?) Автоматически отображает сервлет по умолчанию /. Я бы вообще хотел избежать отображения, так как мне просто нужно создать экземпляр сервлета; Я зарегистрирую это сам позже.

Можно ли это сделать?

1 Ответ

1 голос
/ 31 мая 2019

вы должны использовать ServletRegistrationBean, тогда вы можете предоставить дополнительное отображение

@Bean
public MyServlet myServlet() {
    return new MyServlet();
}

@Bean
public ServletRegistrationBean myServletRegistration(MyServlet myServlet) {
    ServletRegistrationBean registration = new ServletRegistrationBean(myServlet,
            "/myservlet/*");
    registration.setLoadOnStartup(1);
    return registration;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...