include指令用于在JSP页面静态的包含一个文件,该文件可以是JSP页面、HTML页面、文本文件或者一段java代码。使用include指令的JSP页面在转换时,JSP容器会在其中插入所包含文件的文本或代码。

include指令语法格式:

  <%@ include file="relativeURL"%>

XML格式的include指令格式:

  <jsp:directive.include file="relativeURL">

其中file属性为相对于当前JSP文件的URL。

例:

welcome.jsp文件

<%@ page contentType="text/html;charset=gb2312" %>

<html>

  <head><title>welcome</title></head>

  <body>

    the now time is:

    <%@  include file="data.jsp"%>

  </body>

</html>

data.jsp

<%

  out.println(new java.util.Date().toLocaleString());

%>

注意:在被包含的文件中最好不要使用<html>/</html><body></body>等标签,因为这会影响到原JSP文件中同样的标签,有时会导致错误。

另外,因为原文件和被包含文件可以互相访问彼此定义的变量和方法,所以在包含文件时要格外小心,避免在被包含文件中定义同名的变量和方法,从而导致的转换出错。或者修改了另外文件中变量的值而导致的错误。


<jsp:include>动作标识

这个动作元素用于在当前页面中包含静态和动态的资源,一旦被包含的页面执行完毕,请求处理将在调用页面中继续进行。被包含的页面不能改变响应的状态代码或者设置报头,这防止了对类似setCookie()这样的方法的调用,任何对这些方法的调用都将被忽略。这个约束和在javax.servlet.Request.Dispatcher类的include()方法上所施加的约束是一样的。

<jsp:include>动作的语法:

  <jsp:include page="url" flush="true/false">

或者

  <jsp:include page="url" flush="true/false">

    {<jsp:param...../>}

  </jsp:include>

<jsp:include>有两个属性:page和flush

page:指定被包含资源的相对路径,该路径是相对于当前JSP页面的URL

flush:该属性是可选的,如为true,则表示当页面输出使用了缓冲区,那么在进行包含工作之前,先刷新缓冲区。如设置为false,则不会刷新缓冲区。默认是false。

<jsp:include>动作元素可以在他的内容中包含一个或者多个<jsp:param>元素,为包含的页面提供参数信息。被包含的页面可以访问request对象,该对象包含了原始的参数和使用<jsp:param>元素指定的新参数,如果参数的名称相同,则原来的值不变,新的值其优先级比已经存在的值要高。

例如:请求对象中有一个参数为param=value1,然后在<jsp:param>元素指定了一个参数param=value2,在被包含的页面中,接收到的参数为param=value2,value1,调用javax.servlet.ServletRequest接口中的getParameter()方法将返回value2,当然可以使用getParameterValues()返回指定参数的所有值。

表1-1<jsp:include>和include指令的区别
语法 相对路径 发生时间 包含对象 描述
<%@ include file="url"%> 相对于当前文件 转换期间 静态 包含的内容被JSP容器分析
<jsp:include page="url"> 相对于当前页面 请求处理期间 静态和动态 包含的内容不进行分析,但在相应的位置被包含

注意:表1-1中include指令包含的对象为静态,并不是指include指令只能包含像HTML这样的静态页面,include指令也可以包含JSP页面。所谓静态和动态指的是:include指令将JSP页面作为静态对象,将页面的内容(文本或代码)在include指令的位置处包含进来,这个过程发生在JSP页面的转换期间。而<jsp:include>动作吧包含的JSP页面作为动态对象,在请求处理期间,发送请求给该对象,然后在当前页面对请求的响应中包含该对象对请求处理的结果。这个过程发生在执行阶段(即请求处理阶段)。

  当采用include指令包含资源时,相对路径的解析在转换期间发生(相对于当前文件的路径来找到资源),资源的内容(文本或者代码)在include指令的位置被包含进来,成为一个整体,被转换为Servlet源文件。当采用<jsp:include >动作包含资源时,相对路径的解析在请求处理阶段,(相对于当前页面来找到资源),当前页面和被包含的资源是两个独立的个体,当前页面将请求发送给被包含的资源,被包含的资源对请求处理的结果作为当前页面对请求响应的一部分发送给客户端。

  为了更好的理解include指令和<jsp:include>动作包含资源的相对路径,弄清楚相对于当前文件和相对于当前页面的区别,给出了表1-2,在这个例子中用到四个文件:

a.jsp  c.jsp  abc/b.jsp   abc/c.jsp

表1-2
a.jsp abc/b.jsp 结果
<%@ include file="abc/b.jsp"%> <%@ include file="c.jsp"%> abc/c.jsp
<jsp:include page="abc/b.jsp"> <jsp:include page="c.jsp"> abc/c.jsp
<jsp:include page="abc/b.jsp"> <%@ include file="c.jsp"%> abc/c.jsp
<%@ include file="abc/b.jsp"%> <jsp:include page="c.jsp"> c.jsp

