Webサイトの確認用によくさくっとWebサーバを立ち上げる事があるのですが、PythonのSimpleHTTPServerがWindows上でよく落ちてしまうのでもっと手軽なのないかなと思ってJettyで仕組みを作ってみた。
ただし、今のところ確認はMacOSXのみです。
Jettyのインストール
Eclipse Jetty Downloads からダウンロードして適当なところに展開します。
僕の環境では ~/bin/jetty-distribution-9.2.2.v20140723 に配置しました。
xmlファイルの作成とjettyの起動確認
次のようなXMLファイルを用意します。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.ResourceHandler">
<Set name="resourceBase"><Property name="files.base" default="./"/></Set>
</New>
</Set>
</Configure>
これを適当なところに起きます。
僕は ~/bin/jetty-static-content.xml に配置します。
やってることは files.base という変数でリソースのパスを設定するという感じです。
ではここで起動テストをしてみましょう。
$ cd ~/bin/jetty-distribution-9.2.2.v20140723
$ java -jar start.jar --ini OPTIONS=Server etc/jetty.xml etc/jetty-http.xml ~/bin/jetty-static-content.xml files.base=$HOME/dev/hoge jetty.port=8080
ここでは仮に ~/dev/hoge に moge.html というファイルがあるとします。
http://localhost:8080/moge.html にアクセスして上手くファイルが見れたら成功です。
bashスクリプトにする
あとはこいつをbashスクリプトにまとめます。
#!/bin/bash
JETTY_HOME=$HOME/bin/jetty-distribution-9.2.2.v20140723
STATIC_CONTENT_XML=$HOME/bin/jetty-static-content.xml
PORT=8080
usage(){
echo "Usage: $0 document_root [port]"
echo "default port is 8080"
exit 1
}
# original code: http://superuser.com/questions/205127/how-to-retrieve-the-absolute-path-of-an-arbitrary-file-from-the-os-x/218684#218684
abspath() {
pushd . > /dev/null
if [ -d "$1" ]; then
cd "$1"
dirs -l +0
else
cd "`dirname \"$1\"`"
cur_dir=`dirs -l +0`
if [ "$cur_dir" == "/" ]; then
echo "$cur_dir`basename \"$1\"`"
else
echo "$cur_dir/`basename \"$1\"`"
fi
fi
popd > /dev/null
}
[[ $# -eq 0 ]] && usage
if [ $# -gt 1 ]; then
PORT=$2
fi
path=`abspath $1`
cd $JETTY_HOME
java -jar start.jar --ini OPTIONS=Server etc/jetty.xml etc/jetty-http.xml $STATIC_CONTENT_XML files.base=$path jetty.port=$PORT
abspathっていうのはフルパスを取得する関数です。詳しくは osx - How to retrieve the absolute path of an arbitrary file from the OS X - Super User をみてください。Linuxとかなら他のコマンドでいける気がする。
これを ~/bin/jetty-run.sh という感じで置いて chmod +x しておきます。
あとは簡単に起動できます。
$ cd ~/dev/hoge
$ ~/bin/jetty-run.sh .
aliasなんかに設定しておくとさらに便利です。
alias jetty_run='/Users/btm/bin/jetty-run.sh'
$ cd ~/dev/hoge
$ jetty_run .
まとめとしては、MacOSXなら python -m SimpleHTTPServer にalias貼ればいいんじゃないかな。