9
10

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.

Jettyで簡単にWebサーバを起動してみる

Last updated at Posted at 2014-08-21

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貼ればいいんじゃないかな。

9
10
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
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?