<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    Ruby寫Servlet的小例子

    Posted on 2008-07-23 12:02 dennis 閱讀(2881) 評論(0)  編輯  收藏 所屬分類: 動態語言
        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的這些標準庫來快速實現。
       
    主站蜘蛛池模板: 亚洲香蕉久久一区二区三区四区| 色妞www精品视频免费看| 国产综合成人亚洲区| 永久免费视频网站在线观看| 亚洲日韩aⅴ在线视频| 日韩成人精品日本亚洲| 永久免费AV无码国产网站| 久久精品亚洲视频| a级毛片免费网站| 亚洲国产精品一区二区九九| 久久亚洲中文字幕无码| 狼友av永久网站免费观看| 在线精品亚洲一区二区| 日本zzzzwww大片免费| 亚洲另类小说图片| 97在线观免费视频观看| 一区二区三区免费高清视频| 久久精品国产亚洲一区二区三区| 羞羞网站免费观看| 亚洲成人福利在线观看| 久久精品网站免费观看 | 亚洲色成人WWW永久网站| 青青青免费国产在线视频小草| 亚洲一区二区久久| 永久中文字幕免费视频网站| 国产99视频精品免费专区| 久久精品国产亚洲av成人| 日韩免费三级电影| 麻豆91免费视频| 亚洲91精品麻豆国产系列在线| 中文字幕亚洲天堂| 四虎永久在线精品视频免费观看| 成人免费视频一区二区| 亚洲国产无套无码av电影| 最近高清中文字幕免费| 亚洲精品无码成人| 亚洲尤码不卡AV麻豆| 国产自产拍精品视频免费看| 高清永久免费观看| 久久噜噜噜久久亚洲va久| 无码区日韩特区永久免费系列 |