LoginSignup
0
2

More than 3 years have passed since last update.

WEBrickの使い方メモ

Last updated at Posted at 2019-11-04

前提

  • 前提: Ruby 2.6
実行方法
# 本記事全般的に↓だけ
> ruby xxx.rb

サンプル1

最も簡単な例。
アクセスするとNot Foundは返答される。

test1.rb
require 'webrick'

server = WEBrick::HTTPServer.new(BindAddres: '0.0.0.0', Port: 9292)
server.start

サンプル2

WEBrick::HTTPServer のコンストラクタのパラメータに DocumentRoot を追加。
Not Foundでは無いが、そのディレクトリ内の資材の一覧が表示される。
ちなみに同一ディレクトリに index.html があると index.html の中身が表示される。

test2.rb
require 'webrick'

srv = WEBrick::HTTPServer.new(
  DocumentRoot: './',
  BindAddress: "0.0.0.0",
  Port: 9292,
)

srv.start

サンプル3

WEBrick::HTTPServer インスタンスの mount メソッドを用いて特定のファイルを表示します。下記例では WEBrick::HTTPServlet::FileHandler クラスを用いています。 index2.html の中身が表示されます。
mount メソッドの第2引数はインスタンスではなくクラスのもよう。
https://docs.ruby-lang.org/ja/latest/class/WEBrick=3a=3aHTTPServer.html#I_MOUNT

つまり WEBrick::HTTPServer のインスタンスの mount メソッドの引数に WEBrick::HTTPServlet::AbstractServlet を継承したクラスを渡す。

test3.rb
require 'webrick'

srv = WEBrick::HTTPServer.new(
  DocumentRoot: './',
  BindAddress: "0.0.0.0",
  Port: 9292,
)

srv.mount('/', WEBrick::HTTPServlet::FileHandler, 'index2.html')
srv.start

サンプル4

自前のサーブレットを登録してみるサンプル。画面に do_get という文字列が表示される。

test4.rb
require 'webrick'

srv = WEBrick::HTTPServer.new(
  BindAddress: "0.0.0.0",
  Port: 9292,
)

class KureServlet < WEBrick::HTTPServlet::AbstractServlet
  def do_GET(req, res)
    res.body = "do_GET"
  end
end

srv.mount("/", KureServlet)
srv.start

サンプル5

自前のサーブレットをもう少し色々試したメモ。
コンストラクタをオーバーライドすると mount メソッドの第3引数で指定した内容を取得できる。
service メソッドをオーバーライドするとブラウザアクセス(http get)しても do_GET メソッドは呼び出されない。

test5.rb

require 'webrick'

srv = WEBrick::HTTPServer.new(
  DocumentRoot: './',
  BindAddress: "0.0.0.0",
  Port: 9292,
)

class KureServlet < WEBrick::HTTPServlet::AbstractServlet

  def initialize(server, name)
    super(server, name)

    p "server: #{server}, #{server.class}" # <WEBrick::HTTPServer:0xxxxxxxxxx>, WEBrick::HTTPServer
    p "name: #{name}" # mount の第3パラメータ
  end

  def service(req, res)
    res.body = "service"
    p "service"
  end

  def do_GET(req, res)
    res.body = "do_GET"
    p "do_GET"
  end
end

# 第3引数には、第2引数のクラスのコンストラクタに指定するパラメータを入力する
srv.mount("/", KureServlet, "mount third param")
srv.start

参考

WEBrickを使うためのメモ - 再帰の反復blog https://lemniscus.hatenablog.com/entry/20090722/1248261257#httpserverhandler

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2