JSP的体系结构
以下内容引用自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一样。
JSP的体系结构的更多相关文章
- HeadFirst jsp 02 (体系结构)
当请求到来时, 必须有人实例化 servlet, 或者至少建立一个新的线程来处理这个请求. 必须有人调用 servlet 的 doPost()或 doGet()方法. 另外还的有人管理 servlet ...
- PHP与JSP简单比较
比较PHP和JSP这两个Web开发技术,在目前的情况是其实是比较php和Java的Web开发.以下就几个主要方面进行的比较: 一. 语言比较 PHP是解释执行的服务器脚本语言,首先php有简单容易上手 ...
- JSP的优势 和劣势 与php的比较
一 jsp的 优势 与劣势 由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和 ...
- php和java的一些比较
现在市场上的电子商务软件基本上可归结为两大阵营,即PHP阵营和Java阵营.但对接触电子商务不久的用户来说,看到的往往只是它们的表相,只是明显的价格差异,却很难看出它们之间的实际差异.其实,PHP+ ...
- 开发语言大PK:php和Java哪个更好?
Java通过jdbc来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库.访问数据库的接口比较统一. PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强.例如 ...
- 在Web开发方面Java跟PHp八大对比
在Web开发方面Java跟PHp八大对比 <本文摘自百度经验,用来简单对比一下这两种语言> 一. 语言比较 PHP是解释执行的服务器脚本语言,首先php有简单容易上手的特点.语法和c语言比 ...
- Java和PHP在Web开发方面的比较
比较 PHP和JSP这两个Web开发技术,在目前的情况是其实是比较PHP和Java的Web开发.以下是我就几个主要方面进行的比较: 一. 语言比较 PHP是解释执行的服务器脚本语言,首先php有简单容 ...
- PHP和java比较
这样从几个方面来看:一.运行机制:Java代码被编译成字节码后,会在虚拟机里由JIT进行二次编译成为本地码,据传言其执行速度可以和C++相媲美,经过我自己测试,用Java实现一个简单的Memcache ...
- Java和Php比较
这样从几个方面来看:一.运行机制:Java代码被编译成字节码后,会在虚拟机里由JIT进行二次编译成为本地码,据传言其执行速度可以和C++相媲美,经过我自己测试,用Java实现一个简单的Memcache ...
随机推荐
- Android开发中使用代码删除数据库
更多信息参考:Android开发中使用代码删除数据库 在Android开发中,如果用到数据库,就会有一个很麻烦的问题,就是有时候需要删除数据库很麻烦,要打开Android Device Monitor ...
- iOS Programming Controlling Animations 动画
iOS Programming Controlling Animations 动画 The word "animation" is derived from a Latin wor ...
- frame方式布局一段文子,设置宽高
计算一段文字的宽高 /** * 计算一段文字的宽高 * * @param size 这段文字的最大宽高 * @param options NSStringDrawingUsesLineFragment ...
- c++ 数组长度
数组长度求解 sizeof template <class T>int getArrayLen(T &array){ return (sizeof(array) / sizeof( ...
- faster rcnn一些博客
这个是对faster 问题的一个总结 http://blog.csdn.net/u010402786/article/details/72675831?locationNum=11&fps=1 ...
- vue-router 基本使用(vue工程化)
(1)概念: 路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示home的内容,如果点击页面上的about 按钮,页面中就要显示about 的内容.Home按钮 => h ...
- margin负值应用
我理解的最关键的一点是: 在文档流中,只能是后面的流向前面的,即文档流只能向左或向上流动,不能向下或向右移动.第二个元素的基准线是第一个元素的右边界,第三个元素的基准线是第一.二个元素排好后最右边的边 ...
- 笔试算法题(40):后缀数组 & 后缀树(Suffix Array & Suffix Tree)
议题:后缀数组(Suffix Array) 分析: 后缀树和后缀数组都是处理字符串的有效工具,前者较为常见,但后者更容易编程实现,空间耗用更少:后缀数组可用于解决最长公共子串问题,多模式匹配问题,最长 ...
- 查看密码存放地-shadow
shadow 位置:/cat/shadow 作用:存放用户的密码等信息 使用查看命令以后得到以下数据 我们会看到9个字段,分别用 :隔开,如上图所示一一解释: 第一字段:用户名称 第二字段:加密密码 ...
- 用ffmpeg切割音频文件
ffmpeg -i audio.wav -f segment -segment_time -c copy audio%02d.wav "-segment_time 60" 表示每6 ...