简易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。

  1. 处理简单请求:
  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();
  1. 获取表单数据并返回
  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();