`
yangzb
  • 浏览: 3491810 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ruby也能写servlet

    博客分类:
  • Ruby
阅读更多

  出处/blogjava

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

  1. require 'webrick'
  2. require 'net/http'
  3. include WEBrick

  4. class HelloServlet < HTTPServlet::AbstractServlet
  5.   def hello(resp)
  6.     resp["Content-Type"]="text/html;charset=utf-8"
  7.     resp.body="hello,ruby servlet"
  8.   end
  9.   private :hello
  10.   def do_GET(req,resp)
  11.     hello(resp)
  12.   end
  13.   def do_POST(req,resp)
  14.     hello(resp)
  15.   end
  16. end
  17. if $0==__FILE__
  18.   server=HTTPServer.new(:Port=>3000)
  19.   server.mount("/hello",HelloServlet)
  20.   trap("INT"){ server.shutdown }
  21.   server.start
  22. end

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

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

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

  1. <html>
  2. <body>
  3. <center>
  4.   <form action="http://localhost:3000/hello" method="post">
  5.     <input type="text" name="name" size=10/><br/><br/>
  6.     <input type="submit" name="submit" value="submit"/>
  7.   </form>
  8.   </center>
  9. </body>
  10. </html>

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

  1. <html>
  2.     <head></head>
  3.     <body>
  4.       hello,<%=name%>
  5.     </body>
  6. </html>

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

  1. require 'webrick'
  2. require 'net/http'
  3. include WEBrick

  4. class HelloServlet < HTTPServlet::AbstractServlet
  5.   def do_GET(req,resp)
  6.     do_POST(req,resp)
  7.   end
  8.   def do_POST(req,resp)
  9.     name=req.query["name"]
  10.     #读取模板文件
  11.     template=IO.read(File.dirname(__FILE__)+"/hello.html")
  12.     message=ERB.new(template)
  13.     resp["Content-Type"]="text/html;charset=utf-8"
  14.     resp.body=message.result(binding)
  15.   end
  16. end
  17. if $0==__FILE__
  18.   server=HTTPServer.new(:Port=>3000)
  19.   server.mount("/hello",HelloServlet)
  20.   trap("INT"){ server.shutdown }
  21.   server.start
  22. end

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

分享到:
评论

相关推荐

    ruby example webrick

    ruby sample: @echo off cd D:\proj\demo rem previously drop tables call rake db:migrate VERSION=0 rem load test data (it depends on the db:environment and db:migrate tasks) call rake db:load_test_...

    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的...

    ruby-runtime.rar

    在Jenkins插件的上下文中,"WEB-INF"可能包含插件的Java源代码、类文件、web.xml配置文件(定义Servlet和过滤器),以及其他必要的资源,这些都使得插件能在Jenkins服务器上正确运行。 总结一下,"ruby-runtime.rar...

    ruby-1.8.6.tar.gz 编译器

    Ruby可以通过Rack中间件与Java的Servlet容器(如Tomcat)交互,实现Web应用的部署。对于.NET,虽然两者原生不兼容,但可以通过IronRuby这样的项目,提供一个在.NET Framework上的Ruby实现。 在Ruby的世界里,Rails...

    servlet的系统学习资料

    Web服务器是运行Web应用程序的软件环境,也被称为Web容器。它们负责管理Web应用的生命周期,处理HTTP请求,并将结果返回给客户端。Java Web开发中常见的Web容器有Tomcat、JBoss、WebLogic、WebSphere和Jetty。 3. ...

    chef-servlet-1.6.0.zip

    Chef是一个强大的基础设施配置和管理框架,它使用Ruby语言编写,但也有Java版本的实现,如这个Servlet,使得在Java Web环境中也能利用Chef的功能。 描述中的"jargo.zip"提到了一个名为Jargo的项目,这是一个用于...

    RubyAndJDWP

    他们意识到,如果能实现低级别上的Ruby调试Java应用,将极大地提高对JVM的控制能力。这一想法激起了双方的兴趣,并成为后续开发JDWP-Ruby桥接工具的起点。 ### Java平台调试架构(JPDA) JPDA是Java调试的核心组件,...

    基于servlet火车订票系统ServletTicket.zip

    编程语言和开发技术:如Java、$C++、Python、JavaScript、Ruby等。 数据库技术:如关系型数据库(如MySQL、Oracle、SQL Server)和非关系型数据库(如MongoDB、Redis)等。 前端开发:HTML、CSS、JavaScript等用于...

    trantor-stream-uploader:一个简单且内存高效的代理 Servlet,可将(相对)大文件上传到我们基于 Sinatra 的后端

    流上传代理 Servlet 这个项目由简单的 Servlet 组成,打包在一个 WAR 文件中,准备部署在 JBoss 7.x AS 或。 该流保证为 1KB 宽,因此其内存占用非常荒谬。 而且速度很快。 此外,不使用任何外部 Java 库。 问题 ...

    该项目是以jsp+servlet+mysql做的图书管理系统.rar

    mysql MySQL 是一个开放源码的小型关联式数据库管理系统,开发者为瑞典 MySQL AB 公司。目前 MySQL 被广泛地...既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。

    warbler:Warbler巧妙地构建Ruby应用程序的.war文件

    Warbler是一种用任何Ruby,Rails或Rack应用程序制作Java jar或war文件的宝石。 Warbler提供了一种最小,灵活,类似于Ruby的方式来捆绑所有应用程序文件,以将其部署到Java环境中。 Warbler提供了一组开箱即用的...

    tomcat-catalina-ant-7.0.30.zip

    这种跨平台的适配使得Java开发者也能享受到Sass带来的强大CSS处理能力,同时保持与Ruby社区的同步。 【标签】"开源项目" 开源项目意味着这两个组件——Tomcat和Sass Gems,它们的源代码都是公开的,允许用户自由...

    Core Servlets and JavaServer Pages(Volume.1 .2nd.Edition)

    作者Marty Hall不仅是一位经验丰富的技术作家,还亲自开发并教授基于本书内容的培训课程,涵盖了Java编程、初/中级Servlets和JSP、高级Servlets和JSP、Struts、JSF/MyFaces、Ajax、GWT、Ruby/Rails等多个方面,可...

    prince-13.4-macos.tar.gz prince: 13.4

    使用简单的CSS进行漂亮的打印...Servlet的Java类 .NET for C#和ASP VB6的ActiveX / COM 字体和Unicode OpenType字体,TrueType和CFF 字距调整,连字,小写 中文,日文,韩文 阿拉伯文,希伯来文,北印度文等

    w3cschool菜鸟教程离线版chm手册 2016

    学习 Servlet 学习 JSP 学习 SQL 学习 SQLite 学习 ASP 学习 ADO 学习 AppML 学习 VBScript XML 教程 学习 XML 学习 DTD 学习 XML DOM 学习 XSLT 学习 XPath 学习 XQuery 学习 XLink 学习 XPointer 学习 Schema ...

    vagrant-latmp:Vagrant LA(T)MP堆栈:CentOS 7 + Apache HTTP + Apache Tomcat + MySQL + PHP + Python + Ruby + Node.js

    **Ruby**:Ruby也是一种面向对象的脚本语言,以其简洁和表达性强的代码而受到开发者喜爱。Ruby on Rails框架使得Web开发更加高效。 **Node.js**:Node.js是一个基于Chrome V8引擎的JavaScript运行环境,通过提供...

    jruby-rack:用于JRuby和Java应用服务器的机架

    JRuby机架JRuby-Rack是Java Servlet环境的轻量级适配器,它允许任何(基于Ruby)Rack的应用程序在Java Servlet容器中未经修改地运行。 JRuby-Rack支持Rails以及任何与Rack兼容的Ruby Web框架。 有关Rack的更多信息,...

Global site tag (gtag.js) - Google Analytics