WEBrickをちょこっとだけ触ってみる

デバッグ用にちょっとしたWebサーバを作ってみたくなったので,WEBrickを触ってみた.

#!/usr/local/bin/ruby
require 'webrick'
require 'pp'

class MyServlet < WEBrick::HTTPServlet::AbstractServlet
  # Process GET Request
  #
  # _req_:: WEBrick::HTTPRequest
  # _res_:: WEBrick::HTTPResponse
  # returns:: WEBrick::HTTPResponse
  def do_GET(req, res)
    res['Content-Type'] = 'text/html; charset=utf-8'
    you = req.query['name'] || 'you'
    greeting = {'morning' => 'Good morning',
                'evening' => 'Good evening' }[req.query['time']] ||
               'Hello'
    res.body = "<html><body><p>#{greeting}, #{you}!</p></body></html>\n"
    return res
  end
end

srv = WEBrick::HTTPServer.new(:BindAddress => '127.0.0.1',
                              :Port => 10080 )
['INT', 'TERM'].each do |signal|
  trap(signal) { srv.shutdown }
end
srv.mount('/app', MyServlet)
srv.start

たったこれだけのコードで,localhost:10080上でWebサーバが起動した.こりゃおもしろい.何より,わかりやすい所がいい.AbstractServletを継承したクラスを作って,扱いたいHTTPリクエストのメソッドを処理する関数(do_GETとかdo_HEADとか)を定義して,WEBrick::HTTPServer#mountするだけ.シンプルで良い.

難点は,セッション管理とか細かい所の面倒を見てくれない所かな.探せばライブラリあるんだろうか.