Jano Svitok
8/12/2006 12:32:00 PM
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.