Вы не даете много подробностей, но я думаю, что у вас есть сервлет для обслуживания файлов, которые вы будете обрабатывать с помощью erb, и по умолчанию веб-сервер обслуживает любой статический файл в общедоступном каталоге.
require 'webrick'
include WEBrick
require 'erb'
s = HTTPServer.new( :Port => 8080,:DocumentRoot => Dir::pwd + "/public" )
class MyServlet < HTTPServlet::AbstractServlet
def do_GET(req, response)
File.open('public/my.rhtml','r') do |f|
@template = ERB.new(f.read)
end
response.body = @template.result(binding)
response['Content-Type'] = "text/html"
end
end
s.mount("/my", MyServlet)
trap("INT"){
s.shutdown
}
s.start
Этот пример ограничен, когда вы переходите в / my, всегда обрабатывается один и тот же файл. Здесь вы должны построить путь к файлу на основе пути запроса. Здесь я сказал важное слово: «запрос», там есть все, что вам нужно.
Чтобы получить параметры заголовка HTTP, используйте req [header_name]. Чтобы получить параметры в строке запроса, используйте req.query [param_name]. req - это объект HTTPRequest, переданный сервлету.
Как только у вас есть нужный параметр, вы должны привязать его к шаблону. В этом примере мы передаем объект привязки от себя (привязка определена в ядре и представляет контекст, в котором выполняется код), поэтому каждая локальная переменная, определенная в методе do_GET, будет доступна в шаблоне. Однако вы можете создать свою собственную привязку, например, передав объект Proc и передавая его процессору ERB при вызове «result».
Все вместе, ваше решение будет выглядеть так:
def do_GET(req, response)
File.open('public/my.rhtml','r') do |f|
@template = ERB.new(f.read)
end
foo = req.query["foo"]
response.body = @template.result(binding)
response['Content-Type'] = "text/html"
end