Vous ne donnez pas beaucoup de détails, mais je suppose que vous avez un servlet pour servir les fichiers que vous traitera avec erb, et par défaut, le serveur Web sert un fichier statique dans un répertoire public.
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
Cet exemple est limité, lorsque vous allez dans/mon toujours le même fichier est traité. Ici, vous devez construire le chemin du fichier en fonction du chemin de la requête. Ici, j'ai dit un mot important: "demande", tout ce dont vous avez besoin est là.
Pour obtenir les paramètres d'en-tête HTTP, utilisez req [header_name]. Pour obtenir les paramètres dans la chaîne de requête, utilisez req.query [nom_param]. req est l'objet HTTPRequest transmis au servlet.
Une fois que vous avez le paramètre dont vous avez besoin, vous devez lier au modèle. Dans l'exemple, nous passons l'objet de liaison de self (la liaison est définie dans le noyau et représente le contexte d'exécution du code), de sorte que chaque variable locale définie dans la méthode do_GET sera disponible dans le modèle. Cependant, vous pouvez créer votre propre liaison en passant par exemple un objet Proc et le transmettre au processeur ERB en appelant 'result'.
Tout ensemble, votre solution ressemblerait à ceci:
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
@SztupY: Eh bien, votre réponse m'a conduit à la solution véritable. Voir ci-dessous. – cibercitizen1