Ruby on Rails,服务端如何响应页面提交的请求

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的文件,相同的页面请求将会返回什么样的结果呢?


<!DOCTYPE html>
<html>
<body>
  <div class="dialog">
    <h1>这是public目录中的demo/index.html文件</h1>
  </div>
</body>
</html>

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


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


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

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值