2016-06-27 4 views
0

Я могу легко установить обработчик для Jetty в стандартном приложении Java, как это:Как установить обработчик для встроенного Jetty в Spring Boot?

public class Main { 
    public static void main(String[] args) throws Exception { 
     Main main = new Main(); 
     main.start(); 
    } 

    private void start() throws Exception { 
     Server server = new Server(9999); 
     server.setHandler(new Handler()); 
     server.start(); 
     server.join(); 
    } 
} 

class Handler extends AbstractHandler { 
    @Override 
    public void handle(final String target, final Request baseRequest, final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { 
     // do something 
    } 
} 

Как установить обработчик подобным образом с весны Ботинок со встроенным Jetty? Когда я пытаюсь использовать EmbeddedServletContainerCustomizer bean, я получаю исключение missing ServletContext.

@Bean 
    public EmbeddedServletContainerCustomizer customizer() throws MalformedURLException { 
     return new EmbeddedServletContainerCustomizer() { 

      @Override 
      public void customize(ConfigurableEmbeddedServletContainer container) { 
       if (container instanceof JettyEmbeddedServletContainerFactory) { 
        customizeJetty((JettyEmbeddedServletContainerFactory) container); 
       } 
      } 

      private void customizeJetty(JettyEmbeddedServletContainerFactory jetty) { 
       jetty.addServerCustomizers((JettyServerCustomizer) server -> server.setHandler(myCustomHandler())); 
      } 
     }; 

    } 
+0

передать контекст сервлета как параметр –

+0

в каком месте? – dmydlarz

ответ

2

Хорошо, я смог добиться этого с помощью следующего кода. Если это не лучшая практика, сообщите мне.

@Configuration 
@EnableWebMvc 
@SpringBootApplication 
public class Main { 

    public static void main(String[] args) { 
     new SpringApplicationBuilder() 
       .sources(Main.class) 
       .run(args); 
    } 

    @Bean 
    public EmbeddedServletContainerCustomizer customizer() throws MalformedURLException { 

     return new EmbeddedServletContainerCustomizer() { 

      @Override 
      public void customize(ConfigurableEmbeddedServletContainer container) { 
       if (container instanceof JettyEmbeddedServletContainerFactory) { 
        customizeJetty((JettyEmbeddedServletContainerFactory) container); 
       } 
      } 

      private void customizeJetty(JettyEmbeddedServletContainerFactory jetty) { 
       jetty.addServerCustomizers((JettyServerCustomizer) server -> { 
        HandlerCollection handlerCollection = new HandlerCollection(); 
        handlerCollection.setHandlers(new Handler[]{ myCustomHandler(), server.getHandler() }); 
        server.setHandler(handlerCollection); 
       }); 
      } 
     }; 

    } 
} 
Смежные вопросы