三、Web-嵌入模式
本章将介绍通过硬编码来实现一个 Web 服务,在需要在应用中内置 Web服务的情况下可以使用。
通过应编码来实现 Web 服务的步骤:
- 1.构造一个 WebServer 实例.
- 2.注册路由.
- 3.调用 WebServer 方法.
1.如何构造一个 WebServer 对象来实现 Web 服务
下面我们来看看 WebServer 的 newInstance 方法。
- 配置对象构造实例
public static WebServer newInstance()
- 该方法会使用系统配置文件进行 WebServer 的初始化。
- 配置对象构造实例
public static WebServer newInstance(WebServerConfig config))
- 该方法会使用系统配置文件进行 HttpServer 的初始化。配置文件路径
/conf
目录下。 config
: HTTP服务WebServerConfig的配置对象,类似web.json
文件中的配置。端口构造实例
public static WebServer newInstance(int port)
port
: Web服务监听的端口。- 该方法会使用系统配置文件进行 WebServer 的初始化。配置文件路径/conf目录下。OK,相信不用我多说什么大家心里清楚的不要不要的,通过newInstance这个静态方法我们将获得一个WebServer的实例,通过操作这个实例,我们就可以实现一个Web 服务.他有两种形态,一种是通过传入 Web 服务配置对象WebServerConfig的实例来实现,另一种是通过传入 Web 服务的监听端口来实现,有些同学就会好奇了,那么其他配置呢,哈哈,其他配置框架内就使用默认配置了.
2.向 WebServer 对象中注册路由
现在我们有了一个通过配置(或默认配置)得到的 WebServer 对象,那么我们如何注册我们规划好的的路由呢?我们先来看看路由方法的介绍,稍后在做更多描述:
- HTTP 方法响应函数
public WebServer [Method](String routeRegexPath, HttpRouter router)
- 为 HTTP 方法提供服务,其中 Method 为HTTP(GET、POST等)方法。
routeRegexPath
: 服务路径正则匹配,不需要正则的^和$,系统会自动处理。handler
: HttpRouter对象的实例用来支持具体的HTTP事件。自定义 HTTP 方法响应函数
public WebServer otherMethod(String method, String routeRegexPath, HttpRouter router)
- 为 HTTP 方法提供服务,其中 Method 为HTTP(GET、POST等)方法。
method
: 自定义的 HTTP 方法,可以不用符合 HTTP 规范,注意已经实现的HTTP方法响应不会再被这个方法响应。routeRegexPath
: 服务路径正则匹配,不需要正则的^和$,系统会自动处理。handler
: HttpRouter对象的实例用来支持具体的HTTP事件。通过上面的方法介绍,我们可以发现有两种形式的路由响应函数:基于HTTP1.1协议中定义的 Http 方法的路由,框架内已经实现过了这些你可以直接调用.
- 有些时候我们需要特殊的 HTTP 方法来实现我们的特殊的业务场景,这个时候我们就可以通过第二个路由响应函数来实现,他只是多了一个 HTTP 响应方法定义的参数.
3.如何启动服务
哈哈,一句话.比如我们通过 newInstance
方法获得了一个名为 webServer
的对象,那么:WebServer.serve()
服务就启动起来了.
4.代码分析:
package org.voovan.test.http;
import org.voovan.http.server.HttpRequest;
import org.voovan.http.server.WebServer;
import org.voovan.http.server.websocket.WebSocketRouter;
import org.voovan.tools.TDateTime;
import org.voovan.tools.TFile;
import org.voovan.tools.log.Logger;
import java.nio.ByteBuffer;
public class HttpServerDemo {
private static byte[] fileContent = TFile.loadFileFromContextPath("WEBAPP/index.htm");
public static void main(String[] args) {
//1.构造一个 WebServer 实例.
WebServer webServer = WebServer.newInstance();
//2.注册路由.
webServer.get("/test", (req, resp) -> {
resp.body().write("OK");
});
//3.调用 HttpServer 方法.
webServer.serve();
}
}
有一个main 方法,里面我们通过newInstance方法构造了一个webServer
对象,然后我们通过 get
方法注册了一个路由,接着我们调用serve()
方法来启动服务.