【问题标题】:How can I create a servlet with jruby (running with jetty)?如何使用 jruby(使用码头运行)创建 servlet?
【发布时间】:2010-10-30 17:18:57
【问题描述】:

我对 jruby 和 java 还很陌生,想在 jruby 中创建一个 servlet,同时使用 jetty 作为 Web 服务器。我不确定我是否走在正确的道路上,下面的代码显示了到目前为止的输入表单。我想我现在必须扩展 HttpServlet 类来处理发布的数据,但我不知道在这种情况下如何执行此操作,以及是否可以在同一个脚本中执行此操作。

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

我会感谢任何提示。非常感谢!

【问题讨论】:

    标签: java servlets jetty jruby


    【解决方案1】:

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

    我会(相反)进一步检查该文档并遵循 快速入门 - Servlets 部分。从HttpServlet 派生您自己的servlet 并实现doGet()/doPost() 方法。您将希望像在上面的示例中那样返回表单。

    【讨论】:

      【解决方案2】:

      我知道这并不能真正回答您的问题,但在 (J)Ruby-land 中,我们倾向于使用 mongrel 或 webrick 而不是 jetty。

      http://mongrel.rubyforge.org/web/mongrel/files/README.html

      http://www.webrick.org/

      【讨论】:

      • 感谢您的提示,但在这种情况下我必须使用码头。
      【解决方案3】:

      我得到了一些外部帮助,可以提出适当的解决方案。为了提供一个完整而简单的设置,我使用一个 html 文件作为数据输入(但这可以像上面那样在码头中完成)。

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

      【讨论】:

        猜你喜欢
        • 2020-08-19
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        • 1970-01-01
        • 2011-07-28
        • 2012-09-21
        • 1970-01-01
        • 2013-06-20
        相关资源
        最近更新 更多