Feb 14, 2006
Jetty にチャレンジ
Jetty とは
Jetty はオープンソースの Servlet Engine。 Tomcat と同カテゴリのソフトウェア。 Servlet Engine なので当然 Servlet をディプロイすることも可能なのだけれど、 今回は Jetty そのものをアプリケーション内に取り込んでみる。 Servlet を登録するよりもコーディングは面倒になるが、色々融通が利くようになる。
- Jetty 公式サイト
- http://jetty.mortbay.org/jetty/index.html
Jetty の初期化 & 起動
まずは Jetty を初期化する。今回使用している Jetty のバージョンは 6.0 beta8。
InputStream is = null;
Server server = null;
try {
is = this.getClass().getResourceAsStream("/jetty.xml");
XmlConfiguration configuration = new XmlConfiguration(is);
Object obj = configuration.newInstance();
server = (Server) obj;
} finally {
if (is != null) {
is.close();
}
}
MyHandler myHandler = new MyHandler();
server.setHandler(myContextHandler);
server.start();
jetty.xml はこんな↓感じ。
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC
"-//Mort Bay Consulting//DTD Configure//EN"
"http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.mortbay.jetty.Server">
<Set name="ThreadPool">
<New class="org.mortbay.thread.BoundedThreadPool">
<Set name="minThreads">10</Set>
<Set name="maxThreads">100</Set>
</New>
</Set>
<Set name="connectors">
<Array type="org.mortbay.jetty.Connector">
<Item>
<New class="org.mortbay.jetty.nio.SelectChannelConnector">
<Set name="port">80</Set>
<Set name="maxIdleTime">50000</Set>
<Set name="Acceptors">10</Set>
</New>
</Item>
</Array>
</Set>
</Configure>
ハンドラの作成
リクエストを受け取ったときに実行されるハンドラを用意する。 但し、この時点では HttpSession は使えないので要注意。
public class MyHandler extends AbstractHandler {
public MyHandler() {
super();
}
public boolean handle(final String target,
final HttpServletRequest request,
final HttpServletResponse response, final int dispatch)
throws IOException, ServletException {
// TODO: ここで何か処理をする
}
}
HttpSession の準備
HttpSession を使う場合はもう少し面倒なコーディングが必要。 ハンドラを ContextHandler と SessionHandler でラッピングすると HttpSession が使用できるようになる。 ハンドラのの登録は jetty.xml を使って行っても良い。
SessionManager sessionManager = new HashSessionManager(new Random(
System.currentTimeMillis()));
sessionManager
.setMetaManager(new AbstractSessionManager.NullMetaManager());
MyHandler myHandler = new MyHandler();
SessionHandler sessionHandler = new SessionHandler();
sessionHandler.setHandler(myHandler);
sessionHandler.setSessionManager(sessionManager);
MyContextHandler myContextHandler = new MyContextHandler();
myContextHandler.setContextPath("/");
myContextHandler.setHandler(sessionHandler);
this.server.setHandler(myContextHandler);
TrackBack ping me at
http://www.in-vitro.jp/blog/index.cgi/Library/20060214_01.trackback
writeback message: Ready to post a comment.
