Class: WEBrick::HTTPServlet::AbstractServlet (Ruby 2.4.2)
Description: Class : WEBrick::HTTPServlet::AbstractServlet - Ruby 2.4.2

Support for the Ruby 2.4 series has ended. See here for reference.

### Home Classes Methods

### In Files

- webrick/httpservlet/abstract.rb

### Parent

Object

### Methods

- ::get_instance
- ::new
- #do_GET
- #do_HEAD
- #do_OPTIONS
- #service

### Class/Module Index

Quicksearch

- Errno
- Errno::ECONNABORTED
- Errno::ECONNRESET
- Errno::EPROTO
- Object
- WEBrick
- WEBrick::AccessLog
- WEBrick::AccessLog::AccessLogError
- WEBrick::BasicLog
- WEBrick::CGI
- WEBrick::Config
- WEBrick::Cookie
- WEBrick::Daemon
- WEBrick::GenericServer
- WEBrick::HTMLUtils
- WEBrick::HTTPAuth
- WEBrick::HTTPAuth::Authenticator
- WEBrick::HTTPAuth::BasicAuth
- WEBrick::HTTPAuth::DigestAuth
- WEBrick::HTTPAuth::Htdigest
- WEBrick::HTTPAuth::Htgroup
- WEBrick::HTTPAuth::Htpasswd
- WEBrick::HTTPAuth::ProxyAuthenticator
- WEBrick::HTTPAuth::ProxyBasicAuth
- WEBrick::HTTPAuth::ProxyDigestAuth
- WEBrick::HTTPAuth::UserDB
- WEBrick::HTTPProxyServer
- WEBrick::HTTPRequest
- WEBrick::HTTPResponse
- WEBrick::HTTPServer
- WEBrick::HTTPServerError
- WEBrick::HTTPServlet
- WEBrick::HTTPServlet::AbstractServlet
- WEBrick::HTTPServlet::CGIHandler
- WEBrick::HTTPServlet::DefaultFileHandler
- WEBrick::HTTPServlet::ERBHandler
- WEBrick::HTTPServlet::FileHandler
- WEBrick::HTTPServlet::HTTPServletError
- WEBrick::HTTPServlet::ProcHandler
- WEBrick::HTTPStatus
- WEBrick::HTTPStatus::ClientError
- WEBrick::HTTPStatus::EOFError
- WEBrick::HTTPStatus::Error
- WEBrick::HTTPStatus::Info
- WEBrick::HTTPStatus::Redirect
- WEBrick::HTTPStatus::ServerError
- WEBrick::HTTPStatus::Status
- WEBrick::HTTPStatus::Success
- WEBrick::HTTPUtils
- WEBrick::HTTPUtils::FormData
- WEBrick::HTTPVersion
- WEBrick::Log
- WEBrick::ServerError
- WEBrick::SimpleServer
- WEBrick::Utils
- WEBrick::Utils::TimeoutHandler

No matching classes.

# WEBrick::HTTPServlet::AbstractServlet

`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.

## A Simple Servlet¶ ↑

    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

## Servlet Configuration¶ ↑

Servlets can be configured via initialize. The first argument is the HTTP server the servlet is being initialized for.

    class Configurable < 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'

### Public Class Methods

get_instance(server, *options) click to toggle source

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 85
    def self.get_instance(server, *options)
      self.new(server, *options)
    end

new(server, *options) click to toggle source

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 93
    def initialize(server, *options)
      @server = @config = server
      @logger = @server[:Logger]
      @options = options
    end

### Public Instance Methods

do_GET(req, res) click to toggle source

Raises a NotFound exception

                   # File webrick/httpservlet/abstract.rb, line 117
    def do_GET(req, res)
      raise HTTPStatus::NotFound, "not found."
    end

do_HEAD(req, res) click to toggle source

Dispatches to `do_GET`

                   # File webrick/httpservlet/abstract.rb, line 124
    def do_HEAD(req, res)
      do_GET(req, res)
    end

do_OPTIONS(req, res) click to toggle source

Returns the allowed HTTP request methods

                   # File webrick/httpservlet/abstract.rb, line 131
    def do_OPTIONS(req, res)
      m = self.methods.grep(/\Ado_([A-Z]+)\z/) {$1}
      m.sort!
      res["allow"] = m.join(",")
    end

service(req, res) click to toggle source

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 104
    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