<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的這些標準庫來快速實現。
       
    主站蜘蛛池模板: 免费观看的av毛片的网站| 好爽…又高潮了毛片免费看| 亚洲高清无码综合性爱视频| a级毛片免费高清毛片视频| 亚洲国产成人精品91久久久| 亚洲AV综合色区无码一二三区| 一区二区三区在线免费| 亚洲VA综合VA国产产VA中| 日韩电影免费在线观看网址| 一本久久综合亚洲鲁鲁五月天| 久久夜色精品国产噜噜亚洲AV| 久久久久免费精品国产| 亚洲美女视频免费| 999国内精品永久免费观看| 亚洲一区AV无码少妇电影| 国产精品免费看久久久久| 一个人看的免费视频www在线高清动漫 | 久久青草国产免费观看| 日韩精品一区二区亚洲AV观看| 久久精品无码专区免费东京热| 亚洲另类图片另类电影| 免费国内精品久久久久影院| 黄视频在线观看免费| 亚洲高清视频免费| 在线不卡免费视频| 久久久久久国产a免费观看不卡 | www视频在线观看免费| 亚洲欧洲日产国码久在线| 亚洲国产精品人人做人人爱| 在线毛片片免费观看| 中文字幕亚洲综合久久综合| 四虎影视精品永久免费网站| 一本大道一卡二大卡三卡免费 | 亚洲成人在线免费观看| 色欲色欲天天天www亚洲伊| 国产精品亚洲A∨天堂不卡| 国产大片91精品免费观看不卡| 婷婷亚洲综合一区二区| 久久亚洲私人国产精品| 国产片免费在线观看| 久久久久久一品道精品免费看|