http 服务器负责接收客户端请求,找资源,返回资源给客户端,比如 apache / nginx ,如果请求的是静态资源,比如 html / image , http 服务器就直接找到并返回给客户端了。
这个时候如果客户端请求比如 php , http 服务器自己无法解析 php 的文件,如果没有配置解释器那它就会直接把这个 php 的源码给展示了出来(当成了文本文件),如果 http 服务器配置了解释器,因此它知道 php 这种后缀的文件应该去请求 php-cgi ,于是它就去让 php-cgi 执行 php , php 完成处理后把结果给 http 服务器, http 服务器把结果再给客户端。另外为了解决非编译型语言每次都初始化应用基础环境的重复工作,于是出现了 fast-cgi 的标准( master 执行初始化后就变成常驻进程,开启 worker 来处理单个请求), php-fpm 就是这个标准的具体实现。
那 tomcat 跟上面对比,是不是也是类似于 php-cgi 实现的一种存在?是不是这样: jsp 请求过来了, http 服务器不知道怎么解析,一看配置,需要去找 tomcat ,于是转给 tomcat ,但是 java 程序是需要 JVM 环境的,所以 tomcat 建立在 JVM 之上执行,而 tomcat 本身是个容器,需要实际的 worker 来解析 jsp ,于是就去实例化一个 servlet 来解析,最后再一层层回归到客户端。
是不是这样理解的?
求指点。。。
其实主要是在研究 ApplicationContext 发现它可以引用装载自己的 ServletContext ,因为是个 phper (世界上最好的语言,你懂的~),对这个 Servlet 有点理解不能。。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.