Servlet例子由Ruby来实现

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:

相关推荐