這篇文章給大家分享的是有關(guān)如何利用Ruby實(shí)現(xiàn)Servlet的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、襄垣網(wǎng)站維護(hù)、網(wǎng)站推廣。
Ruby也能寫servlet?是的,沒開玩笑,而且挺方便的,因?yàn)镽uby的標(biāo)準(zhǔn)庫就自帶了一個(gè)webrick,webrick本身又有一個(gè)serlvet容器,隨時(shí)隨地啟動(dòng)一個(gè)web server,實(shí)在是很方便。
先看個(gè)最簡單的例子,輸出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,并實(shí)現(xiàn)do_GET或者do_POST方法。在這行代碼:
server=HTTPServer.new(:Port=>3000)
我們啟動(dòng)了一個(gè)HTTP Server,端口是3000,然后將HelloServlet掛載到/hello這個(gè)路徑上,因此,執(zhí)行這個(gè)腳本后,可以通過http://localhost:3000/hello調(diào)用HelloServlet,簡單地只是顯示字符串"hello,ruby servlet"。
這個(gè)簡單的例子沒有任何交互,并且顯示的html也是寫死在腳本中,顯然更好的方式應(yīng)該通過模板來提供,可以使用Ruby標(biāo)準(zhǔn)庫的erb模板。再給個(gè)有簡單交互的例子,現(xiàn)在要求用戶輸入姓名,然后提交給HelloServlet,顯示"hello,某某某"。嗯,來個(gè)最簡單的提交頁面:
﹤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是我們將要綁定的變量,根據(jù)用戶提交的參數(shù)。***,修改下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
與前一個(gè)例子相比,不同點(diǎn)有二,一是通過req.query["name"]獲得用戶提交的參數(shù)name,二是resp的body是由模板產(chǎn)生,而不是寫死在代碼中。在一些臨時(shí)報(bào)表、臨時(shí)數(shù)據(jù)的展示上,可以充分利用Ruby的這些標(biāo)準(zhǔn)庫來快速實(shí)現(xiàn)。
感謝各位的閱讀!關(guān)于“如何利用Ruby實(shí)現(xiàn)Servlet”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!