とうとう、ハッスルダンスを覚えました。
簡単なwebサーバー
僕はこれまで簡易なwebサーバーを使う時に
Jettyをよく使っていました。
ただ、まあなんだかんだでコピペで使いまわしているだけですが…
Nettyが流行りなようなので、
Nettyを覚えたいのですが、
廃人なので覚えている隙がない…
そこでwebbitですよ!
Netty + JavaのHTTPサーバー
Nettyで簡易なHTTPサーバーを作ろうと、
「Netty + Web + server」とか、
「Netty + HTTP」で検索すると、
大抵、 Netty + Scalaの組み合わせ事例がほとんどで、
Scalaを全く知らない僕には辛いとこでした。
そこで、webbitですよ!
そこでwebbitですよ!
というわけで、webbitが登場するわけです。
Maven、Gradle、Grapesでの利用方法はこちらからどうぞ。
早速書いてみた
というわけでサーバーを早速書いてみました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Grab ('org.webbitserver:webbit:0.4.14') | |
import org.webbitserver.* | |
import org.webbitserver.netty.* | |
import org.webbitserver.handler.* | |
import java.util.concurrent.* | |
WebServers.metaClass.static.createWebServer = {InetSocketAddress address -> | |
return new NettyWebServer( | |
Executors.newSingleThreadScheduledExecutor(), | |
address, | |
new URI("http://${address.hostName}${address.port == 80? '' : ':' + address.port}") | |
) | |
} | |
def server = WebServers.createWebServer(new InetSocketAddress('localhost', 8972)) | |
.add(new StaticFileHandler('./public')) | |
.start() | |
.get() | |
println server.uri |
すごい単純ですね。
さて、
前回ののエントリーでは、
Jade4Jを扱いました。
そして今回のエントリーはwebbitです。
そうすると、次に考えられるのが、
このふたつのライブラリーを組み合わせた、
簡易的なWebアプリケーションになります。
こんな感じでDSLが書ければいいなあと思っています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
server 3000 | |
public './public' | |
jade '/sample' : [ | |
{ | |
!!! 5 | |
html | |
head | |
title= pageName | |
body | |
ul#students | |
for student in students | |
li #{student.firstName} #{student.lastName} grade #{student.grade} | |
p= students.size() | |
}, | |
{ | |
[ | |
pageName : 'sample', | |
students : Students.findStudentsByIdBetween(100, 200) | |
] | |
} | |
] |