Solon v2.8.5

与 Servlet 的区别

</> markdown

有极小部分的 Java 程序员,是没有其它平台或语言的开发经验的。这些同学中,可能会有人把 Servlet 与 Web 等同起来。没有 Servlet 怎么开发 Web?另外,确实大量的 Java Web 开发框架,是基于 Servlet 包装的!

一个常见的 Web 过程是怎么回事儿???

简单点就是:客户端通过 http 协议发了一个消息包,然后服务端回了一个消息包。直接处理消息包,肯定是相当麻烦的事情。于是有前辈定义了一套 Servlet 接口规范,让 Web 的处理更简单些。

而 Solon 则定义了另一套更小些的接口规范。

1、Handler + Context 架构

Solon 的 Handler + Context 架构,是用于 Solon Web 开发或适配的一套标准。与 Servlet 类似,都是接口标准。但它比较小,更方便适配任意 http server 框架,比如:

  • 基于 Servlet 的服务:jetty、undertow
  • 其它轻量的 http 服务:jdk、jlhttp、smart-http
  • 也可以是 http 之外的服务:socket、websocket

具体示意如下:

2、Handler + Context 应用演示

以下演示很容易能与上图对应起来,也更能理解 Handler + Context 架构的味道。

a)与框架对接

一个普通 http 服务与 solon 的对接(比如 jdk 自带的 httpserver),示意一下:

var server = new HttpServer(...);

//设置处理类
server.setHandler((req,resp)->{
    //XxxContext 为 Context 接口的适配类
    Context ctx = new XxxContext(req, resp);
    //转发给 Solon
    Solon.app.tryHandle(ctx);
});

//启动服务
server.start();

可以说 Solon 对原生形态的 http server 是比较友好的。只要完成 XxxContext 类的适配,对接工作就差不多了。

b)请求处理

Solon.start(App.class, args, app->{
    //为路由器添加一个 Handler
    app.get("/hello", ctx -> ctx.output("hello wrold!"));
});

那 Mvc 是什么鬼?所有 Mvc 的函数最终都会转换为 Handler 并注册到路由器。

3、其它