Как я могу создать сервлет с Jruby (работает с Jetty)? - PullRequest
1 голос
/ 02 июня 2009

Я довольно новичок в jruby и java и хочу создать сервлет в jruby, используя Jetty в качестве веб-сервера. Я не уверен, что нахожусь на правильном пути со следующим кодом, который пока показывает форму ввода. Я полагаю, что теперь мне нужно расширить класс 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

Буду благодарен за любые подсказки. Большое спасибо заранее!

Ответы [ 3 ]

2 голосов
/ 16 июня 2009

Я получил внешнюю помощь и могу предложить правильное решение. Чтобы предложить полную, но простую настройку, я использую 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 до смешного проста;):

<code>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}
") request.handled = true конец конец главный

Чтобы собрать данные, которые были отправлены через GET, просто определите doGet аналогичным образом.

0 голосов
/ 03 июня 2009

Я знаю, что на самом деле это не ответ на ваш вопрос, но в (J) Ruby-land мы обычно используем дворняжку или вебрик вместо причала.

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

http://www.webrick.org/

0 голосов
/ 02 июня 2009

Я предполагаю, что вы работаете с документом Embedded Jetty (так как вы начали с обработчика).

Я бы (вместо этого) проверил этот документ дальше и следовал бы разделу Быстрый старт - Сервлеты . Получите свой собственный сервлет из HttpServlet и реализуйте методы doGet()/doPost(). Вы захотите вернуть форму, как вы это делали в приведенном выше примере.

...