<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无码免费看| 在线看片免费人成视频久网下载| 18禁止看的免费污网站| 久久精品国产精品亚洲艾草网| 国产精品hd免费观看| 亚洲中文字幕在线第六区| 国产精品偷伦视频免费观看了| 国产亚洲精品福利在线无卡一 | 亚洲精品无播放器在线播放| 拨牐拨牐x8免费| 亚洲综合激情五月色一区| 国产福利免费在线观看| 免费中文字幕视频| 国产亚洲一区区二区在线| 两个人看的www免费| 亚洲精品国产情侣av在线| 毛片a级毛片免费观看免下载 | 亚洲av无码片区一区二区三区| 免费观看黄网站在线播放| 欧美激情综合亚洲一二区| 亚洲欧洲一区二区三区| 免费在线看黄网站| 亚洲中文无码av永久| 亚洲国产精品人人做人人爽| a级片在线免费看| 亚洲a视频在线观看| 亚洲国产一级在线观看| 午夜无码A级毛片免费视频 | 亚洲乱码国产乱码精品精| 亚洲一级免费毛片| 羞羞视频免费观看| 亚洲国产成人久久综合碰碰动漫3d | 在线免费视频一区| 国产男女爽爽爽免费视频 | 亚洲AV成人一区二区三区观看| 亚洲精品美女久久久久99小说| 无码人妻久久一区二区三区免费 | 久久精品夜色国产亚洲av| 在线a人片天堂免费观看高清| 国产免费AV片在线观看播放| 亚洲另类精品xxxx人妖|