JSP指令include和JSP动作元素include的区别的更多相关文章

  1. day12(jsp指令&内置对象&动作标签、JavaBean、EL表达式&函数库)

    day12 JSP指令 JSP指令概述 JSP指令的格式:<%@指令名 attr1="" attr2="" %>,一般都会把JSP指令放到JSP文件 ...

  2. JSP--JSP语法--指令--include(动态包含/静态包含)--九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构

    一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1.    JSP模板元素:JSP中HT ...

  3. JavaWeb学习----JSP脚本元素、指令元素、动作元素

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. Jsp语法、指令及动作元素

    一.JSP的语法 1.JSP的模板元素:(先写HTML) 就是JSP中的那些HTML标记 作用:页面布局和美化 2.JSP的Java脚本表达式: 作用:输出数据到页面上 语法:<%=表达式%&g ...

  5. JSP脚本元素、指令元素、动作元素

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构

    一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...

  7. JavaWeb(三)JSP之3个指令、6个动作、9个内置对象和4大作用域

    前言 前面大概介绍了什么是JSP,今天我给大家介绍一下JSP的三个指令.6个动作以及它的9大内置对象.接下来我们就直接进入正题 一.JSP的3个指令 JSP指令(directive)是为JSP引擎而设 ...

  8. JSP学习笔记(二):动作元素

    与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用.JSP动作元素是用XML语法写成的. 利用JSP动作可以动态地插入文件.重用JavaBean组件.把用户重定向到另外的页面.为Java插件 ...

  9. #1122 JSP动作元素

    JSP动作元素 与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用.JSP动作元素是用XML语法写成的. 利用JSP动作可以动态地插入文件.重用JavaBean组件.把用户重定向到另外的页面 ...

随机推荐

  1. 浅浅的分析LED呼吸灯的实现和PWM的关系

    前言 在本周,我们在python课上做了一个实验,用ARDUINO使小LED灯模仿出呼吸灯的效果,实验进行的很成功,但是机器当仅输出高/低电平的时候是怎么样才能做到渐亮渐暗(输出电压)的变化呢?在这里 ...

  2. CentOS7.6 Install TensorFlow

    1. install pip 1).  yum -y install epel-release 2).  yum install python-pip 3).  pip install --upgra ...

  3. ural Ambitious Experiment 树状数组

    During several decades, scientists from planet Nibiru are working to create an engine that would all ...

  4. JAVASCRIPT开发HTML5游戏--斗地主(网络对战PART4)

    继之前用游戏引擎(青瓷引擎)做了斗地主单机版游戏之后,这里分享下使用socket.io来实现网络对战,代码可已放到github上,在此谈谈自己整个的开发思路吧. 客户端代码 服务端代码 (点击图片进入 ...

  5. Integer封装类的相关知识

    java中,在一些情况下会有自动装箱与自动拆箱. 自动拆箱/装箱是在编译期,依据代码的语法,决定是否进行拆箱和装箱动作.装箱过程:把基本类型用它们对应的包装类型进行包装,使基本类型具有对象特征.拆箱过 ...

  6. L1-045 宇宙无敌大招呼

    据说所有程序员学习的第一个程序都是在屏幕上输出一句“Hello World”,跟这个世界打个招呼.作为天梯赛中的程序员,你写的程序得高级一点,要能跟任意指定的星球打招呼. 输入格式: 输入在第一行给出 ...

  7. PostgreSQL误删操作怎么处理

    方式一: PostgreSQL中没有Oracle的闪回机制,只有更加复杂的PITR恢复机制,这要求数据库有全量备份和增量备份,否则无法进行回滚. 方式二: 虽然PostgreSQL有延迟复制的技术,在 ...

  8. xcode cocos2dx升级

    原文转自:http://www.codeo4.cn/archives/690 cocos2d-x的安装脚本里没有升级的脚本,我们如果在新版本安装的时候加上参数:-f 强制安装也没有能完全解决问题.新建 ...

  9. 解压Ubuntu的initrd.img的方法

    Ubuntu的initrd.img可以在/boot中找到,通常文件名后面还跟有很长的一串版本号. 为了保险起见,不直接操作原文件,而是把它复制到自己的家目(home)录中.如果你是用root帐号登录的 ...

  10. macOS 使用brew安装mysql,客户端连接不上

    macos 使用brew安装mysql8.0后,使用mysql官方的workbench连接不上,出现√ mysql8.0 Authentication plugin 'caching_sha2_pas ...