HttpServer创建服务端

🍃实际开发中我们经常遇到接口开发,一些较老的项目,采用的是java内置的HttpServer类实现的Restful服务。

  HttpServer是JDK1.6以后内置的HTTP服务器,位置在rt.jar的com.sun.net.httpserver包下,支持http和https协议。

 

🍃该技术主要用到HttpServer类 ,Handler接口实现类,以及HttpExchange类。我们用HttpServer调用Handler接口实现类,通过HttpExchange接受请求信息,并处理返回信息。

 

 

解析:

1、HttpServer:表示一个服务器实例,需要绑定一个IP地址和端口号。(HttpsServer是其子类,处理https请求)

2、HttpContext:服务器监听器的上下文,需要配置用于匹配URI的公共路径和用来处理请求的HttpHandler
(可以创建多个 HttpContext,一个 HttpContext 对应一个 HttpHandler,不同的 URI 请求,根据添加的 HttpContext 监听器,分配到对应的 HttpHandler 处理请求)
3、HttpHandler:上下文对应的http请求处理器
4、HttpExchange:监听器回调时传入的参数,封装了http请求和响应的所有数据操作

 

 

实现代码:

  1)创建HtttpServer主程序,开启服务:

 public class Server
{
    public static void main(String[] args) throws Exception
    {   
//    start port:8080
    HttpServerProvider provider = HttpServerProvider.provider();
    HttpServer server = provider.createHttpServer(new InetSocketAddress(8080), 10);
    server.createContext("/findAllOrderHistory", new OrderHistory());
    server.setExecutor(null);
    server.start();
    }
}

  2)OrderHistory   实现HttpHandler接口

public class OrderHistory implements HttpHandler {
  @Override
  public void handle(HttpExchange var1) throws IOException {
//    获取请求参数  此代码块是实现接收请求参数page、pageSize,条件判断则为防止参数位置前后不分(此处不用纠结)
//    获取参数  由var1..getRequestURI().getQuery()获取,按需所用,无参则不用管,直接下一步
    String[] pages,pageSizes = new String[0];
    String queryString =  var1.getRequestURI().getQuery();
    String [] strs = queryString.split("[&]");
    if (strs[0].contains("pageSize")){
      pageSizes = strs[0].split("[=]");
      pages = strs[1].split("[=]");
    }else {
      pages = strs[0].split("[=]");
      pageSizes = strs[1].split("[=]");
    }
    Integer page = Integer.valueOf(pages[1]);
    Integer pageSize = Integer.valueOf(pageSizes[1]);
//工具类方法→获取数据转成Json返回
//    JDBCUtils.findAllOrderHistoryByPage是我自己写的一个JDBC读取数据库数据,数据获取自行解决
    ArrayList<OrderHistoryVO> allOrderHistory = JDBCUtils.findAllOrderHistoryByPage(page,pageSize);
    JSONArray orderJsonArray = new JSONArray();
    orderJsonArray = JSONArray.parseArray(JSONArray.toJSONString(allOrderHistory));

//接口返回数据如下,照写即可
    var1.sendResponseHeaders(200, 0);
    OutputStream os = var1.getResponseBody();
    os.write(orderJsonArray.toJSONString().getBytes());
    os.close();

  }

  3) 启动主程序,然后调用就可以看见返回结果了。客户端可以自己写,也可以直接访问网页。

我的如下图所示:

 

posted @ 2020-12-08 14:51  Winton-H  阅读(3036)  评论(0编辑  收藏  举报