以下内容引用自http://wiki.jikexueyuan.com/project/jsp/architecture.html:
Web服务器需要一个JSP引擎,即处理JSP页面的容器。JSP容器负责为JSP页面拦截请求。
JSP容器适用于Web服务器,来提供JSP运行时环境和其他服务的需求。它知道如何理解JSP的部分特殊元素。
以下图表显示了JSP容器的位置以及在一个Web应用程序中的JSP文件。
JSP处理
下面的步骤解释了web服务器如何使用JSP创建Web页面:
-
作为正常的页面,浏览器发送一个HTTP请求到Web服务器。
-
Web服务器承认一个JSP页面的HTTP请求,并将其转发给一个JSP引擎。这是通过使用URL或JSP页面实现的,该JSP页面是以.jsp结尾而不是以.html结尾的。
-
JSP引擎从磁盘加载JSP页面并将其转换为一个Servlet的内容。这种转换是非常简单的,所有模板文本转换为println()语句,所有JSP元素转换为Java代码实现页面的相应的动态行为。
-
JSP引擎编译Servlet到一个可执行的类中,并将原始请求转发给一个Servlet引擎。
-
调用Servlet引擎的Web服务器的一部分加载Servlet类并执行它。执行期间,Servlet产生一个HTML格式的输出,Servlet引擎将该输出传递到HTTP响应内的Web服务器中。
-
Web服务器将HTTP响应以静态HTML内容的形式转发到浏览器中。
- 最后Web浏览器处理HTTP响应中的动态生成的HTML页面,就好像它是一个静态页面。
上述所有步骤如下图所示:
通常,JSP引擎检查JSP文件的Servlet是否已存在,JSP的修改日期是否比Servlet的过时。如果JSP的修改日期比其生成的Servlet的修改日期过时,那么JSP容器假设JSP修改日期没有改变,且生成的Servlet的修改日期仍然与JSP的内容相匹配。与其他脚本语言(比如 PHP)相比,这个过程更有效率,因此更加快速。
所以在某种程度上来说,一个JSP页面只是用另一种方式来写Servlet,而不需要成为一个Java编程奇才。除了翻译阶段,处理JS 页面完全就像处理一个普通的Servlet一样。