Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
AbstractServlet allows HTTP server modules to be reused across multiple servers and allows encapsulation of functionality.
By default a servlet will respond to GET, HEAD (through an alias to GET) and OPTIONS requests.
By default a new servlet is initialized for every request. A servlet instance can be reused by overriding ::get_instance in the AbstractServlet subclass.
class Simple < WEBrick::HTTPServlet::AbstractServlet def do_GET request, response status, content_type, body = do_stuff_with request response.status = status response['Content-Type'] = content_type response.body = body end def do_stuff_with request return 200, 'text/plain', 'you got a page' end end
This servlet can be mounted on a server at a given path:
server.mount '/simple', Simple
Servlets can be configured via initialize. The first argument is the HTTP server the servlet is being initialized for.
class Configureable < Simple def initialize server, color, size super server @color = color @size = size end def do_stuff_with request content = "<p " \ %q{style="color: #{@color}; font-size: #{@size}"} \ ">Hello, World!" return 200, "text/html", content end end
This servlet must be provided two arguments at mount time:
server.mount '/configurable', Configurable, 'red', '2em'
Factory for servlet instances that will handle a request from
server
using options
from the mount point. By
default a new servlet instance is created for every call.
# File webrick/httpservlet/abstract.rb, line 84 def self.get_instance(server, *options) self.new(server, *options) end
Initializes a new servlet for server
using
options
which are stored as-is in +@options+. +@logger+ is
also provided.
# File webrick/httpservlet/abstract.rb, line 92 def initialize(server, *options) @server = @config = server @logger = @server[:Logger] @options = options end
Raises a NotFound exception
# File webrick/httpservlet/abstract.rb, line 116 def do_GET(req, res) raise HTTPStatus::NotFound, "not found." end
Dispatches to #do_GET
# File webrick/httpservlet/abstract.rb, line 123 def do_HEAD(req, res) do_GET(req, res) end
Returns the allowed HTTP request methods
# File webrick/httpservlet/abstract.rb, line 130 def do_OPTIONS(req, res) m = self.methods.grep(/\Ado_([A-Z]+)\z/) {$1} m.sort! res["allow"] = m.join(",") end
Dispatches to a do_
method based on req
if such a
method is available. (do_GET
for a GET request). Raises a
MethodNotAllowed exception if the method is not implemented.
# File webrick/httpservlet/abstract.rb, line 103 def service(req, res) method_name = "do_" + req.request_method.gsub(/-/, "_") if respond_to?(method_name) __send__(method_name, req, res) else raise HTTPStatus::MethodNotAllowed, "unsupported method `#{req.request_method}'." end end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.