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) 启动主程序,然后调用就可以看见返回结果了。客户端可以自己写,也可以直接访问网页。
我的如下图所示: