2009-06-02 10 views
1

Je suis assez nouveau pour jruby et java et je veux créer une servlet en jruby tout en utilisant jetty comme serveur web. Je ne suis pas sûr si je suis sur la bonne voie avec le code suivant qui montre le formulaire d'entrée jusqu'à présent. Je suppose que je dois étendre maintenant la classe HttpServlet pour gérer les données publiées mais je ne sais pas comment faire dans ce cas et s'il est correct de le faire dans le même script.Comment créer une servlet avec jruby (avec jetty)?

require 'java' 

Dir["./jetty-6.1.18/lib/*jar"].each { |jar| require jar } 
Dir["./Java/lib/jsdk2.1/javax/*jar"].each { |jar| require jar } 

include_class 'javax.servlet.ServletException' 
include_class 'javax.servlet.http.HttpServlet' 
include_class 'javax.servlet.http.HttpServletRequest' 
include_class 'javax.servlet.http.HttpServletResponse' 

include_class 'org.mortbay.jetty.Server' 
include_class 'org.mortbay.jetty.handler.AbstractHandler' 
include_class 'org.mortbay.jetty.servlet.Context' 
include_class 'org.mortbay.jetty.servlet.ServletHolder' 

def main 
    handler = Handler.new 
    server = Server.new(8080) 
    server.setHandler(handler) 
    server.start() 
end 

class Handler < AbstractHandler 
    def handle(target, request, response, dispatch) 
    response.setContentType("text/html") 
    response.setStatus(HttpServletResponse::SC_OK) 
    response.getWriter().print('               
     <form action="RequestProcessing" method="post" enctype="multipart/form-data">    
     <p>Select a file:<br>              
     <input name="file" type="file" size="20" maxlength="1000" accept="text/*"> 
     </p>                    
     <input type="submit" value=" Send"/>            
     </form>') 
    request.setHandled(true) 
    end 
end 

class RequestProcessing < HttpServlet 
    # So what do we do here? 
end 

main 

Je serais reconnaissant pour tous les conseils. Merci d'avance!

Répondre

2

J'ai obtenu une aide extérieure et peut présenter une solution appropriée. Pour offrir une configuration complète mais simple, j'utilise un fichier html pour la saisie des données (mais cela pourrait être fait dans la jetée comme ci-dessus).

<?xml version="1.0" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>Data input</title> 
</head> 
<body> 
<form action="http://localhost:8080/" method="post"> 
    <textarea name="input" cols="4" rows="20"></textarea> 
    </p> 
    <input type="submit" value=" Send"/> 
</form> 
</body> 
</html> 

La partie JRuby est simple, prêter à confusion;):

require 'java' 

Dir["./Java/jetty-6.1.18/lib/*.jar"].each { |jar| require jar } 
Dir["./Java/lib/jsdk2.1/javax/*.jar"].each { |jar| require jar } 

include_class 'javax.servlet.http.HttpServlet' 
include_class 'org.mortbay.jetty.Server' 
include_class 'org.mortbay.jetty.servlet.Context' 
include_class 'org.mortbay.jetty.servlet.ServletHolder' 

def main 
    server = Server.new(8080) 
    context = Context.new(server, '/', 0) 
    servlet = TestServlet.new() 
    holder = ServletHolder.new(servlet) 
    context.addServlet(holder, '/') 
    server.start() 
end 

class TestServlet < HttpServlet 

    def doPost(request, response) 
    input = request.getParameter('input') 
    response.writer.println(" 
    <html> 
    <head><title>Output</title></head> 
    <body> 
    Raw input: <pre>#{input}</pre> 
    </body> 
    </html>") 
    request.handled = true 
    end 

end 

main 

Pour récolter les données envoyées via GET définissent simplement doGet de manière similaire.

0

Je suppose que vous travaillez à partir du document Embedding Jetty (depuis que vous avez démarré avec un gestionnaire).

Je voudrais (plutôt) vérifier plus bas ce document et suivre la section Démarrage rapide - Servlets. Dérivez votre propre servlet de HttpServlet et implémentez les méthodes doGet()/doPost(). Vous voudrez retourner le formulaire comme vous l'avez fait dans l'exemple ci-dessus.

Questions connexes