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. python-day6---while循环

    # while 条件:# 循环体的代码1# 循环体的代码2# 循环体的代码3# count=0# while count < 10:# print(count)# count+=1 # whil ...

  2. Linux中的yum是什么?如何配置?如何使用?

    yum,是Yellow dog Updater Modified的简称,起初是由yellow dog这一发行版的开发者Terra Soft研发,用python写成,那时还叫做yup(yellow do ...

  3. OAF中trunc函数的使用(转)

    原文地址:OAF中trunc函数的使用 需求:在做OAF开发时,经常会需要查询功能,由于需求的不同,往往不能使用OAF标准的查询功能,需要自己客户化实现查询功能,而在查询功能中,经常会遇到查询的时间范 ...

  4. bind出现Address already in use解决方法

    在socket函数和bind函数之间加入一段代码: // 建立服务器端socket if((server_sockfd = socket(AF_INET, SOCK_STREAM, 0))<0) ...

  5. dup的使用(二)

    转自:http://blog.csdn.net/yeyuangen/article/details/6852682 一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运 ...

  6. cas Cas20ProxyReceivingTicketValidationFilter

    Cas20ProxyReceivingTicketValidationFilter  继承AbstractTicketValidationFilter,这里有几个模板方法.例如getTicketVal ...

  7. vuex 简单理解

    废话不多说,直接上图!                 不懂的 参考 API

  8. Oracle 数据库分析

    一.数据库分析 二.表的分析 1.分析表exec dbms_stats.gather_table_stats('SFISM4','R_SN_DETAIL_T',CASCADE=>TRUE);ex ...

  9. pywin32 的安装

    这个东西不是在包管理器安装一下就可以的. https://github.com/mhammond/pywin32/releases 请到git下载exe安装文件.

  10. L212

    Just 33 minutes into the New Year, NASA's New Horizons probe made space exploration history, flying ...