Как я могу зарегистрировать вторичный сервлет с Spring Boot?
У меня есть дополнительный сервлет, который мне нужно зарегистрировать в моем приложении. Однако с Spring Boot и его конфигурацией Java я не могу просто добавить сопоставления сервлетов в .
Как я могу добавить дополнительные сервлеты?
6 ответов:
просто добавьте боб для сервлета. Он будет отображаться на
/{beanName}/
.@Bean public Servlet foo() { return new FooServlet(); }
так же
ServletRegistrationBean
@Bean public ServletRegistrationBean servletRegistrationBean(){ return new ServletRegistrationBean(new FooServlet(),"/someOtherUrl/*"); }
который в конечном итоге был путь, который я взял.
вы можете зарегистрировать несколько различных сервлетов с различными ServletRegistrationBean, как @Bean в классе приложений, и вы можете зарегистрировать сервлет имеет несколько сопоставлений сервлетов;
@Bean public ServletRegistrationBean axisServletRegistrationBean() { ServletRegistrationBean registration = new ServletRegistrationBean(new AxisServlet(), "/services/*"); registration.addUrlMappings("*.jws"); return registration; } @Bean public ServletRegistrationBean adminServletRegistrationBean() { return new ServletRegistrationBean(new AdminServlet(), "/servlet/AdminServlet"); }
мы также можем зарегистрировать сервлет следующим образом:
@Configuration public class ConfigureWeb implements ServletContextInitializer, EmbeddedServletContainerCustomizer { @Override public void onStartup(ServletContext servletContext) throws ServletException { registerServlet(servletContext); } private void registerServlet(ServletContext servletContext) { log.debug("register Servlet"); ServletRegistration.Dynamic serviceServlet = servletContext.addServlet("ServiceConnect", new ServiceServlet()); serviceServlet.addMapping("/api/ServiceConnect/*"); serviceServlet.setAsyncSupported(true); serviceServlet.setLoadOnStartup(2); } }
если вы используете встроенный сервер, вы можете комментировать
@WebServlet
ваш сервлет класс:@WebServlet(urlPatterns = "/example") public class ExampleServlet extends HttpServlet
С @WebServlet:
Аннотация используется для объявления сервлета.
эта аннотация обрабатывается контейнером во время развертывания, и соответствующий сервлет доступен по указанному URL-адресу узоры.
и включения
@ServletComponentScan
на базовый класс:@ServletComponentScan @EntityScan(basePackageClasses = { ExampleApp.class, Jsr310JpaConverters.class }) @SpringBootApplication public class ExampleApp
обратите внимание, что @ServletComponentScan будет работать только со встроенным сервером:
позволяет сканировать компоненты сервлетов (фильтры, сервлеты и слушатели.) Сканирование выполняется только при использовании встроенного веб-сайта сервер.
также доступно в BeanDefinitionRegistryPostProcessor
package bj; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletRegistrationBean; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @SpringBootApplication class App implements BeanDefinitionRegistryPostProcessor { public static void main(String[] args) { SpringApplication.run(App.class, args); } @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { registry.registerBeanDefinition("myServlet", new RootBeanDefinition(ServletRegistrationBean.class, () -> new ServletRegistrationBean<>(new HttpServlet() { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.getWriter().write("hello world"); } }, "/foo/*"))); } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) { } }