Reputation: 3002
I am able to easily set handler for Jetty in a standard Java application like this:
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
}
}
How to set Handler similar way with Spring Boot with embedded Jetty? When I am trying with EmbeddedServletContainerCustomizer
bean I am getting missing ServletContext
exception.
@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()));
}
};
}
Upvotes: 4
Views: 2961
Reputation: 3002
Ok, I was able to achieve that with following code. If it's not a best practice, please let me know.
@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);
});
}
};
}
}
Upvotes: 6