2009-06-02 49 views
1

我对jruby和java相当陌生,并且希望在使用jetty作为web服务器时在jruby中创建一个servlet。我不确定我是否正确地使用下面的代码来显示输入表单。我想我现在必须扩展HttpServlet类来处理发布的数据,但我不知道如何在这种情况下执行此操作,并且如果可以在同一个脚本中执行此操作。如何使用jruby(使用jetty运行)创建一个servlet?

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的部分是混淆的简单;):

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 

为了收获这是通过GET发送的数据简单地以类似的方式定义的doGet。

0

我猜你正在从Embedding Jetty文档开始工作(因为你已经开始使用处理程序)。

我会(相反)检查该文档,并按照快速入门 - Servlets部分。从HttpServlet衍生自己的servlet并实施doGet()/doPost()方法。您将希望像上面的例子那样返回表单。

相关问题