我可以像这样在标准 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()));
}
};
}
最佳答案
好的,我能够通过以下代码实现这一目标。如果这不是最佳做法,请告诉我。
@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);
});
}
};
}
}
关于java - 如何在 Spring Boot 中为嵌入式 Jetty 设置 Handler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38051624/