和的区别
- JSP相关概念
- JSP的翻译阶段Translation Phases和执行阶段Execution Phases
- JSP页面的元素类型
- 指令元素
- 脚本元素
- 执行元素
- 结论
- JSP代码实验
JSP相关概念
上述两个标签都能在jsp中引入文件,为了理解它们的区别,先了解下JSP相关的几个概念:
JSP的翻译阶段(Translation Phases)和执行阶段(Execution Phases): 在JSP页面的生命周期中包含两个阶段:翻译阶段和执行阶段。
在翻译阶段,容器需要创建或定位JSP页面的实现对象,也就是将JSP页面翻译成对应的Servlet。
在执行阶段,容器需要实例化request和response对象,并调用JSP页面的实现对象(服务端对应的Servlet)处理客户端的请求,最后将服务端的响应传递给客户端。
JSP页面的元素类型: JSP页面中包含3种类型的元素:指令元素(directive elements)、脚本元素(scripting elements)、执行元素(action elements)。
指令元素:
指令元素提供全局的信息,对JSP页面接受的所有请求均有效,为翻译阶段提供信息,其对应的语法如下:
脚本元素:
脚本元素是模板和执行元素的“胶水”(官方定义…表示不理解 - -)。对应一下具体内容,就不难理解了
The Expression Language (EL):通过它可以简化从不同数据源获取数据的操作,语法如下:
${expr}
#{expr}
【和的区别】Declarations:声明服务端脚本(JAVA)使用的变量,语法如下:
Scriptlet:服务端脚本(JAVA),语法如下:
Expressions:服务端表达式(JAVA),语法如下:
之所以称之为“胶水”,可能是因为它位于HTML文本和执行元素中间,用于生成动态的内容。
执行元素:
为请求处理阶段(也就是执行阶段)提供信息,针对不同的request可能会生成不同的内容。其实就对应JSP的TAG,语法如下:
body
结论 从概念上看,jsp:include属于执行元素(action elements),为执行阶段提供信息;include属于指令元素(directive elements),为翻译阶段提供信息。
具体到容器实现上,通过jsp:include包含的页面,是把该jsp页面生成的响应合并到父jsp的响应中,两个页面均会生成自己的Servlet;而include包含的页面,是把该jsp页面的代码合并到父jsp的代码中,服务端只生成一个Setvlet。
JSP代码实验 main.jsp
Insert title here - 锐客网 The main page.
include.jsp
当通过来包含页面时,编译器报错,提示重复定义变量,因此可看出属于静态包含,包含页面和被包含页面会生成一个Servlet。将其替换为jsp:include后,编译器成功编译,且服务端生成两个Servlet文件,main_jsp.java文件中通过以下代码包含inlcude.jsp页面生成的内容:
org.apache.jasper.runtime.JspRuntimeLibrary.include(
request, response, "include.jsp", out, false);
因此可看出jsp:include属于动态包含,父页面包含include.jsp生成的响应。
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 急于表达——往往欲速则不达
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河