JSP指令include和JSP动作元素include的区别
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()返回指定参数的所有值。
| 语法 | 相对路径 | 发生时间 | 包含对象 | 描述 |
| <%@ 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
| 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的区别的更多相关文章
- day12(jsp指令&内置对象&动作标签、JavaBean、EL表达式&函数库)
day12 JSP指令 JSP指令概述 JSP指令的格式:<%@指令名 attr1="" attr2="" %>,一般都会把JSP指令放到JSP文件 ...
- JSP--JSP语法--指令--include(动态包含/静态包含)--九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HT ...
- JavaWeb学习----JSP脚本元素、指令元素、动作元素
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Jsp语法、指令及动作元素
一.JSP的语法 1.JSP的模板元素:(先写HTML) 就是JSP中的那些HTML标记 作用:页面布局和美化 2.JSP的Java脚本表达式: 作用:输出数据到页面上 语法:<%=表达式%&g ...
- JSP脚本元素、指令元素、动作元素
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...
- JavaWeb(三)JSP之3个指令、6个动作、9个内置对象和4大作用域
前言 前面大概介绍了什么是JSP,今天我给大家介绍一下JSP的三个指令.6个动作以及它的9大内置对象.接下来我们就直接进入正题 一.JSP的3个指令 JSP指令(directive)是为JSP引擎而设 ...
- JSP学习笔记(二):动作元素
与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用.JSP动作元素是用XML语法写成的. 利用JSP动作可以动态地插入文件.重用JavaBean组件.把用户重定向到另外的页面.为Java插件 ...
- #1122 JSP动作元素
JSP动作元素 与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用.JSP动作元素是用XML语法写成的. 利用JSP动作可以动态地插入文件.重用JavaBean组件.把用户重定向到另外的页面 ...
随机推荐
- 使用poi导出Excel,并设定单元格内容类型,抛出异常
本例子使用的是HSSF,为Excel2003提供处理方案. 设定为输入类型为数值 import org.apache.poi.hssf.usermodel.DVConstraint; import o ...
- PL/SQL Developer 使用中文条件查询时无数据的解决方法(转)
原文地址: PL/SQL Developer 使用中文条件查询时无数据的解决方法 PL/SQL Developer 使用中文条件查询时无数据,这是由于字符集的不一致导致的. 执行以下sql命令:sel ...
- idea中使用gradle
idea中使用gradle gradle下载 gradle下载地址:https://services.gradle.org/distributions/ 这里假设下载的是4.6版本的,如下: 笔者下载 ...
- NRF51822+STM32bootload——typedef void (*Fun) (void) 理解
1.typdef 用法如下所示 typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned ...
- uart boot log
CC开始 xmodem 传输. 按 Ctrl+C 取消. 100% 95 KB 4 KB/s 00:00:23 0 Errors U-Boot SPL 2018.01 (Jan 16 2019 - 1 ...
- javascript开发HTML5游戏--斗地主(单机模式part3)
最近学习使用了一款HTML5游戏引擎(青瓷引擎),并用它尝试做了一个斗地主的游戏,简单实现了单机对战和网络对战,代码可已放到github上,在此谈谈自己如何通过引擎来开发这款游戏的. 客户端代码 服务 ...
- TClientDataSet 的Filename 和 open方法
cdsAdd.Open 不能用open,因为这个是DataSet的通用方法,不会检测文件名的,文件名是CDS特有的
- EhLib TitleButton SVisibleColumnsEh = '错误的列';
unit EhLibConsts; interface resourcestring SClearSelectedCellsEh = '清除选择的单元?'; SInvalidTextFormatEh ...
- MyEclipse关联SVN下载项目到本地
目的:在MyEclipse上关联SVN,从SVN服务器上,下载项目,到本机的MyEclipse上,并运行 准备工作 1.安装好Tomcat和MyEclipse 2.安装好Plsql,并配置连接好Ora ...
- IOS语言总结
本文主要介绍和C++不同的地方. 1.类的定义: 一个类有两个文件一个.h还有一个.m文件 #import <Foundation/Foundation.h> @interface MyC ...