我能够在标准Java应用程序中轻松设置Jetty的处理程序,如下所示:
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的Spring Boot以类似的方式设置Handler?当我尝试使用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 :(得分:3)
好的,我能够通过以下代码实现这一目标。如果这不是最佳做法,请告诉我。
@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);
});
}
};
}
}