[Java]Javaでテスト用WEBサーバーを手軽に立てる方法

WEB APIのクライアントプログラムを組んでいると、リクエスト対して適当な値を返してくれるモックサーバーが欲しくなります。RubyだとWebrickを使って簡単にサーバーを立てられるんですが、Javaでやりたい…。

それJettyでできるよ!

Jettyといえば、GAE/Jのプラグインなどで組み込みサーバーとして使われている、注目のPure Java軽量サーバーです。こいつを使います。

なにはともあれコード例を

JUnit4のテストケースから利用する例です。

public class TestCase {
	private static Server server;
		
	@BeforeClass
	public static void prepareServer() throws Exception {
		server = new Server(3000);
		server.addHandler(new AbstractHandler() {
			@Override
			public void handle(String target, HttpServletRequest request,
					HttpServletResponse response, int dispatch) throws IOException,
					ServletException {
				response.setContentType("text/html");
				response.setStatus(HttpServletResponse.SC_OK);
				response.getWriter().write("aaa");
				HttpConnection.getCurrentConnection().getRequest().setHandled(true); 
			}
		});
		server.start();
	}

	@AfterClass
	public static void closeServer() throws Exception {
		server.stop();
		server.destroy();
	}
}

超簡単!!

これだけで3000番でリクエストを待ち受け"aaa"という文字列を返すサーバーが出来上がってしまいました。
handleメソッドの引数targetにリクエストされたパスが入っているので、それに合わせて結果を変えるなんてことも出来ますよ。

Jettyの導入方法

最後にJettyの導入方法を。といっても説明することないくらい簡単です。

1.Jettyのページからライブラリを落としてくる。今回は、jetty-6.1.19.zipを使いました。
2.1を解凍したフォルダ/lib中の3つのjarファイルにクラスパスを通す。

以上です。簡単すぎますね。
H2と組み合わせてポータブルなWEBアプリを作っちゃったりとかいろいろ使い道ありそうですね。Jetty素敵です。