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) 啟動主程序,然后調用就可以看見返回結果了。客戶端可以自己寫,也可以直接訪問網頁。

我的如下圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM