Hi,

On 8/11/06, Naren <desijedi / gmail.com> 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 = "<head><title>My Page</title></head>"
>   def do_GET(req, res)
>     var1 = req.query['var1']
>     var2 = req.query['var2']
>     result = DoStuff.new( var1, var2 )
>     res.body = "<html>#{HEAD}<body><h2>My
> Page</h2>#{result}</body><html>"
>   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.