2009-06-02 5 views
1

Ich bin ziemlich neu in jruby und Java und will ein Servlet in jruby erstellen, während als Web-Server mit Steg. Ich bin mir nicht sicher, ob ich mit dem folgenden Code auf dem richtigen Weg bin, der das Eingabeformular bisher zeigt. Ich glaube, ich jetzt die HttpServlet Klasse zu erweitern habe die gebuchten Daten zu handhaben, aber ich weiß nicht, wie dies in diesem Fall zu tun und ob es in Ordnung ist dies im selben Skript zu tun.Wie kann ich ein Servlet mit jruby (läuft mit Steg) erstellen?

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 

Ich wäre dankbar für Hinweise. Vielen Dank im Voraus!

Antwort

2

Ich habe einige externe Hilfe und eine richtige Lösung präsentieren. Um eine komplette, aber einfache Einrichtung zu bieten, benutze ich eine HTML-Datei für die Dateneingabe (aber dies könnte in Jetty wie oben getan werden).

<?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> 

Der jruby Teil ist verwechslungs einfach;):

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 

Daten zu ernten, die über GET gesendet wurde einfach doGet in ähnlicher Weise definiert werden.

0

Ich vermute, Sie arbeiten aus dem Embedding Jetty Dokument (da Sie mit einem Handler gestartet haben).

Ich würde (stattdessen) überprüfen Sie weiter unten in diesem Dokument und folgen Sie der Quick Start - Servlets Abschnitt. Leiten Sie Ihr eigenes Servlet von HttpServlet und implementieren die doGet()/doPost() Methoden. Sie möchten das Formular wie im obigen Beispiel zurückgeben.