2009-06-02 10 views
1

私はjrubyとjavaにはかなり新しく、jettyをWebサーバーとして使用している間にjrubyでサーブレットを作成したいと考えています。これまで入力フォームを示している次のコードで正しく動作しているかどうかはわかりません。投稿されたデータを処理するためにHttpServletクラスを拡張しなければならないと思いますが、この場合にこれを行う方法はわかりませんし、同じスクリプトでこれを行うのは大丈夫です。jruby(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 

私はどんなヒントにも感謝します。事前に多くの感謝!

答えて

2

私はいくつかの外部の助けを得て、適切な解決策を提示することができます。完全でシンプルなセットアップを提供するために、私はデータ入力用にhtmlファイルを使用します(しかしこれは上記のようにjettyで行うことができます)。

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

JRubyの一部が紛らわしい単純である。):単に同様にdoGetメソッドを定義GETを介して送信された収穫データに

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 

0

Embedding Jetty文書から作業していると思います(ハンドラを使い始めているので)。

私は(その代わりに)その文書をさらにチェックして、クイックスタート - サーブレットセクションに従ってください。 HttpServletから独自のサーブレットを派生させ、doGet()/doPost()メソッドを実装します。上記の例のように、フォームを返す必要があります。

関連する問題