• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

【转】RubyonRails,服务端如何响应页面提交的请求

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

http://blog.csdn.net/abbuggy/article/details/7495966

Ruby on Rails,目录结构一瞥中我们提及过public目录和app目录的作用是不同的。有必要通过例子更加清楚的知道他们之间的差别,顺便了解一下在Rails中web服务器是如何响应页面提交过来的请求的。

图中展示了Rails框架在web应用中所处的位置,其中名为public的文件夹就是Rails目录中的那个同名文件夹。


来 自浏览器的请求抵达web服务器后,web服务器会拿着这个请求地址在public目录中查找看看有没有资源的路径和名称能够和请求完全吻合。如果能够成 功找到这样的资源,web服务器会直接将这个资源返回给浏览器,并不会与Rails框架发生交互。这种交互方式适用于返回诸如图片等静态内容的情况,请求 不需要经过特别的计算和处理便直接做出响应。

如 果请求在public目录中没有能够找到完全匹配的资源又会怎么样呢?这个请求该被发往Rails框架了,接收这个请求的是叫做Routing的模块。 Routing负责尝试解析这个请求所应该对应的Controller和Action并调用之后生成将要返回给浏览器的页面。

这 里有两点需要说明,首先无论是从public目录中返回的页面还是经过Rails框架生成的动态内容页面都是HTML页面文件,因为这是浏览器唯一能够识 别的文件格式。其次是public目录的位置是在web服务器与Rails框架之间,有些时候这个目录中的内容是有可能影响请求响应结果的。

关于第二点做个小实验来说明一下。启动服务器,在浏览器中输入:http://localhost:3000/404.html 会显示“页面没有找到”的提示。但其实这不是真的页面没有找到,而是我们正在访问提示“页面没有找到”的页面本身!


原因是对于页面请求“http://localhost:3000/”,后面什么都不加的话即是指向public目录。在我的public目录中正好有个名为404.html的文件。请求的地址正好和我public目录中的资源匹配上了自然直接返回并显示在浏览器上。


还记得我们在Ruby on Rails,创建最简单的视图/控制器单元Hello World》中创建的视图/控制器小例子吗?通过访问localhost:3000/demo /index地址,Rails调用了demo控制器的index方法返回了index.html.erb对应的view。但如果我们在public目录中 创建一个名为demo的目录,下面放一个叫做index.html的文件,相同的页面请求将会返回什么样的结果呢?


 

  1. <!DOCTYPE html>  
  2. <html>  
  3. <body>  
  4.   <div class="dialog">  
  5.     <h1>这是public目录中的demo/index.html文件</h1>  
  6.   </div>  
  7. </body>  
  8. </html>  

没错,localhost:3000/demo/index的请求没有经过Rails的处理而是直接返回了public目录中直接匹配的静态页面文件。


这就是为什么在public目录中的缺省index页面中,提示我们要将这个目录中的index文件移除掉的原因啦!


http://blog.csdn.net/abbuggy/article/details/7495966


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Ruby笔记一(运算符)发布时间:2022-07-13
下一篇:
1.ruby依赖之Devkit安装步骤-----logtash的输入配置发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap