LoginSignup
0
1

More than 1 year has passed since last update.

Java SEアプリケーションにHTTP Server機能を組み込みたい(Grizzly編)

Last updated at Posted at 2022-04-03

この度、個人ブログを閉鎖することなり、一定のアクセスがあった記事を記録として遺すことにしました。
以下は、2020年4月14日に投稿した記事の写しです。この記事がこの世の誰かの助けとなることを願います。

JavaでWebというと、warファイルをAPサーバに搭載してみたいな運用が多いと思いますが、
Java SEアプリケーションにHTTP Serverとしての機能を組み込みたい、といった要件を提示されることも多々あります。

GrizzlyはJava EEアプリサーバのGlassFishで採用されているHTTPサーバの実装ライブラリで、Java SEアプリケーションに単体で組み込むこともできます。

公式サイト
https://javaee.github.io/grizzly/

公式のサンプルほぼそのままですが、Mavenプロジェクトでの実装例を記載します。

まずは、pom.xmlに以下の通り追記して保存します。

<dependencies>
	<dependency>
		<groupId>org.glassfish.grizzly</groupId>
		<artifactId>grizzly-http-server</artifactId>
		<version>2.4.4</version>
	</dependency>
</dependencies>

Grizzlyを使用するために必要なライブラリが自動的ダウンロードされプロジェクトに取り込まれます。
うまくいかない場合は、おおよそWebプロキシが原因なのでsettings.xmlに然るべき設定をしてリトライしましょう。

次に新規クラスを作成してmainメソッドを以下の通り記載します。

package net.xamarinian.examples;

import java.nio.charset.StandardCharsets;

import org.glassfish.grizzly.http.server.HttpHandler;
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.grizzly.http.server.Request;
import org.glassfish.grizzly.http.server.Response;
import org.glassfish.grizzly.http.util.ContentType;

public class GrizzlyMain {

	/**
	 * Java SEアプリケーションにHTTP Serverを組み込むサンプル(Grizzly版)
	 * @param args
	 */
	public static void main(String[] args) {
		// リッスンポート8080でサーバインスタンスを生成
		final HttpServer server = HttpServer.createSimpleServer();
		// サーバにハンドラを登録
		server.getServerConfiguration().addHttpHandler(
				new HttpHandler() {
					@Override
					public void service(Request request, Response response) throws Exception {
						String data = "Hello Grizzly!!";
						response.setContentType(ContentType.newContentType("text/plain", "UTF-8"));
						response.setContentLength(data.getBytes(StandardCharsets.UTF_8).length);
						response.getWriter().write(data);
					}
				}, "/grizzly");

		try {
			// HTTP Server開始
			server.start();
			System.out.println("Press any key to stop the server...");
			System.in.read();

		} catch (Exception e) {
			e.printStackTrace();

		} finally {
			server.shutdownNow();
		}
	}
}

mainメソッドの実装が終わったらさっそくアプリケーションを実行してみます。
サンプルのHttpServerへはhttp://localhost:8080/grizzly からアクセスすることが可能です。
Webブラウザからも当然アクセス可能ですが、PowerShellのInvoke-WebRequestコマンドレット(curl)を使うとヘッダ情報まで確認できて便利です。

PS C:\Windows\system32> curl http://localhost:8080/grizzly


StatusCode        : 200
StatusDescription : OK
Content           : Hello Grizzly!!
RawContent        : HTTP/1.1 200 OK
                    Content-Length: 15
                    Content-Type: text/plain;charset=UTF-8

                    Hello Grizzly!!
Forms             : {}
Headers           : {[Content-Length, 15], [Content-Type, text/plain;charset=UTF-8]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 15
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1