国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

VishKozus / 735人閱讀

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

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

HttpHandler

首先要實(shí)現(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ù)并注冊(cè)前面創(chuàng)建的 handler,使用 handler 來處理請(qǐng)求。

public class Main {

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

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

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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/69429.html

相關(guān)文章

  • 全棧通用分頁查詢

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

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

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

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

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

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

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

    chunquedong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<