サーブレットの抽象クラスです。実装は AbstractServlet のサブクラスで行います。
サーブレットは以下のように使われます。WEBrick::HTTPServlet::CGIHandler は webrick/httpservlet/cgihandler で提供されているサーブレットです。 CGIHandler は AbstractServlet のサブクラスです。
require 'webrick' srv = WEBrick::HTTPServer.new({ :DocumentRoot => './', :BindAddress => '127.0.0.1', :Port => 20080}) srv.mount('/view.cgi', WEBrick::HTTPServlet::CGIHandler, 'view.rb') trap("INT"){ srv.shutdown } srv.start
上のスクリプトでは以下のような流れで view.rb は実行されます。
このように WEBrick では Web サーバの機能の大部分がサーブレットの形で提供されています。またサーブレットを作成することにより新たな機能を Web サーバに追加することもできます。
get_instance(server, *options) -> WEBrick::HTTPServlet::AbstractServlet
[permalink][rdoc]new(server, *options) を呼び出してサーブレットを生成して返します。 WEBrick::HTTPServer オブジェクトは実際にはこの get_instance メソッドを呼び出してサーブレットを生成します。
特に理由が無い限り AbstractServlet のサブクラスがこのメソッドを再定義する必要はありません。
new(server, *options) -> WEBrick::HTTPServlet::AbstractServlet
[permalink][rdoc]サーブレットを生成して返します。 WEBrick::HTTPServer オブジェクトは server に自身を指定してサーブレットを生成します。
do_GET(request, response) -> ()
[permalink][rdoc]do_HEAD(request, response) -> ()
do_POST(request, response) -> ()
do_PUT(request, response) -> ()
do_DELETE(request, response) -> ()
do_OPTIONS(request, response) -> ()
自身の service メソッドから HTTP のリクエストに応じて呼ばれるメソッドです。AbstractServlet のサブクラスはこれらのメソッドを適切に実装しなければいけません。返り値は特に規定されていません。
クライアントが使う可能性のある RFC で定義された HTTP のメソッドはすべて実装する必要があります。クライアントからのリクエストに使われないと分かっているメソッドは実装しなくてもかまいません。実装されていない HTTP メソッドであった場合、自身の service メソッドが例外を発生させます。
このメソッドが呼ばれた時点では、クライアントからのリクエストに含まれる Entity Body の読み込みはまだ行われていません。WEBrick::HTTPRequest#query, WEBrick::HTTPRequest#body などのメソッドが読ばれた時点で読み込みが行われます。クライアントから巨大なデータが送られてくることを考慮してユーザはプログラミングを行うべきです。
例:
require 'webrick' class HogeServlet < WEBrick::HTTPServlet::AbstractServlet def do_GET(req, res) res.body = 'hoge' end end srv = WEBrick::HTTPServer.new({ :DocumentRoot => './', :BindAddress => '127.0.0.1', :Port => 20080}) srv.mount('/', HogeServlet) trap("INT"){ srv.shutdown } srv.start
service(request, response) -> ()
[permalink][rdoc]指定された WEBrick::HTTPRequest オブジェクト request の WEBrick::HTTPRequest#request_method に応じて、自身の do_GET, do_HEAD, do_POST, do_OPTIONS... いずれかのメソッドを request と response を引数として呼びます。
WEBrick::HTTPServer オブジェクトはクライアントからのリクエストがあるたびにサーブレットオブジェクトを生成し service メソッドを呼びます。
特に理由が無い限り AbstractServlet のサブクラスがこのメソッドを定義する必要はありません。