0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ceylon言語 (新しいNext Javaな言語)Advent Calendar 2013

Day 5

CeylonからJavaのクラスを使ってみる。(HttpServerコード)

Last updated at Posted at 2013-12-05

今回は移行ではあるあるの状態になりそうな
Javaのクラスを利用しつつCeylonで書こうってことをやってみようと思います。

何を作ろうかなーと考えてたところ
JavaでHttpServerを手軽に起動する方法が
こちらの記事 に書かれているのを見つけたので
これを参考にJavaのHttpServerのクラスを利用してCeylon上で書いてみます。

#まず設定
プロジェクトを右クリックして
Properties > Ceylon Compiler
にある
Enable java classes
にチェックを付けます。
(これをチェックするとおそらくJavaScriptエンジンでは利用出来なくなります)

スクリーンショット 2013-12-05 13.34.44.png

#今回使うライブラリをモジュール設定に足す

作成したモジュールで生成された
module.ceylonに
利用するパッケージの設定を追記します。

モジュールの作成などの基本的な方法は こちら

module com.hello.jserver "1.0.0" {
    import ceylon.interop.java "1.0.0";
    import java.base "7";
    import oracle.jdk.httpserver "7";
}

今回はcom.sun.netなoracleから提供されているjavaライブラリを使うので

import oracle.jdk.httpserver "7"

が一番重要な追記ポイントです。

#コード

という訳で、早速コードをどーん!


import com.sun.net.httpserver {
	HttpServer,
	HttpExchange,
	HttpHandler
}

import java.io {
	OutputStream
}
import java.net {
	InetSocketAddress
}
import java.util.concurrent {
	Executors,
	ExecutorService
}

void runServer(){
	
	HttpServer httpServer = HttpServer.create(InetSocketAddress("localhost" ,8080),8080);
	ExecutorService httpThreadPool = Executors.newFixedThreadPool(1);
	httpServer.executor = httpThreadPool;
	
    object httpHander satisfies HttpHandler {
      
      shared actual void handle(HttpExchange exc) {
          String response = "Hello HTTP Server" ;
          exc.sendResponseHeaders(200, response.size);
          OutputStream os = exc.responseBody;
          for ( Character i in response.characters) {
              os.write(i.integer);                              
          }
          os.close();
      }
    }
    httpServer.createContext( "/" , httpHander);
    httpServer.start();
    
}

元のJavaの記事のコード と見比べてもあまり変わらずさらっと読めるかなと思いますー。
少し違うのはoverrideのアノテーションが消えてactualがついていること。

意図的に変えた部分はテストじゃないのでサーバのシャットダウンはしないようにしてあります。
それとHttpHandlerのインスタンス生成とhttpServer.createContextで渡すときに
変数に1度代入してるとこくらいです。

それ以外の部分はクラスもそのまま使っていますし、
メソッドもそのままです。

Javaからやってもすぐ出来そうですよね!

という訳で実行してブラウザで
localhost:8080にアクセスすると

Hello HTTP Server

と表示されました!

今回は以上ー。
次回はJavaのライブラリではなくCeylonのライブラリを使って
HTTPサーバを書いてみようと思います。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?