java - 如何使用 jruby 创建 servlet(使用 jetty 运行)?

标签 java servlets jetty jruby

我对 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

如果有任何提示,我将不胜感激。非常感谢!

最佳答案

我得到了一些外部帮助并且可以提出正确的解决方案。为了提供完整但简单的设置,我使用 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

要获取通过 G​​ET 发送的数据,只需以类似的方式定义 doGet 即可。

关于java - 如何使用 jruby 创建 servlet(使用 jetty 运行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/940143/

相关文章:

java - ChartJS "Unable to get property ' getTime' 未定义或空引用”

java - Mockito Spy - 在调用构造函数之前 stub

java - Spring 启动执行器不工作

maven - 如何使用 jetty-maven-plugin 9.x 将目录添加到类路径?

java - 如何重写 HttpServletRequest toString 方法?

jetty - 优化 Jetty 以实现数千台机器的心跳检测?

java - 2015 年 6 月 30 日闰秒期间在 Amazon Linux AMI 上运行的日历操作

Java try catch block

java - 在 OSGi 中配置 servlet 的身份验证

MySQL 查询错误,查询无法正常工作