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すごく昔のコメントに今更気づきました。
反応がおくれて申し訳ないです。

お役に立てて光栄です。

DreSofeDreSofe2018/02/18 08:04Which Is Better Cipro Or Amoxicillin Canada Rx 24 <a href=http://cialviag.com>cialis</a> Secure isotretinoin best buy fedex

aviwirjevmosaviwirjevmos2018/03/01 11:30http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

ufakamuviduufakamuvidu2018/03/01 11:46http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

ingogateqingogateq2018/03/01 11:57http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

ipaleavaipaleava2018/03/01 12:04http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

tegohohtegohoh2018/03/01 12:10http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

ilibipiilibipi2018/03/01 12:13http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

ovuxapbaovuxapba2018/03/01 12:19http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

oiwerinuxoiwerinux2018/03/01 12:19http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

elexufihaelexufiha2018/03/01 12:31http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

ukoyoozetkiceukoyoozetkice2018/03/01 12:47http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

ojefxepedurojefxepedur2018/03/01 13:21http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

nizoxavunizoxavu2018/03/01 13:34http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

urvgegiizeurvgegiize2018/03/01 13:51http://levitra-20mg-priceof.online/ - levitra-20mg-priceof.online.ankor <a href="http://pricespharmacy-canadian.online/">pricespharmacy-canadian.online.ankor</a> http://buy-amoxicillin-amoxil.online/

DiaobjeteDiaobjete2018/04/17 03:29Acheter Misoprostol En Ligne Moin Cher <a href=http://cialiorder.com>cialis 20mg price at walmart</a> Tretinoin 20 20 Gm From India Achat Lasix Amoxicillin 500 Dosage

DiaobjeteDiaobjete2018/04/30 21:09Vrikshamla Venta De Viagra En Concepcion <a href=http://ciali5mg.com>generic 5mg cialis best price</a> Buy Ganeric Viagra Online

DerekDizDerekDiz2018/05/30 15:48dating <a href= http://dynabucks.ru/ > online </a> here "http://brightbucks.ru/" - dating site http://gabset.ru/