JSP中include指令和include动作浅析
一、 JSP工作原理
JSP文件是一种Servlet,其工作方式是先部署源代码后编译为.class文件。JSP会在客户端第一次请求JSP文件时被编译成Servlet,由Servlet处理客户端的请求。具体流程如下图:
举例说明JSP的编译过程。客户端第一次请求index.jsp文件时,Tomcat先将index.jsp转换为标准的java源代码
index_jsp.java(该java文件存放在F:\apache-tomcat-7.0.68\work\Catalina\localhost
\项目名\org\apache\jsp目录下),并将index_jsp.java编译成类文件index_jsp.class。该class文件便是
JSP对应的Servlet。编译完成后运行class文件响应客户端请求。以后客户端访问index.jsp时,服务器将不再重新编译JSP文件,而是
直接调用index_jsp.class来响应客户端请求。
也就是说,JSP只会在客户端第一次请求的时候被编译,因此第一次请求会比较慢,而之后的请求就会速度比较快。
二、 Include指令
Include指令可以在JSP程序中插入多个外部文件(如:JSP、HTML、java程序,甚至是文本)。在转换成Servlet之前,include指令就会将相应的文件包含进主文件,然后一并转换成Servlet,编译生成一个class文件,最后一起执行。
语法:<%@ include file="relativeURL" %>
file属性是include指令的必要属性,用于指定包含哪个文件。其中relativeURL为被包含文件的路径。Include指令可以被多次调用。
注意:include指令将对应的文件包含进主文件,等价于代码复制;所以在使用include指令时要注意主文件与被包含文件不能定义相同的变量,也就是要避免变量同名冲突。
Include指令是实现代码共享的一种方式,所有的变量都是可以和主文件共享,页面设置也可以与主文件更享。
三、 Include动作
Include动作用于页面请求时引入指定文件。如果引入的文件是JSP文件,则先编译该JSP程序,然后再把编译的结果引入主文件。
语法:<jsp:include page="relativeURL" flush="true" />
属性page是必需的,其page的属性值是被包含文件的相对路径,必须为相同应用程序内的文件。属性flush取值范围为true或者false,默认为false,设置读入被保存文件内容前是否清空缓存。
注意:include动作使用request.getRequestDispatcher(“relativeURL”).forward(request,response)来引入被包含文件。
Include动作会自动检查被包含文件的变化。也就是在每次客户端发出请求时会重新把资源包含进来,进行实时的更新。
JSP动作也可以携带参数:
<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
<jsp:param name="parameterName" value="parameterValue"/>
</jsp:include>
四、 总结
Include指令是“先包含,后编译”,在编译时主文件已经包含被include的文件内容(即源代码);
Include动作是“先运行,后包含”,在运行时主文件才包含被include的文件运行结果。
JSP中include指令和include动作浅析的更多相关文章
- 浅谈JSP中include指令与include动作标识的区别
JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...
- 分别应用include指令和include动作标识在一个jsp页面中包含一个文件。
分别应用include指令和include动作标识在一个jsp页面中包含一个文件. hello.jsp <%@ page language="java" import=&qu ...
- 牛客网Java刷题知识点之什么是JSP的3大常用指令、JSP的6大哪些动作、JSP中include指令和include动作有什么区别
不多说,直接上干货! JSP的3大常用指令 包含指令(Include directive):用来包含文件和合并文件内容到当前的页面. 页面指令(Page directive):用来定义JSP页面中特定 ...
- include 指令和 include 动作引入 jsp 页面时中文乱码
include指令:<%@ include file="new.jsp" %> include动作:<jsp:include page="new.jsp ...
- JSP -- include指令与include动作的区别
JSP -- include指令与include动作的区别 (1)格式的区别: include指令:<%@include file = "文件名"%> include动 ...
- 【Head First Servlets and JSP】笔记24:include指令与include动作 & param动作 & foward动作
include指令与include动作 1.样例代码 <%@ page contentType="text/html;charset=UTF-8" language=&quo ...
- 2017.9.18 include指令和include动作有什么区别?
问题:include指令和include动作有什么区别? 答:include指令合并静态文档或Jsp页面中的内容,可以用于包括动态生成的输出结果,因此可以包含一个Servlet include指令在编 ...
- jsp中的指令与动作
JSP中的三种命令指令分别是page.include.taglib JSP中的动作元素包括:include.forward.useBean.getProperty.setProperty.plugin ...
- include指令和include动作有什么区别?
include指令 称为文件加载指令,可以将其他的文件插入jsp网页,被插入的文件必须保证插入后形成的新文件符合jsp页面的语法规则. include指令语法格式:<%@incl ...
- JSP中三大指令
JSP指令概述 JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的. JSP中的指令共有三个:page. ...
随机推荐
- openwrt(一):openwrt源码下载及编译环境搭建
声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...
- pyplot基础图表函数概述
pyplot饼图的绘制 pyplot直方图的绘制 极坐标图的绘制
- 3 Mongodb数据查询1
1.基本查询 方法find():查询 db.集合名称.find({条件文档}) 方法findOne():查询,只返回第一个 db.集合名称.findOne({条件文档}) 方法pretty():将结果 ...
- luogu3317 [SDOI2014]重建
原来矩阵树定理对于边是概率的情况也是适用的qwqwq. ref #include <iostream> #include <cstdio> #include <cmath ...
- 使用Html5shiv.js让ie支持html5
ie低版本不支持html5标签,可以引入一段脚本,在ie浏览器中创建html5的标签. 1,可以在网上下载html5shiv的压缩包,引入压缩版的html5shiv.min.js即可. 脚本引用要在h ...
- python selenium 练习 自动获取豆瓣阅读当前特价书籍 chrome 元素定位 窗口切换 元素过期
豆瓣原创电子书每周推出数十本限时免费数目,一周免费期过后恢复原价.想着豆瓣原创书中有不少值得一看,便写了个脚本,免去一个个添加的烦恼. 使用了Windows下selenium+Python的组合,有较 ...
- MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)
MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本 ...
- ul中li元素横向排列且不换行
ul { white-space: nowrap; } li { display: inline-block; } white-space 属性设置如何处理元素内的空白. normal 默认. ...
- 孤荷凌寒自学python第五天初识python的列表
孤荷凌寒自学python第五天 列表 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 粗俗地区分列表,可以这样理解,定义或print列表后显示时,列表中的各元素都是用一个方括号[]括起来的. ...
- Ubuntu16.04安装openCV的问题集合
Q1 下列软件包有未满足的依赖关系: libtiff4-dev : 依赖: libjpeg-dev E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系. 上网查了 ...