我们都知道在jsp中include有两种形式,分别是Include指令:<%@ include file=””%>和include动作:<jsp:include page=”” flush=”true”/>
前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。
通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include。具体在哪些时候用<%@ include file=””%>,哪些时候用<jsp:include page=”” flush=”true”/>。这种形式。首先要明白的是它们之间的区别。只有了解了它们用法的不同才理解该在何时去用以及如何选择。

两者最重要的区别:JSP指令<%@ include file=””%>,是将被引入的JSP与原JSP融合到一起,而这个融合过程是在翻译阶段进行的。

为什么需要翻译阶段?我们知道,jsp页面并不是原封不动的发送到客户端的,因为浏览JSP页面的客户端并不需要安装Java虚拟机,客户端机器并不能读懂JSP,它能读懂的只有HTML、JavaScript (当然还有其他,例如:Applet、Flex、AxtiveX等等,但那些都需要下载相应的客户端解析器),这样就需要Servlet Engine (例如:Tomcat) 将所有的JSP元素进行处理。这是通过将jsp页面转化成Servlet,然后执行这个Servlet来完成的。服务器需要一个jsp容器来处理jsp页面。jsp容器通常以Servlet的形式实现,这个servlet经过配置,可以处理对jsp页面的所有请求。

JSP容器负责将jsp页面转化成servlet,并编译这个servlet。这两个步骤就构成了翻译阶段。

而jsp翻译之后的servlet输出的内容才是客户端浏览器能够识别的东西,HTML、JavaScript之类的,servlet是使用JspWriter对象输出输出这些HTML、JavaScript的。如果你去翻看翻看jsp编译后的servlet代码,你会发现很有意思的东西,比如Struts的<logic:iterator>标签,被翻译成do{}while()语句实现循环。如果我们把<bean:write>写在<logic:iterator>内部,则在do的内部会出现类似_jspx_meth_bean_write_2(_jspx_th_logic_iterate_0, _jspx_page_context)的方法调用。这些说明了一切。

由此我们知道:jsp页面是把include指令元素(<%@ include file=””%>)所指定的页面的实际内容(也就是代码段)加入到引入它的jsp页面中,合成一个文件后被jsp容器将它转化成servlet。可以看到这时会产生一个临时class文件和一个servlet源文件。而动作元素(<jsp:include page=””/>)是在请求处理阶段引入的,会被JSP容器生成两个临时class文件和两个servlet原文件。而引入的只是servlet的输出结果,即JspWriter对象的输出结果,而不是jsp的源代码。

我们来总结一下两种include 两种用法的区别,主要有两个方面的不同:

一、执行时间上:

<%@ include file=”relativeURI”%> 是在翻译阶段执行

<jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行。

二、引入内容的不同:

<%@ include file=”relativeURI”%> 引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。

<jsp:include page=”relativeURI” flush=”true” /> 引入执行页面或servlet所生成的应答文本。

有帮到你的点赞、收藏一下吧

需要更多教程,微信扫码即可

jsp的include两种使用方法相关推荐

  1. jsp页面中include的两种使用方法

    jsp页面中include的两种使用方法 include有两种用法 <%@ include file="文件的绝对路径或者相对路径"%> <jsp:include ...

  2. xp系统网页java不显示,xp系统打开jsp文件的两种方法

    使用xp系统的时候会碰到各种文件,比如png.log.exe等等,一位用户说遇到后缀名是jsp的文件,jsp文件是什么?有什么作用呢?jsp格式文件是一种动态网页技术标准,是用java script脚 ...

  3. 快速排序的两种实现方法(c语言版本)

    经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...

  4. Visual C++中error spawning cl.exe错误的两种解决方法

    Win10重装VC的朋友们,应该遇到过很对问题,按照网上很多建议装虚拟机和修改文件的文章来操作效果都不是很理想,本人也深受其扰,不过接下来这篇文章救我于水深火热之中. 原文地址为:Visual C++ ...

  5. 【字符串2】(删除公共字符、合法括号序列判断、两种排序方法、密码强度等级)

    字符串题集 1. 删除公共字符 题目描述 题目分析 C++代码 2. 合法括号序列判断 题目描述 题目分析 C++代码 3. 两种排序方法 题目描述 题目分析 C++代码 4. 密码强度等级 题目描述 ...

  6. 回文字符串的两种判别方法(c语言)

    C语言判别回文字符的两种简单方法 文章目录 C语言判别回文字符的两种简单方法 一.回文字符串的概念 二.介绍两种判别回文字符串的方法 1.将需要判别的字符串倒序排列再与原字符串对比 2. 通过指针锁定 ...

  7. C语言malloc申请空间函数的两种返回方法

    测试ok,代码如下: /********************************************* 功能:malloc申请空间函数的两种返回方法* 作者:lml 时间:2020年4月1 ...

  8. java 计时 timeclock_计时器的time_t和clock_t 的两种实现方法(推荐)

    想给自己初步完成的相空间搜索算法计算一下运行时间,于是尝试了如下使用 time_t 类型的方式 #include #include #include #include "StateFunct ...

  9. c语言中将十六进制数转换为十进制数程序,C语言中十六进制转十进制两种实现方法...

    C语言中十六进制转十进制两种实现方法 C语言 · 十六进制转十进制 问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英 ...

最新文章

  1. EasyDL桌面版发布!3天体验学习
  2. 谷歌研究发现优秀的团队必须具备这五个关键特质
  3. [LeetCode] Number of 1 Bits Reverse Integer - 整数问题系列
  4. list python 访问 键值对_基础|Python常用知识点汇总(中)
  5. 【Leetcode】112. 路径总和
  6. beetl 页面标签_05.Beetl标签函数以及定界符、占位符介绍---《Beetl视频课程》
  7. click事件在什么时候出发_什么是移动端?
  8. python输入10个数字排序案例_介绍十个Python小案例,新手入门就在这里
  9. python 身份证识别_Card-Ocr:身份证识别 OCR
  10. 前端使用xlsx导出数据生成Excel文件
  11. 机器人动力学(牛顿欧拉推导)
  12. 用springboot+netty搭建在线web聊天室
  13. 前端程序员简历制作建议
  14. 安装shipyard
  15. Python在cmd上打印彩色文字
  16. 游戏音乐制作中需要使用那些软件?
  17. vivado与modelsim联合仿真遇到的问题2
  18. Java中的位移操作 、
  19. 混音师的混音之道|公开我学习混音的方法,真正的捷径|MZD Studios
  20. Odbgscript Updated to 1.65.4 by sunbeam

热门文章

  1. 三大运营商公布11月运营数据:中国移动固网业务表现亮眼
  2. 微软拿下美国国防部100亿美元云合同,亚马逊不干了...
  3. vivo NEX 3 5G真机曝光:瀑布屏+升降镜头
  4. 继三星之后 华为折叠屏手机Mate X发售日期或将延期至9月
  5. realme进军中国 目标做行业主流手机品牌
  6. vivo正式公布全新子品牌iQOO手机:冲击5千元+旗舰手机档
  7. 谷歌测试工程师分享前端性能监控利器Performance
  8. Python id(obj), ==, is 三者之间的区别
  9. mvc 项目 webconfig 打开错误_Spring体系常用项目一览
  10. wpf ui框架_.NET跨平台框架Avalonia UI