2009年1月3日土曜日

WEBrick::HTTPServlet::CGIHandlerを使ってみました。

こんにちは、モリモルです。

WEBrickでCGIを動かしてみます。
使い方は、以前の自作サーブレットと同じような感じで、

HTTPServer#mount("URL", HTTPServlet::CGIHandler, "Rubyスクリプトへのパス")

第一引数のURLにアクセスがあるたびに、
第二引数のインスタンスを生成して、HTTPServlet::AbstractServlet#serviceを呼び出すようです。
第三引数のRubyスクリプトはHTTPServlet::CGIHandlerのコンストラクタに引数として渡されます。


では、簡単なCGIを作ってアクセスしてみます。
/var2/www/cgi/foo.rb

1 #!/usr/local/bin/ruby
2
3 require 'cgi'
4
5 cgi = CGI.new
6 print cgi.header({"type" => "text/html", "status" => "OK"})
7 print DATA.read
8
9 __END__
10 <html>
11 <body>
12 <h1>foo.rb</h1>
13 </body>
14 </html>


server.rb

1 #! /usr/local/bin/ruby
2 require 'webrick'
3 include WEBrick
4
5 server = HTTPServer.new(
6 :DocumentRoot => "/var2/www/html",
7 :Port => 20080,
8 :BindAddress => "myhost")
9
10
11 server.mount("/cgi", HTTPServlet::CGIHandler, "/var2/www/cgi/foo.rb")
12
13 trap("INT"){server.stop}
14
15 server.start


ブラウザから“http://192.168.91.128:20080/cgi”にアクセスしてみます。


表示されましたね。