下面列出了怎么用org.springframework.boot.web.server.WebServer的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Reactive container (temporarily replaced by servlets)
* @param httpHandler httpHandler
* @return NettyTcpServer
*/
@Override
public WebServer getWebServer(HttpHandler httpHandler) {
try {
ServletContext servletContext = getServletContext();
if(servletContext != null) {
ServletRegistration.Dynamic servletRegistration = servletContext.addServlet("default", new ServletHttpHandlerAdapter(httpHandler));
servletRegistration.setAsyncSupported(true);
servletRegistration.addMapping("/");
}
//Server port
InetSocketAddress serverAddress = getServerSocketAddress(getAddress(),getPort());
return new NettyTcpServer(serverAddress, properties, protocolHandlers,serverListeners,channelHandlerSupplier);
}catch (Exception e){
throw new IllegalStateException(e.getMessage(),e);
}
}
WebServer start() throws Exception {
WebHandler webHandler = (WebHandler) toHttpHandler(routingFunction());
HttpHandler httpHandler = WebHttpHandlerBuilder.webHandler(webHandler)
.filter(new IndexRewriteFilter())
.build();
Tomcat tomcat = new Tomcat();
tomcat.setHostname("localhost");
tomcat.setPort(9090);
Context rootContext = tomcat.addContext("", System.getProperty("java.io.tmpdir"));
ServletHttpHandlerAdapter servlet = new ServletHttpHandlerAdapter(httpHandler);
Wrapper servletWrapper = Tomcat.addServlet(rootContext, "httpHandlerServlet", servlet);
servletWrapper.setAsyncSupported(true);
rootContext.addServletMappingDecoded("/", "httpHandlerServlet");
TomcatWebServer server = new TomcatWebServer(tomcat);
server.start();
return server;
}
WebServer start() throws Exception {
WebHandler webHandler = (WebHandler) toHttpHandler(routingFunction());
HttpHandler httpHandler = WebHttpHandlerBuilder.webHandler(webHandler)
.filter(new IndexRewriteFilter())
.build();
Tomcat tomcat = new Tomcat();
tomcat.setHostname("localhost");
tomcat.setPort(9090);
Context rootContext = tomcat.addContext("", System.getProperty("java.io.tmpdir"));
ServletHttpHandlerAdapter servlet = new ServletHttpHandlerAdapter(httpHandler);
Tomcat.addServlet(rootContext, "httpHandlerServlet", servlet);
rootContext.addServletMappingDecoded("/", "httpHandlerServlet");
TomcatWebServer server = new TomcatWebServer(tomcat);
server.start();
return server;
}
WebServer start() throws Exception {
WebHandler webHandler = (WebHandler) toHttpHandler(routingFunction());
HttpHandler httpHandler = WebHttpHandlerBuilder.webHandler(webHandler)
.filter(new IndexRewriteFilter())
.build();
Tomcat tomcat = new Tomcat();
tomcat.setHostname("localhost");
tomcat.setPort(9090);
Context rootContext = tomcat.addContext("", System.getProperty("java.io.tmpdir"));
ServletHttpHandlerAdapter servlet = new ServletHttpHandlerAdapter(httpHandler);
Wrapper servletWrapper = Tomcat.addServlet(rootContext, "httpHandlerServlet", servlet);
servletWrapper.setAsyncSupported(true);
rootContext.addServletMappingDecoded("/", "httpHandlerServlet");
TomcatWebServer server = new TomcatWebServer(tomcat);
server.start();
return server;
}
@Override
public void customize(ConfigurableApplicationContext context) {
if(context instanceof ServletWebServerApplicationContext
&& !AdminEndpointApplicationRunListener.isEmbeddedServletServer(context.getEnvironment())) {
MetaDataProvider metaDataProvider = context.getBean(MetaDataProvider.class);
WebServer webServer = new WebServer() {
@Override
public void start() throws WebServerException {
}
@Override
public void stop() throws WebServerException {
}
@Override
public int getPort() {
return metaDataProvider.getServerPort();
}
};
context.publishEvent(
new ServletWebServerInitializedEvent(
webServer,
new ServletWebServerApplicationContext())
);
}
}
@Override
public WebServer getWebServer(HttpHandler httpHandler) {
HttpServerOptions httpServerOptions = customizeHttpServerOptions(properties.getHttpServerOptions());
VertxHttpHandlerAdapter handler = new VertxHttpHandlerAdapter(httpHandler);
return new VertxWebServer(vertx, httpServerOptions, handler);
}
@Test
public void shouldCustomizeHttpServerOptions() {
webServerFactory.registerHttpServerOptionsCustomizer(mockCustomizer);
WebServer webServer = webServerFactory.getWebServer(null);
assertThat(webServer).isNotNull();
verify(mockCustomizer).apply(mockHttpServerOptions);
}
@Override
public WebServer getWebServer(ServletContextInitializer... initializers) {
if (embeddedServerService == null) {
return super.getWebServer(initializers);
} else if (embeddedServerService.getEmbedServer() == null) {
embeddedServerService.setEmbedServer(initEmbedTomcat());
}
Tomcat embedTomcat = embeddedServerService.getEmbedServer();
prepareContext(embedTomcat.getHost(), initializers);
return getWebServer(embedTomcat);
}
/**
* Get servlet container
* @param initializers Initialize the
* @return NettyTcpServer
*/
@Override
public WebServer getWebServer(ServletContextInitializer... initializers) {
ServletContext servletContext = Objects.requireNonNull(getServletContext());
try {
//The default servlet
if (super.isRegisterDefaultServlet()) {
servletContext.addServlet("default",new ServletDefaultHttpServlet())
.addMapping("/");
}
//JSP is not supported
if(super.shouldRegisterJspServlet()){
Jsp jsp = getJsp();
}
//Initialize the
for (ServletContextInitializer initializer : super.mergeInitializers(initializers)) {
initializer.onStartup(servletContext);
}
//Server port
InetSocketAddress serverAddress = getServerSocketAddress(getAddress(),getPort());
return new NettyTcpServer(serverAddress, properties, protocolHandlers,serverListeners,channelHandlerSupplier);
}catch (Exception e){
throw new IllegalStateException(e.getMessage(),e);
}
}
@Override
public WebServer getWebServer(ServletContextInitializer... initializers) {
this.initializers = initializers;
for (ServletContextInitializer i : initializers) {
try {
if (handler.getServletContext() == null) {
throw new WebServerException("Attempting to initialize ServletEmbeddedWebServer without ServletContext in Handler", null);
}
i.onStartup(handler.getServletContext());
} catch (ServletException e) {
throw new WebServerException("Could not initialize Servlets", e);
}
}
return this;
}
private Integer getServicePort()
{
return Optional.ofNullable(webContext.getWebServer())
.map(WebServer::getPort)
.filter(i -> i != -1)
.orElse(null);
}
private static void runServer(ReactiveWebServerFactory factory,
HttpHandler httpHandler,
Consumer<WebServer> validator) {
final WebServer server = factory.getWebServer(httpHandler);
server.start();
try {
validator.accept(server);
} finally {
server.stop();
}
}
/**
* Bean to configure Armeria Tomcat service.
* @return configuration bean.
*/
@Bean
public ArmeriaServerConfigurator armeriaTomcat() {
final WebServer webServer = ((WebServerApplicationContext) applicationContext).getWebServer();
if (webServer instanceof TomcatWebServer) {
final Tomcat tomcat = ((TomcatWebServer) webServer).getTomcat();
return serverBuilder -> serverBuilder.service("prefix:/tomcat/api/rest/v1",
TomcatService.of(tomcat));
}
return serverBuilder -> { };
}
@Test
public void verifySingleConnector() {
// Relevant to Tomcat 9.0
assertThat(applicationContext).isInstanceOf(WebServerApplicationContext.class);
final WebServer webServer = ((WebServerApplicationContext) applicationContext).getWebServer();
assertThat(webServer).isInstanceOf(TomcatWebServer.class);
assertThat(((TomcatWebServer) webServer).getTomcat()
.getEngine()
.getService()
.findConnectors()).hasSize(1);
}
@Test
public void shouldCreateWebServer() {
WebServer webServer = webServerFactory.getWebServer(null);
assertThat(webServer).isNotNull();
assertThat(webServer).isInstanceOf(VertxWebServer.class);
}
@Override
public WebServer getWebServer(HttpHandler httpHandler) {
return new RSocketWebServer(createRSocketStarter(httpHandler));
}
public NacosDiscoveryAutoDeregister(NacosDiscoveryProperties discoveryProperties,
WebServer webServer) {
this.discoveryProperties = discoveryProperties;
this.webServer = webServer;
}
@Override
public WebServer getWebServer(ServletContextInitializer... initializers) {
this.webServer = spy(new MockServletWebServer(mergeInitializers(initializers), getPort()));
return this.webServer;
}
@Override
@SuppressFBWarnings("MTIA_SUSPECT_SERVLET_INSTANCE_FIELD")
public WebServer getWebServer(HttpHandler httpHandler) {
handler = new ServletHttpHandlerAdapter(httpHandler);
return this;
}
@Override
public WebServer getWebServer(ServletContextInitializer... initializers) {
return new LealoneTomcatWebServer(super.getWebServer(initializers));
}
public LealoneTomcatWebServer(WebServer server) {
this.server = server;
}
private WebClient httpsClient(WebServer server) {
return WebClient.builder("https://example.com:" + server.getPort())
.factory(clientFactory)
.build();
}
private WebClient httpClient(WebServer server) {
return WebClient.builder("http://example.com:" + server.getPort())
.factory(clientFactory)
.build();
}
private static void runEchoServer(ReactiveWebServerFactory factory,
Consumer<WebServer> validator) {
runServer(factory, EchoHandler.INSTANCE, validator);
}
private TestWebServerInitializedEvent(String name, int port) {
super(mock(WebServer.class));
when(server.getPort()).thenReturn(port);
when(context.getServerNamespace()).thenReturn(name);
}
@Override
public WebServer getWebServer() {
return this.server;
}
private TestWebServerInitializedEvent(String name, int port) {
super(mock(WebServer.class));
when(server.getPort()).thenReturn(port);
when(context.getServerNamespace()).thenReturn(name);
}
@Override
public WebServer getWebServer() {
return this.server;
}
/**
* Factory method called to create the {@link TomcatWebServer}. Subclasses can
* override this method to return a different {@link TomcatWebServer} or apply
* additional processing to the Tomcat server.
* @param tomcat the Tomcat server.
* @return a new {@link TomcatWebServer} instance
*/
protected WebServer getWebServer(Tomcat tomcat) {
return new ArkTomcatWebServer(tomcat, getPort() >= 0, tomcat);
}