三、Web-嵌入模式

本章将介绍通过硬编码来实现一个 Web 服务,在需要在应用中内置 Web服务的情况下可以使用。

通过应编码来实现 Web 服务的步骤:

  • 1.构造一个 WebServer 实例.
  • 2.注册路由.
  • 3.调用 WebServer 方法.

1.如何构造一个 WebServer 对象来实现 Web 服务

下面我们来看看 WebServer 的 newInstance 方法。

  • 配置对象构造实例
  1. public static WebServer newInstance()
  • 该方法会使用系统配置文件进行 WebServer 的初始化。
  • 配置对象构造实例
  1. public static WebServer newInstance(WebServerConfig config))
  • 该方法会使用系统配置文件进行 HttpServer 的初始化。配置文件路径/conf目录下。
  • config: HTTP服务WebServerConfig的配置对象,类似 web.json 文件中的配置。

  • 端口构造实例

  1. public static WebServer newInstance(int port)
  • port: Web服务监听的端口。
  • 该方法会使用系统配置文件进行 WebServer 的初始化。配置文件路径/conf目录下。OK,相信不用我多说什么大家心里清楚的不要不要的,通过newInstance这个静态方法我们将获得一个WebServer的实例,通过操作这个实例,我们就可以实现一个Web 服务.他有两种形态,一种是通过传入 Web 服务配置对象WebServerConfig的实例来实现,另一种是通过传入 Web 服务的监听端口来实现,有些同学就会好奇了,那么其他配置呢,哈哈,其他配置框架内就使用默认配置了.

2.向 WebServer 对象中注册路由

现在我们有了一个通过配置(或默认配置)得到的 WebServer 对象,那么我们如何注册我们规划好的的路由呢?我们先来看看路由方法的介绍,稍后在做更多描述:

  • HTTP 方法响应函数
  1. public WebServer [Method](String routeRegexPath, HttpRouter router)
  • 为 HTTP 方法提供服务,其中 Method 为HTTP(GET、POST等)方法。
  • routeRegexPath: 服务路径正则匹配,不需要正则的^和$,系统会自动处理。
  • handler: HttpRouter对象的实例用来支持具体的HTTP事件。

  • 自定义 HTTP 方法响应函数

  1. 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.代码分析:

  1. package org.voovan.test.http;
  2. import org.voovan.http.server.HttpRequest;
  3. import org.voovan.http.server.WebServer;
  4. import org.voovan.http.server.websocket.WebSocketRouter;
  5. import org.voovan.tools.TDateTime;
  6. import org.voovan.tools.TFile;
  7. import org.voovan.tools.log.Logger;
  8. import java.nio.ByteBuffer;
  9. public class HttpServerDemo {
  10. private static byte[] fileContent = TFile.loadFileFromContextPath("WEBAPP/index.htm");
  11. public static void main(String[] args) {
  12. //1.构造一个 WebServer 实例.
  13. WebServer webServer = WebServer.newInstance();
  14. //2.注册路由.
  15. webServer.get("/test", (req, resp) -> {
  16. resp.body().write("OK");
  17. });
  18. //3.调用 HttpServer 方法.
  19. webServer.serve();
  20. }
  21. }

有一个main 方法,里面我们通过newInstance方法构造了一个webServer对象,然后我们通过 get 方法注册了一个路由,接着我们调用serve()方法来启动服务.