純規の暇人趣味ブログ

首を突っ込んで足を洗う

テスト/開発用のシンプルWebサーバー作った

      2017/12/28    HimaJyun

ブログのアクセス数がジリジリと1割ずつくらい減っていて焦っています@HimaJyunです。

そんな事はあなたは興味がないでしょうからはやく本文に行きませう、タイトル通りです。自分用に作ったものですが公開します。

開発用Webサーバが欲しかった

まず最初に断っておくと、「Webサーバー作った」とか仰々しい事書いてますけど、実態はJettyをもう少し気軽に扱えるようにするラッパーでしかありません。

「ワンライナーWebサーバー」とか言うのが良いのかな、コマンドから簡単に動かせる奴。

(Windowsマシンでこんな事を言うのはダメなんでしょうけれども言います、GUIは気軽じゃない)

Web開発用に欲しかったんです、file:///だと色々困る事があったので。

PCにPython/Ruby/PHP/node.jsみたいなスクリプト言語が入ってるなら、それらに搭載されているのを使った方が良いです。(参考: ワンライナーWebサーバを集めてみた - Qiita)

私は「使わない物は入れない」みたいな考え方してるので、簡易Webサーバーのためだけに頻繁に使う訳でもないスクリプト言語を入れるのは何となく嫌なんですよね。(それが無駄で阿呆な考え方である事は理解しています)

なので、出来れば既にインストールされているJavaでサクっと動く奴が欲しかった。

(あとスクリプト言語(というよりその周辺のツール、例えばなんたらenvとか)はWindowsお断りが多くてツライ)

どうしてもJavaが良かった

すみません……頭が固くて……。

ここで普通の人は「じゃあPythonとか入れよう」ってなるはずなんですけど、そこで何故か「やだやだー!あたいJavaがいいのー!Javaじゃないとやだー!」みたいな考えに至るから周りと話が合わないんでしょうね。

(C#でも可だったけど、Jetty的な立ち位置のライブラリがなかった)

とはいえHTTPサーバーを再発名するのは非常に手間なので、Jettyそのもの(組み込まない版の事)を動かすキッカースクリプトでも書こうと思ったのですが、こっちはこっちで、色々設定が必要で気軽じゃなかったので……

だったらJettyを気軽に動かせるようにするラッパーをJavaで書けば良くね、となった。

この記事を書いていて思いました、実に無駄な発明ですね、作ってしまったからには後に引けないので紹介します。

SimpleWebServer

相変わらず本文までが長いですね、文字列の圧がすごい。あつあつです。

という訳で今回作ったのはSimpleWebServer(SWS)です、ネーミングセンスの欠片もないですね。

ダウンロード

GitHubからダウンロードしてPathを通すなり何なりご自由に。

.jarが普通にjava -jar ファイル名.jarで起動する奴、http.(sh|bat)は*nix|Windows向けにjarとキッカースクリプトを結合した奴です。

「キッカースクリプトを結合した奴」ってのは文字通りで、つまりスクリプト内にjarが内包されていてそのまま実行できます。(JREは必要だヨ)

使い方(オプション)

引数なしで実行すればポート8080でカレントディレクトリをルートとして起動します。

その他ほんの少しだけ設定できます。

オプション 説明 デフォルト
-p/--port ポート指定(0でランダム) 8080 -p 8080、-p 0
-r/--root ルートを指定 カレントディレクトリ -r ./webroot
-b/--bind バインドアドレス localhost -b 127.0.0.1
-c/--cache キャッシュを使うか 使わない -c
--help/--version ヘルプとバージョンの表示 N/A

まぁ、-rをたまに使う程度ですかね。

動作環境

Java 8以上です、Java 7とかいうラムダも使えないような遺物はさっさと廃棄して下さいです。

ライセンス

Apache License 2.0です。

ライブラリはApache License 2.0のJettyとLog4j2を使用しています。

(この程度であればむしろJettyが本体と言うべき)

その他

その他の情報。ちなみにソースコードはGitHub(HimaJyun/SimpleWebServer)で公開しています。

jarとキッカースクリプトの結合

jar(というかzip)は(記憶が正しければ)ヘッダ情報を後ろから読み込みます。(というかテキストエディタで開けば分かるけど後ろにファイルリストがある)

でもって、スクリプトは上から実行されますよね?

つまり、スクリプト内でexitとかを書いておき、そのexitの後にzipを結合すればスクリプトとしてもzipとしても使えるファイルが出来上がります。

jarとして実行可能なスクリプトはそういう原理です、自分自身をjarとして起動するスクリプトを書き、そこにjarを結合するだけ。

スクリプトはSimpleWebServer/binにあるので、Javaのオプション引数を変えたい時はそれを参考に。

 - Web制作 ,