[Android]NanoHTTPDを使用してAndroidアプリケーションでWebサーバを実装


アプリケーションでWebサーバを実現できる!


NanoHTTPDとは?


Javaを使用するプラットフォーム上でHTTPサーバのオープンソースライブラリを作成できます.

NanoHTTPDの原理は?


要求をJavaのServerSocketとして受け入れ、1つのSocketにスレッドを作成することによって処理されます.AndroidもJavaを使用するため、NanoHTTPDを使用してアプリケーションでWebサーバを実現できます.

実施方法


1-1. クラスの作成


まず、NanoHTTPDを拡張するWebサーバクラスを作成し、ログで使用するTAGとPortを定数として宣言します.
public class WebServer extends NanoHTTPD {
	private static final String TAG = WebServer.class.getSimpleName(); // 로그에 사용할 TAG
    private static final int PORT = 8080; // 포트번호
}

1-1. モノトーンオブジェクトの作成


次に、getServer()関数を作成して、ジェネレータおよびWebサーバオブジェクトをインポートします.モノトーンモードで実施する.
private WebServer() throws IOException {
        super(PORT);
    }
    public static WebServer getServer() throws IOException {
        if(server == null){
            server = new WebServer();
        }
        return server;
    }

2.クライアント要求処理関数の実現


次に、クライアント要求のserve()関数の上書きを受信します.
このセクションでは、クライアントのリクエストを受信して処理し、応答をクライアントに返します.
@Override
    public Response serve(IHTTPSession session) {
    	Map<String, String> headers = session.getHeaders(); // 세션의 헤더
        Method method = session.getMethod(); // 세션의 메소드
        String uri = session.getUri(); // 세션의 Uri

        Map<String, List<String>> decodedQueryParameters = decodeParameters(session.getQueryParameterString());
    }
以上、IHTTPSession sessionをパラメータとして受信し、HttpセッションのHeader、Method、およびUriを含む.
✔decodeQueryParametersにはヘッダーのタグが含まれています.
以前に作成したRestAPIを表示すると、クライアントがどのように要求を発行しているかがわかります.
Retrofit 2で作成されたインタフェースの例は、次のとおりです.
@POST("posts/post")
  • メソッド:Get、Post、Patch、Put、Delete.上記のコードでは、POSTがこれに対応している.
  • Uri:BaseUrlの後ろにあるEndPoint.上記のコードでは、"posts/post"がこれに対応している.
  • この方法およびURIは、クライアントの要求に従って処理することができる.
    📌方法がPOSTである場合、Bodyはグループ化されなければならない.
    Map<String, String> map = new HashMap<String, String>(); // Body를 넣을 Map 선언
    session.parseBody(map); // 세션의 Body를 map에 파싱
    Mapは前述のBodyを含むように宣言され、session.parseBody(map);関数に分類される.

    3.クライアントへの応答の実装


    応答は、クライアント要求の成功と失敗(失敗した場合、複数のエラーメッセージが処理される)の結果に基づいて返信されるオブジェクトです.
    実施方法は以下のとおりである.

    成功時

    return newFixedLengthResponse(Response.Status.OK, "application/json", "정상적으로 처리 되었습니다.");
    Response.Status.OKは、サーバが送信するメッセージ、コード200である.

    失敗した場合

    return newFixedLengthResponse(Response.Status.BAD_REQUEST, "application/json", "잘못된 요청입니다.");
    このときResponse.Status.BAD_REQUESTは、コード400というよく見られる情報です.
    これにより、Response.Status.は、多くのサーバリースコードを実現する.
    状況に応じてエラー処理や成功処理を実行できます.

    これによりNanoHTTPDはAndroidアプリケーションでサーバを実現できます!😲👍


    今回はNanoHTTPDを勉強しているうちにHTTPサーバに関する知識をたくさん得ました

    Reference


    NanoHTTPD羽状ハブ