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组件.把用户重定向到另外的页面 ...
随机推荐
- HDU-4849 Wow! Such City! (单源最短路)
Problem Description Doge, tired of being a popular image on internet, is considering moving to anoth ...
- 贪心(一)NYOJ题目12
#include <iostream> #include<cmath> #include "algorithm" using namespace std; ...
- 43. Multiply Strings 字符串表示的大数乘法
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- 安装淘宝cnpm镜像
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
- java中数组是不是对象?
[转自知乎]:http://www.zhihu.com/question/26297216 JAVA中的数组是对象吗? public class test { public static void m ...
- postgresql的copy
https://www.postgresql.org/docs/current/static/sql-copy.html 一.Copy的基本语法 Copy的作用是复制数据在数据表和文件之间. Copy ...
- foreach的使用原理简单解析
数组可以foreach遍历,这个是在jdk1.5之前就可以的,我也不太清楚是怎么做到的. 后面的List,Set等的foreach都是实现Iterable接口,基于iterator()对象实现的.Fo ...
- HDTunePro汉化版温度显示不正常后需要更改
查找:2564B046000000002564B043替换:2564A848000000002564A1E6 查找:B0432F2564B046替换:A1E62F2564A848
- poshytip漂亮的表单提示插件
一款很实用的小插件,在表单的输入框会显示提示信息,你可能会用的它. 实例代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...
- 一起来点React Native——常用组件之Touchable系列
在前面的登录界面中,我们发现所有的组件不会对用户的点击.触摸.拖拽做出合适的响应,这是十分不友好的.那么,在React Native中如何让视图对触发做出合适的响应呢? 一.高亮触摸 Touchab ...