Servlet例子由Ruby来实现

开发 后端
Servlet用Ruby也能写?是的,没开玩笑,而且挺方便的,因为Ruby的标准库就自带了一个webrick,webrick本身又有一个Serlvet容器,随时随地启动一个web server,实在是很方便。

Ruby也能写servlet?是的,没开玩笑,而且挺方便的,因为Ruby的标准库就自带了一个webrick,webrick本身又有一个serlvet容器,随时随地启动一个web server,实在是很方便。

先看个最简单的例子,输出hello到浏览器:

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

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

【编辑推荐】

  1. Java Servlet API文档实用说明
  2. 整合Apache中JSP和PHP
  3. Java Servlets(JSP)开发环境
  4. Tomcat下JSP、Servlet和Bean的配置
  5. 如何提升Servlet和JSP应用程序的效率
责任编辑:仲衡 来源: JavaEye
相关推荐

2009-07-07 14:11:07

XML来配置Servl

2009-12-14 11:12:55

Ruby运行

2015-01-21 15:40:44

GoRuby

2011-10-14 14:24:26

Ruby

2009-09-28 11:05:29

Ruby端口扫描

2009-12-18 16:27:41

Ruby解析Json

2009-12-18 17:29:02

Ruby创建XML

2009-12-17 13:37:24

Ruby代码块

2021-05-08 07:57:17

ServletFilter设计模式

2009-12-16 15:04:26

Ruby实现strea

2009-12-16 17:24:26

Ruby on Rai

2009-12-15 13:41:49

Ruby向对象发送消息

2009-12-14 10:32:26

Ruby Gnome

2009-07-06 16:18:51

Servlet下载文件

2009-07-09 10:03:40

Servlet应用Weblogic环境

2009-07-06 16:59:16

Servlet方法

2009-07-06 17:11:38

Servlet文件上传

2009-07-03 17:24:31

Servlet页面跳转

2009-12-16 15:46:41

Ruby on rai

2009-12-17 14:36:57

Ruby on Rai
点赞
收藏

51CTO技术栈公众号