`

Ruby写Servlet的小例子

阅读更多

    Ruby也能写servlet?是的,没开玩笑,而且挺方便的,因为Ruby的标准库就自带了一个webrick,webrick本身又有一个serlvet容器,随时随地启动一个web server,实在是很方便。
    先看个最简单的例子,输出hello到浏览器:

require 'webrick'
require 'net/http'
include WEBrick

class HelloServlet < HTTPServlet::AbstractServlet
  def hello(resp)
    resp["Content-Type"]="text/html;charset=utf-8"
    resp.body="hello,ruby servlet"
  end
  private :hello
  def do_GET(req,resp)
    hello(resp)
  end
  def do_POST(req,resp)
    hello(resp)
  end
end
if $0==__FILE__
  server=HTTPServer.new(:Port=>3000)
  server.mount("/hello",HelloServlet)
  trap("INT"){ server.shutdown }
  server.start
end
 

    是不是跟java很像?所有的serlvet都要继承自HTTPServlet::AbstractServlet,并实现do_GET或者do_POST方法。在这行代码:

 

server=HTTPServer.new(:Port=>3000)


    我们启动了一个HTTP Server,端口是3000,然后将HelloServlet挂载到/hello这个路径上,因此,执行这个脚本后,可以通过 http://localhost:3000/hello调用HelloServlet,简单地只是显示字符串" hello,ruby servlet "。
   
这 个简单的例子没有任何交互,并且显示的html也是写死在脚本中,显然更好的方式应该通过模板来提供,可以使用Ruby标准库的erb模板。再给个有简单 交互的例子,现在要求用户输入姓名,然后提交给HelloServlet,显示"hello,某某某"。嗯,来个最简单的提交页面:

 

<html>
<body>
<center>
   <form action="http://localhost:3000/hello" method="post">
     <input type="text" name="name" size=10/><br/><br/>
     <input type="submit" name="submit" value="submit"/>
   </form>
   </center>
</body>
</html>
 


    注意到,我们采用POST方法提交。再看看erb模板:

<html>
    <head></head>
    <body>
      hello,<%=name%>
    </body>
</html>
 

    其中的name是我们将要绑定的变量,根据用户提交的参数。最后,修改下HelloServlet:

require 'webrick'
require 'net/http'
include WEBrick

class HelloServlet < HTTPServlet::AbstractServlet
  def do_GET(req,resp)
    do_POST(req,resp)
  end
  def do_POST(req,resp)
    name=req.query["name"]
    #读取模板文件
    template=IO.read(File.dirname(__FILE__)+"/hello.html")
    message=ERB.new(template)
    resp["Content-Type"]="text/html;charset=utf-8"
    resp.body=message.result(binding)
  end
end
if $0==__FILE__
  server=HTTPServer.new(:Port=>3000)
  server.mount("/hello",HelloServlet)
  trap("INT"){ server.shutdown }
  server.start
end
 

    与前一个例子相比,不同点有二,一是通过req.query[ " name " ]获得用户提交的参数name,二是resp的body是由模板产生,而不是写死在代码中。 在一些临时报表、临时数据的展示上,可以充分利用Ruby的这些标准库来快速实现。

6
1
分享到:
评论

相关推荐

    Servlet与JSP核心编程第二版第一卷英文 Core Servlets and JavaServer Pages(Volume.1 .2nd.Edition)

    该书涵盖了Java编程、初级/中级Servlet与JSP、高级Servlet与JSP、Struts、JSF/MyFaces、Ajax、GWT、Ruby/Rails等多方面的内容,并可根据组织需求进行定制化培训。 #### 二、Servlet技术概览 ##### 2.1 Servlet的...

    Ajax基础教程(扫描版)

    本书中所有例子的代码都可以从apmss网站本书主页的源代码(source code)免费得到。.  本书适合各层次web应用开发人员和网页设计人员阅读。  2005年,在web 2.0热潮中,ajax横空出世,迅速成为最炙手可热的web开发...

    Android教程之用_HTML_5_构建_Web_应用程序(二)

    例如,在上面的例子中,iPhone 3.1.3和Android 2.1都支持地理位置检测,而Android 1.6则不支持。 ### 清单5:Foursquare代理servlet 由于同源策略的限制,Web应用无法直接调用第三方API,如Foursquare API。为了...

    scalatra-scalatest_2.10-2.0.4.zip

    Scalatra的设计灵感来源于Sinatra,一个用Ruby编写的微框架,其核心理念是简洁和高效。在Scalatra中,你可以通过定义路由来处理HTTP请求,这些路由通常与特定的HTTP方法(如GET、POST)和URL路径相对应。例如,你...

    Maven权威指南 很精典的学习教程,比ANT更好用

    添加一个简单的Servlet 5.6. 添加J2EE依赖 5.7. 小结 6. 一个多模块项目 6.1. 简介 6.1.1. 下载本章样例 6.2. simple-parent 项目 6.3. simple-weather 模块 6.4. simple-webapp 模块 6.5. 构建这个多...

    egov-buildpack-v2.5

    它旨在运行许多基于 JVM 的应用程序( 、 、Java Main、 、 和 Servlet),无需额外配置,但支持标准组件的配置,以及添加自定义组件的扩展。 这个 buildpack 已经被定制为使用 JBoss 应用服务器。 标准Java ...

    疯狂JAVA讲义

    1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的运行机制和JVM 6 1.4 开发Java的准备 7 1.4.1 安装JDK 8 学生提问:不是说JVM是...

    stripes入门

    与传统 Java Web 框架相比,Stripes 采用了更为简洁的方法论,借鉴了 Ruby on Rails 的设计理念,为 Java 开发者提供了类似于 RoR 的简单性和高效性。 #### 一、Stripes 的设计理念 传统的 Java Web 开发通常会...

    java-buildpack:用于运行Java应用程序的Cloud Foundry buildpack

    它旨在运行许多基于JVM的应用程序( , ,Java Main, , 和Servlet),而无需其他配置,但支持标准组件的配置以及添加自定义组件的扩展。 用法 要使用此buildpack,在将应用程序推送到Cloud Foundry时指定存储库的...

Global site tag (gtag.js) - Google Analytics