[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Multiple scripts accessing one WEBrick session?

Naren

8/11/2006 5:49:00 PM

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

2 Answers

Jano Svitok

8/12/2006 12:32:00 PM

0

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.

Naren

8/12/2006 3:04:00 PM

0


Thanks Jan, I am quite new with Ruby, so I am grateful for your example
code. In addition to answering my question, I also got some generally
Ruby programming style tips out of it. :) What I was hoping I could do
was to mount and unmount servlets independent of each other... while
the other ones were still up and running. Your current solution
(version 2) will work for now, cause I only have 3 or 4 servlets now.
But overall I think I might have around 20, then I would like to have
independent control. I guess I might look into other containers than
WEBrick at that time.

Thanks again.

Naren