成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

com.sun.net.httpserver 創(chuàng)建 web 服務(wù)

VishKozus / 757人閱讀

摘要:今天我瞎翻的源代碼,發(fā)現(xiàn)可以用包下提供的很快速的創(chuàng)建服務(wù),它的創(chuàng)建方式和極其的類似。創(chuàng)建服務(wù)創(chuàng)建服務(wù)并注冊前面創(chuàng)建的,使用來處理請求。使用默認的只要運行這個方法,一個服務(wù)就啟動了,監(jiān)聽端口是,下面是我寫了兩個完整的例子。

我最開始學(xué)習(xí) Java web 編程是要去寫一個 servlet, 重寫里面的 service 方法,然后去配置 web.xml 文件,最后就是部署到 tomcat 或者 jetty 容器中并啟動。后來就是使用一些框架,struts2 SpringMvc。今天我瞎翻 JDK 的源代碼,發(fā)現(xiàn)可以用 com.sun.net.httpserver 包下提供的 API 很快速的創(chuàng)建 web 服務(wù),它的創(chuàng)建方式和 golang 極其的類似。

HttpHandler

首先要實現(xiàn) HttpHandler, 重寫 handle 方法。

public class MyHandler implements HttpHandler {
    @Override
    public void handle(HttpExchange httpExchange) throws IOException {
    
    }
}
創(chuàng)建 web 服務(wù)

創(chuàng)建 web 服務(wù)并注冊前面創(chuàng)建的 handler,使用 handler 來處理請求。

public class Main {

    public static void main(String[] args) {
        try {
            HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
            server.createContext("/web", new MyHandler());
            // 使用默認的 excutor
            server.setExecutor(null);
            server.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

只要運行這個 main 方法,一個 web 服務(wù)就啟動了,監(jiān)聽端口是 8000, 下面是我寫了兩個完整的例子。

GetHandler
package me.deweixu.handler;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import netscape.javascript.JSObject;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;

/**
 * Created by simeone
 *
 * @author: simeone
 * @Date: 2018/5/19
 */
public class GetHandler implements HttpHandler {
    @Override
    public void handle(HttpExchange httpExchange) throws IOException {
        System.out.println("Method: " + httpExchange.getRequestMethod());
        String param = httpExchange.getRequestURI().getQuery();
        System.out.println("Param:" + param);
        httpExchange.sendResponseHeaders(200, 0);

        OutputStream os = httpExchange.getResponseBody();
        os.write(param.getBytes());
        os.close();
    }

}
PostHandler
package me.deweixu.handler;

import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.io.UnsupportedEncodingException;

/**
 * Created by simeone
 *
 * @author: simeone
 * @Date: 2018/5/19
 */
public class PostHandler implements HttpHandler {
    @Override
    public void handle(HttpExchange httpExchange) throws IOException {
        System.out.println("Method: " + httpExchange.getRequestMethod());

        InputStream is = httpExchange.getRequestBody();
        String response = is2string(is);
        System.out.println("response: " + response);
        is.close();
        httpExchange.sendResponseHeaders(200, response.length());

        Headers headers = httpExchange.getResponseHeaders();
        headers.set("Content-Type", "application/json; charset=utf8");

        OutputStream os = httpExchange.getResponseBody();
        os.write(response.getBytes());
        os.close();
    }

    private String is2string(InputStream is) throws IOException {
        final int bufferSize = 1024;
        final char[] buffer = new char[bufferSize];
        final StringBuilder out = new StringBuilder();
        Reader in = new InputStreamReader(is, "UTF-8");
        for (; ; ) {
            int rsz = in.read(buffer, 0, buffer.length);
            if (rsz < 0)
                break;
            out.append(buffer, 0, rsz);
        }
        return out.toString();
    }
}
Main
package me.deweixu;

import com.sun.net.httpserver.HttpServer;
import me.deweixu.handler.GetHandler;
import me.deweixu.handler.PostHandler;

import java.io.IOException;
import java.net.InetSocketAddress;

public class Main {

    public static void main(String[] args) {
        try {
            HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
            server.createContext("/post", new PostHandler());
            server.createContext("/get", new GetHandler());
            server.setExecutor(null);
            server.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
測試
# get
$ curl http://127.0.0.1:8000/get?name=simeone&address=beijing
name=simeone&address=beijing

# post
$ curl -H "Content-Type: application/json" -d "{"username":"simeone", "address":"beijing"}" http://127.0.0.1:8000/post
{"username":"simeone", "address":"beijing"}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69429.html

相關(guān)文章

  • 全棧通用分頁查詢

    摘要:前言給大家講解全棧通用分頁查詢碼字不易,點個關(guān)注轉(zhuǎn)載請說明開發(fā)工具思維導(dǎo)圖目錄一所需要的包二后端數(shù)據(jù)庫幫助類通用查詢分頁父類書籍層類分頁工具類三前端文件助手類前端界面四一所需要的包二后端數(shù)據(jù)庫 前言:給大家講解全棧通用分頁查詢 碼字不易,點個關(guān)注 轉(zhuǎn)載請說明! 開發(fā)工具:eclipse 思維...

    Ashin 評論0 收藏0
  • Spring 指南(目錄)

    摘要:指南無論你正在構(gòu)建什么,這些指南都旨在讓你盡快提高工作效率使用團隊推薦的最新項目版本和技術(shù)。使用進行消息傳遞了解如何將用作消息代理。安全架構(gòu)的主題指南,這些位如何組合以及它們?nèi)绾闻c交互。使用的主題指南以及如何為應(yīng)用程序創(chuàng)建容器鏡像。 Spring 指南 無論你正在構(gòu)建什么,這些指南都旨在讓你盡快提高工作效率 — 使用Spring團隊推薦的最新Spring項目版本和技術(shù)。 入門指南 這些...

    only_do 評論0 收藏0
  • web前端和后端的區(qū)別在哪?

    摘要:前端和后端是計算機行業(yè)最常用的兩個術(shù)語在某種程度上,它們成了流行語。前端開發(fā)人員也稱為前端設(shè)計師,他們可以創(chuàng)建一個沒有任何后端開發(fā)的站點。 前端和后端是計算機行業(yè)最常用的兩個術(shù)語;在某種程度上,它們成了流行語。它們決定了你作為軟件開發(fā)人員的工作類型、你使用的技術(shù)以及你得到的報酬。那么,讓我們來談?wù)勥@兩個術(shù)語之間的區(qū)別,它們...

    xuxueli 評論0 收藏0
  • IntelliJ IDEA2017創(chuàng)建web工程并實現(xiàn)遠程部署tomcat

    摘要:剛剛接觸這款神器,很多東西都在摸索中,對于像在及中創(chuàng)建動態(tài)工程那樣簡單的事在中也搞了好久,今天我就分享一下本菜鳥痛苦的學(xué)習(xí)過程,下面是我的總結(jié),希望對大家有一點幫助。遠程部署運行測試或到服務(wù)器上看一下 剛剛接觸IntelliJ IDEA這款神器,很多東西都在摸索中,對于像在eclipse及myeclipse中創(chuàng)建動態(tài)web工程那樣簡單的事在idea中也搞了好久,今天我就分享一下本菜鳥痛...

    chunquedong 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<