From: Jan Svitok Date: 2006-08-12T21:32:21+09:00 Subject: Re: Multiple scripts accessing one WEBrick session? Hi, On 8/11/06, Naren wrote: > I want to set up a a machine as a servlet container using WEBrick. But > I want to be able to add several servlets, hopefully from separate Ruby > scripts. So here is the sample to start one servlet right, > > ==================== > require "webrick" > > server = WEBrick::HTTPServer.new(:Port => 8080, :DocumentRoot => > "C:\\WWW") > trap("INT") {server.shutdown} > > class Servlet_A < WEBrick::HTTPServlet::AbstractServlet > HEAD = "My Page" > def do_GET(req, res) > var1 = req.query['var1'] > var2 = req.query['var2'] > result = DoStuff.new( var1, var2 ) > res.body = "#{HEAD}

My > Page

#{result}" > end > end > > server.mount("/pl", PLServlet) > server.start > ===================== > > Now I want to have another script that will have the implementation for > Servlet_B. But I want to mount that on the same server. > > Any ideas on how to do that? Can it be done? > > TIA > Naren For one-file version: Just add your servlets and respective server.mount(url, servlet) linesto the script. For more file: version 1: create files per servlet, and require them into main script (that will still contain those mount lines) version 2: file "base_servlet.rb": require 'webrick' class MyBaseServlet < WEBrick::HTTPServlet::AbstractServlet class << self attr_accessor :url end end for each servlet: require 'base_servlet' class ServletA < BaseServlet self.url ='/pl' ... the rest of the code end file 'server.rb' require "webrick" #(1) server = WEBrick::HTTPServer.new(:Port => 8080, :DocumentRoot => "C:\\WWW") trap("INT") {server.shutdown} ObjectSpace.each_object(Class) do |servlet| server.mount(servlet.url, servlet) if servlet < BaseServlet end server.start and either require all the servlets at (1) or start the server with ruby -rservlet_a -rservlet_b ... server.rb J.