简易Http服务器-SimpleServer

由来

Oracle JDK提供了一个简单的Http服务端类,叫做HttpServer,当然它是sun的私有包,位于com.sun.net.httpserver下,必须引入rt.jar才能使用,Hutool基于此封装了SimpleServer,用于在不引入Tomcat、Jetty等容器的情况下,实现简单的Http请求处理。

SimpleServer在Hutool-5.3.0后才引入,请升级到最新版本

使用

  1. 启动一个Http服务非常简单:

    1. HttpUtil.createServer(8888).start();

    通过浏览器访问 http://localhost:8888/ 即可,当然此时访问任何path都是404。

  2. 处理简单请求:

    1. HttpUtil.createServer(8888)
    2. .addAction("/", (req, res)->{
    3. res.write("Hello Hutool Server");
    4. })
    5. .start();

    此处我们定义了一个简单的action,绑定在”/“路径下,此时我们可以访问,输出“Hello Hutool Server”。
    同理,我们通过调用addAction方法,定义不同path的处理规则,实现相应的功能。

    简单的文件服务器

    Hutool默认提供了简单的文件服务,即定义一个root目录,则请求路径后直接访问目录下的资源,默认请求index.html,类似于Nginx。

    1. HttpUtil.createServer(8888)
    2. // 设置默认根目录
    3. .setRoot("D:\\workspace\\site\\hutool-site")
    4. .start();

    此时访问http://localhost:8888/即可访问HTML静态页面。

    hutool-site是Hutool主页的源码项目,地址在:https://gitee.com/loolly_admin/hutool-site,下载后配合SimpleServer实现离线文档。

读取请求和返回内容

有时候我们需要自定义读取请求参数,然后根据参数访问不同的数据,整理返回,此时我们自定义Action即可完成:

  1. 返回JSON数据

    1. HttpUtil.createServer(8888)
    2. // 返回JSON数据测试
    3. .addAction("/restTest", (request, response) ->
    4. response.write("{\"id\": 1, \"msg\": \"OK\"}", ContentType.JSON.toString())
    5. ).start();
  2. 获取表单数据并返回

    1. HttpUtil.createServer(8888)
    2. // http://localhost:8888/formTest?a=1&a=2&b=3
    3. .addAction("/formTest", (request, response) ->
    4. response.write(request.getParams().toString(), ContentType.TEXT_PLAIN.toString())
    5. ).start();

    文件上传

    除了常规Http服务,Hutool还封装了文件上传操作:

    1. HttpUtil.createServer(8888)
    2. .addAction("/file", (request, response) -> {
    3. final UploadFile file = request.getMultipart().getFile("file");
    4. // 传入目录,默认读取HTTP头中的文件名然后创建文件
    5. file.write("d:/test/");
    6. response.write("OK!", ContentType.TEXT_PLAIN.toString());
    7. }
    8. )
    9. .start();