winstone とは
軽量サーブレットコンテナで、jarファイルのサイズ自体も非常に小さいです。開発時のJettyの代替として利用できるかと思います。Tiny Java Web Server なども候補に挙がりましたが、ちょっと使いまわしにくいところがあり、今回はwinstoneを紹介します。ダウンロードは以下から。
http://winstone.sourceforge.net/
通常版の winstone と、軽量版の winstone-lite がありますが、開発時利用では winstone-lite で十分です。通常版では、Apache との連携用にAJP13 がサポートされたり、認証レルムサポートが入っているみたいです。
プロジェクトの作成
プロジェクトページからwinstone-lite-0.9.10.jarをダウンロードしてクラスパスに追加します。winstoneはJSPエンジンを内蔵していないため、JSPを利用する場合は以下のjarが必要になります。適宜ダウンロードしてクラスパスに追加します。
- jasper-compiler.jar (tomcat5.5のcommon/libにある)
- jasper-runtime.jar (tomcat5.5のcommon/libにある)
- jsp-api.jar (tomcat5.5のcommon/libにある)
- ant.jar
- commons-logging-api.jar
- commons-el.jar
- tools.jar (jdkのlibにある)
eclipseプロジェクト直下にwar/WEB-INF/classesとフォルダを作成し、ビルドパスにて出力フォルダをここに設定します。続いてweb.xmlを作成しておきます。
war/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
winstone起動クラスの作成
winstone起動用クラスを作成します。
import java.util.HashMap; import java.util.Map; import winstone.Launcher; public class WebApp { public static void main(String... args) throws Exception { Map<String, String> prop = new HashMap<String, String>(); prop.put("webroot", "war"); prop.put("httpPort", "8080"); prop.put("useJasper", "true"); Launcher.initLogger(prop); final Launcher winstone = new Launcher(prop); Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { public void run() { winstone.shutdown(); } })); } }
基本的にプロパティをマップで設定してポンです。addShutdownHookで終了時の処理を追加しています。
JSPの作成
まずは、JSPを作成して表示してみましょう。warフォルダの直下に以下のindex.jspを作成します。
<html> <head><title>Winston Index</title></head> <body> <h1>Wellcome Winston Server</h1> </body> </html>
サーバの起動
WebAppを実行して、ブラウザから以下のURLでアクセスして画面が表示されればOKです。
http://localhost:8080/index.jsp
サーブレットの作成
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > <servlet> <servlet-name>hello</servlet-name> <servlet-class>etc9.HelloServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
作成するサーブレットは以下の通り。
public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println("<h1>Hello SimpleServlet</h1>"); response.getWriter().println("session="+request.getSession(true).getId()); } }
サーブレットの実行
先ほどと同様にWebAppを実行して、ブラウザから以下のURLでアクセスして確認できます。
http://localhost:8080/hello