<jsp:include page>与<%@include file>

来源:互联网 发布:crm系统数据 编辑:程序博客网 时间:2024/06/15 01:02

1、include指令:

<%@include file="文件的绝对路径或者相对路径"%>

file属性是必填的(绝对或相对路径),但它不支持任何的表达式,也不允许通过挂参方式来传递参数。(即不能使用变量赋值,只能写死)


2、include动作

<jsp:include page="被包含文件的路径" flush="true/false">

   <jsp:param name="参数名称" value="参数值"/>

</jsp:inclue>

page属性是必填的(绝对或相对路径),但它及支持表达式也可传递参数。flush属性为缓冲区满时,清空缓冲区。


注:在两种用法中filepage属性都被解释为一个相对的URI如果它以斜杠开头,那么它就是一个环境相关的路径。将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释。

 

<%@ include file=”” %>

引入的页面可以只包含静态内容(例如HTML),也可以是一个普通的JSP页面。主页面和引入的页面融和在一起(引入的页面只是最为普通的文本进行融合,并不对动态内容求值),融合后的完整页面再被整体的转换为一个servlet,即是在翻译阶段执行(将JSP页面转换成servlet的阶段)




<jsp:include page=”” />


这个指令是在请求处理阶段而不是在翻译阶段执行的。该行为并不是要引入指定页面的实际内容,它将引入执行该引入页面后所产生的应答,这意味着你可以指定任何能够产生文本应答的web资源。JSP容器将通过一个内部的函数调用来调用指定的资源。因此,这些被引入的资源可以帮助处理原来的请求,所以这些资源可以访问请求作用域内的所有对象,以及所有的请求参数。但是要注意,它不能访问任何页面作用域属性,或是在主页面中声明的脚本变量。

<jsp:include>元素允许你包含动态文件和静态,这两种包含文件的结果是不同的。如果文件仅是静态文件,那么这种包含仅仅是把包含文件的内容加到jsp文件中去,而如果这个文件动态的,那么这个被包含文件也会被JSP编译器执行(这一切与asp相似)



你不能从文件名上判断一个文件是动态的还是静态的,比如aspcn.asp 就有可能只是包含一些信息而已,而不需要执行。<jsp:include>能够同时处理这两种文件,因此你就不需要包含时还要判断此文件是动态的还是静态的。

简单的说法就是:

<%@ include file=””%>引入静态页面:直接把文件内容读进来,不做任何处理。

<jsp:include page=””/>读入一个jsp文件已经生成的内容,而不是jsp文件本身。

 

实例


【include1.jsp】

<%@ page language="java"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>静态include范例</title></head><body>         <!--使用include编译指定导入页面-->         这是静态include测试主页面<br/>         <%@includefile="error.jsp"%>      </body></html>


【error.jsp】

<%@ page language="java"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>错误提示页</title></head><body>         这是一个错误处理页面<br/></body></html>


【结果】


windows下,找到tomcat安装目录下的work文件夹,进入Catalina文件夹下的localhost文件夹,找到当前项目所在的文件夹,找到org目录,进入其下的apache目录下的jsp文件夹,即可看到一个include1_jsp.java文件,这就是该include1.jsp对应生成的servlet类。(实在不好找就直接搜索嘛)


打开.java文件查看:


从方框中即可看出静态导入是:包含页面在编译时将完全包含被包含页面的代码。需要指出的是,静态导入还会将被包含页面的编译指令也包含进来,如果两个页面的编译指令有冲突,那么页面就会出错。也可以这么理解:它是纯粹的把部分代码写到了另一页面(或者说是共享),而那另一页面中不能有相同的变量名,但可以借用主页面的内容。

 

【include1.jsp】

<%@ page language="java"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>动态include范例</title></head><body>       这是动态include测试主页面<br/>       <jsp:includepage="error.jsp" /></body></html>

【结果】


打开include1_jsp.java:


打开error_jsp.java:

由上图可看出,动态导入只是使用了一个include方法来插入目标页面的内容,而不是将目标页面完全融入到本页面中。


所以,我们在读include1.jsp这个页面的时候,读到<%@ include file="error.jsp"%>的时候,是将error.jsp中内容复制到include1.jsp这个页面成为include1.jsp的一部分在执行;

而在读到<jsp:includepage="error.jsp"/>的时候,则是转到error.jsp去执行,error执行完后将结果返回,这个过程就好像是java中的方法调用。


总结


<%@includefile="/public/head.jsp" %>

这个是静态包含。先合并,再翻译为servlet。一般用在开发一个页面(jsp,html),头部页面为公共页面,其他页面引入头部页面。

<jsp:includepage="/public/head.jsp>

这个是动态包含。先编译,再合并。包含页面与被包含页面各自翻译、编译,再在运行时候合并在一起显示。


  • 静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容。
  • 静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。
  • 动态导入还可以增加额外的参数。

 


部分参考:

http://blog.csdn.net/panyongcsd/article/details/38235713

http://www.cnblogs.com/sharpest/p/6117629.html

http://blog.csdn.net/xumingjie1658/article/details/8793591


0 0
原创粉丝点击