如何在 Spring 引导中为嵌入式 Jetty 设置处理程序?
How to set Handler for embedded Jetty in Spring Boot?
我可以像这样在标准 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
}
}
如何设置 Handler 与 Spring Boot with embedded 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()));
}
};
}
好的,我可以通过以下代码实现。如果这不是最佳做法,请告诉我。
@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 应用程序中轻松地为 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
}
}
如何设置 Handler 与 Spring Boot with embedded 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()));
}
};
}
好的,我可以通过以下代码实现。如果这不是最佳做法,请告诉我。
@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);
});
}
};
}
}