Hatena::Grouprubyist

irykazeの日記 このページをアンテナに追加 RSSフィード

2007-09-22RubyでServletを作る

[][]RubyServletを作る (HTTPServlet::AbastractServletの使用例) RubyでServletを作る (HTTPServlet::AbastractServletの使用例) - irykazeの日記 を含むブックマーク はてなブックマーク - RubyでServletを作る (HTTPServlet::AbastractServletの使用例) - irykazeの日記 RubyでServletを作る (HTTPServlet::AbastractServletの使用例) - irykazeの日記 のブックマークコメント

Rubyでもサーブレットが作れる、ということを知ったので、早速試してみた。Javaサーブレットとおんなじ感じ。でも、コードがすっきりしてる。

Rubyサーブレットを使うってことで、わかりやすくtnomuraさんが説明していたで、引用させてもらう。(リンク先の最後尾のところ)

サーブレットを作成するためには、HTTPServlet::AbastractServlet クラスから、サーブレット HelloServlet を導出して、そのクラスに do_GET のようにリクエストの名前に関連したメソッドを定義します。

それからサーバオブジェクト s の mount メソッドを使って、URIサーブレットクラスを登録すると、ブラウザからの GET リクエストにたいして do_GET メソッドが実行されます。

この説明には、サーブレットのサンプルコードがついていた。勉強のため、これを改造。

ということで、以下、その改造したサンプルコード。


#!/usr/bin/ruby

# servlet.rb  サーブレットのサンプル

require 'webrick'
include WEBrick
s = HTTPServer.new( :Port => 8080 )
class HelloServlet < HTTPServlet::AbstractServlet
  def do_GET(req, res)
    body =<<HTML
<HTML>
hello, world.<br>
<form method="POST" action="hello">
INPUT:<input type="text" name="input">
<input type="submit" value="send">
</form>
</HTML>
HTML
    res.body = body
    res['Content-Type'] = 'text/html'
  end
  def do_POST(req, res)
    res.body = "<HTML>INPUT : #{req.query["input"]}<br></HTML>"
    res['Content-Type'] = 'text/html'
  end
end
s.mount('/hello', HelloServlet)
trap('INT'){ s.shutdown }
s.start

ちなみに、Servletのdo_GETメソッドの引数の型が、WEBrick::HTTPServlet::AbstractServletには書いてなかったので補足。

reqとresは、それぞれWEBrick::HTTPRequestオブジェクトWEBrick::HTTPResponseオブジェクトなんだそうな。


念のため、サンプルプログラムの使い方について。

使い方は、まず上記の servlet.rb を保存。「ruby servlet.rb」でサーバを実行したら、http://localhost:8080/helloアクセスする。フォームに文字列を入力し、sendボタンを押すと、入力した文字列が表示される。

GananGanan2007/11/22 19:57大変分かり易い例をありがとうございました!
助かりました。

irykazeirykaze2011/05/21 15:04すごく昔のコメントに今更気づきました。
反応がおくれて申し訳ないです。

お役に立てて光栄です。