前提
- 前提: Ruby 2.6
# 本記事全般的に↓だけ
> ruby xxx.rb
サンプル1
最も簡単な例。
アクセスするとNot Foundは返答される。
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
の中身が表示される。
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
を継承したクラスを渡す。
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
という文字列が表示される。
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
メソッドは呼び出されない。
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