三、Web-嵌入模式


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

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

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

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

    2.向 WebServer 对象中注册路由

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

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

      • 自定义 HTTP 方法响应函数

      • 为 HTTP 方法提供服务,其中 Method 为HTTP(GET、POST等)方法。
      • method: 自定义的 HTTP 方法,可以不用符合 HTTP 规范,注意已经实现的HTTP方法响应不会再被这个方法响应。
      • routeRegexPath: 服务路径正则匹配,不需要正则的^和$,系统会自动处理。
      • 基于HTTP1.1协议中定义的 Http 方法的路由,框架内已经实现过了这些你可以直接调用.

      • 有些时候我们需要特殊的 HTTP 方法来实现我们的特殊的业务场景,这个时候我们就可以通过第二个路由响应函数来实现,他只是多了一个 HTTP 响应方法定义的参数.

      3.如何启动服务

      哈哈,一句话.比如我们通过 newInstance 方法获得了一个名为 webServer 的对象,那么:WebServer.serve()服务就启动起来了.

      4.代码分析:

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

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