HttpServer创建服务端
实际开发中我们经常遇到接⼝开发,⼀些较⽼的项⽬,采⽤的是java内置的HttpServer类实现的Restful服务。
HttpServer是JDK1.6以后内置的HTTP服务器,位置在rt.jar的com.sun.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 = ateHttpServer(new InetSocketAddress(8080), 10);
server.setExecutor(null);
server.start();
}
}
  2)OrderHistory  实现HttpHandler接⼝
public class OrderHistory implements HttpHandler {
@Override
public void handle(HttpExchange var1) throws IOException {
//    获取请求参数此代码块是实现接收请求参数page、pageSize,条件判断则为防⽌参数位置前后不分(此处不⽤纠结)
//    获取参数由RequestURI().getQuery()获取,按需所⽤,⽆参则不⽤管,直接下⼀步
String[] pages,pageSizes = new String[0];
String queryString =  RequestURI().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.JSONString(allOrderHistory));
//接⼝返回数据如下,照写即可
var1.sendResponseHeaders(200, 0);
restful接口调用实例
OutputStream os = ResponseBody();
os.JSONString().getBytes());
os.close();
}
  3) 启动主程序,然后调⽤就可以看见返回结果了。客户端可以⾃⼰写,也可以直接访问⽹页。我的如下图所⽰:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。