`

JSP中include指令和include行为的区别

阅读更多

JSP中include指令和include行为的区别

<!--enpproperty <date>2007-08-09 11:42:12.0</date><author></author> <title>JSP中include指令和include行为的区别</title> <keyword></keyword><subtitle></subtitle><introtitle></introtitle><siteid>1</siteid><nodeid>13120</nodeid><nodename>互动BLOG</nodename>/enpproperty--><!--enpcontent-->

 我们都知道在jsp中include有两种形式,分别是

    < %@ include file=” ”%>

    < jsp:include page=” ” flush=”true”/>

    前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。

    通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include。具体在哪些时候用< %@ include file=” ”%>,哪些时候用< jsp:include page=” ” flush=”true”/>.这种形式。首先要明白的是它们之间的区别。只有了解了它们用法的不同才理解该在何时去用以及如何选择。

    < %@ include file=” ”%>,jsp的include指令元素读入指定页面的内容。并把这些内容和原来的页面融合到一起。(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的。

    这里对翻译阶段进行一下说明:我们知道,jsp页面不能原封不动地被传送给浏览器,所有的jsp元素都必须首先由服务器进行处理。这是通过将jsp页面转达化成servlet,然后执行这个servlet来完成的。服务器需要一个jsp容器来处理jsp页面。jsp容器通常以servlet的形式来实现,这个servlet经过配置,可以处理对jsp页面的所有请求。

    Jsp容器负责将jsp页面转化成servlet(称为jsp页面实现类?JSP Page implementation class),并编译这个servlet。这两步就构成了翻译阶段.

    由此我们就会知道:jsp页面是把include指令元素所指定的页面的实际内容(也就是代码段)加入到引入它的jsp页面中,合成一个文件后被jsp容器将它转化成servlet。可以看到这时会产生一个临时class文件和一个java文件。下面举个例子。

    服务器用tomcat,引入页面的jsp文件叫test.jsp。被引入的页面叫date.jsp.这个jsp文件里存放的是一个有关时间的jsp代码,当前的上下文根设为test

//======date.jsp的源文件=====//
<%@ page language=”java” contentType="text/html;charset=gb2312"%>
<%
java.util.Date date=new java.util.Date();
String date_cn ="";
String dateStr = "";
switch(date.getDay())
{
case 0:date_cn ="日"; break;
case 1:date_cn ="一"; break;
case 2:date_cn ="二"; break;
case 3:date_cn ="三"; break;
case 4:date_cn ="四"; break;
case 5:date_cn ="五"; break;
case 6:date_cn ="六"; break;
}
dateStr = (1900+date.getYear())+"年"+(date.getMonth()+1)+"月"+date.getDate()+
"日(星期" + date_cn + ")";
%>
document.write("<%=dateStr%>");
//======以下是test.jsp的源文件=============//
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
<html>
<head>
<title>include的两种用法</title>
<jsp:include page=”date.jsp” flush=”true”/>
<%--@ include file=”date.jsp” %-->
//我们在这里用include的两种不同形式来引入date.jsp这个文件.
<head>
<body>
<table><tr><td>
有关jsp中include的两种用法.敬请关注。
</td></tr></table>
</body>
</html>

    在test.jsp 文件中,我们只输出了一行文本“ 有关jsp中include的两种用法.敬请关注。”,现在让我们先用这种形式引入date.jsp这个文件。你想会出现什么问题了吗?此时出现了错误提示:

HTTP Status 500 ?
org.apache.jasper.JasperException: /date.jsp(0,0) Page directive: 
can&apos;t have multiple occurrences of contentType

    以下还有一堆错误,但我们只要看这里就知道问题的所在了。状态码为http 500服务器内部错误。再看下面的提示。在date.jsp页面中不能指定多个contentType.

    原因就在这里了。是因为在翻译阶段,date.jsp文件的代码被原封不动地加入到了test.jsp页面从而合成一个文件。合成后的文件中就会相同的:

    这句代码。解决的办法是把date.jsp文件中的这句删掉。刷新后再请求test.jsp页面

    请求test.jsp在页面显示如下

    2003年12月10日 13:12:40

    有关jsp中include的两种用法.敬请关注。

    这时我们还不能发现什么。还是去查看tomcat下的临时文件吧。到那里去看看date.jsp文件的内容是否已被加入到了test.jsp文件中。

    < 注.此处的tomcat装在E盘根目录下>

    目录

    E:\tomcat\work\Standalone\localhost\test.

    在这个目录下会看到

    test_jsp.java和test_jsp.class两个文件。

    这里的java文件就是jsp容器将jsp转化成了servlet而得到的test_jsp.java这个文件。

    相对应的test_jsp.class这个文件就是编译test_jsp.java这个servlet文件产生的类文件了。打开所产生的servlet文件(test_jsp.java)。此时我们会发现,在test.jsp 文件被转化成servlet文件时,在输出的< haed >之间加入了一些不是test.jsp页面里面的代码,新加入的内容就是 date.jsp里面的代码: 新加入了哪些内容或是否真的加入了新的内容请自己测试去看一下就会一目了然了.在这里不再详述.

    以上就是我们用< %@ include file=”date.jsp”%>这种形式得到的结果.

    下面我们换用< jsp:include page=”dae.jsp” flush=”true”/>也就是将

    < %@ include file=”date.jsp”%>换成< jsp:include page=”dae.jsp” flush=”true”/>,然后请求test.jsp.

    2003? ê 12??10?? 13:30:13

    有关jsp中include的两种用法.敬请关注。

    此时会在页面上看见.我们所引入date.jsp输出的日期中中文出现了乱码.什么原因?是因为include行为元素是在请求处理阶段执行的(此处要对请求处理阶段进行说明一下.Jsp容器除了上面提到的负责将jsp页面转化成servlet外,还负责调用jsp页面实现类以处理每个请求并产生应答.这个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文件)。

    所以在我们作include行为元素引入页面时,实际只是引用了date.jsp这个文件被转化并被编译后产生的servlet类文件.既如此, date.jsp就是作为一个单独的文件在执行后才被test.jsp文件运行时调用.由于date.jsp文件中没有指定字符编码.所以出现了乱码.解决办法是在date.jsp文件中重新把刚才去掉的

    这行语句加入后刷新重新运行.此时页面显示正确,并跟用include指令正常运行时一样.再查看tomcat下的临时文件会发现.此时多出了一个 date_jsp.java文件和一个date_jsp.class文件.这两个文件得来的方式跟test_jsp.java和 test_jsp.class文件得来的方式一样.再查看一下此时test_jsp.java文件的代码会发现.此时只新增加了一句代码:

    JspRuntimeLibrary.include(request, response, "date.jsp", out, true);

    它并没有把date.jsp文件的代码加入到test.jsp.

    只是在运行时引入了date.jsp页面执行后所产生的应答.这意味着我们可以指定任何能够产生应答的Web资源,(例如一个servlet或一个jsp页面),只要这些资源所产生的类型和jsp页面产生的内容类型相同.JSP容器将通过一个内部的函数调用来执行指定的资源.因此,这些被引入的资源可以帮助处理原来的请求,所以这些资源可以访问请求作用域内的所有对象.以及所有原来的请求参数.

    由于在主页面被请求时,这些页面还没有被引入到主页面中,所以你可以对page属性使用一个请求时属性值,以便根据运行时的情况来决定要引入哪一个页面.还可以添加一些将被引入的页面读取的请求参数.

<jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” >
<jsp:param name=”fitstParamer” value=”firstValue”>
<jsp:param name=”lastParamer” value=”lastValue”>
</jsp:include>

    如果修改了被引入的jsp页面,那么可以立刻使用该页面的最新版本,这是因为对待被引入的页面的方式与对待由浏览器直接调用的jsp页面的方式完全相同.即容器检测页面的变化,并自动进入翻译阶段,以得到页面的最新版本.

    (注意,include行为元素同jsp其它元素一样,没有行为体时要以”/”结束.就像下面这样.

    < jsp:include page=”” flush=”true” />

    以下是对include 两种用法的区别

    主要有两个方面的不同;

    1.执行时间上:

    < %@ include file=”relativeURI”%> 是在翻译阶段执行

    < jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行.

    2.引入内容的不同:

    < %@ include file=”relativeURI”%>

    引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.

    < jsp:include page=”relativeURI” flush=”true” />引入执行页面或servlet所生成的应答文本.

    另外在两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径.将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.更多有关URL是如何解释的请参考相关资料或书籍。(

<!--/enpcontent-->
分享到:
评论

相关推荐

    毕设项目:基于J2ME的手机游戏开发(JAVA+文档+源代码)

    第一章 绪论 1 1.1 研究背景 1 1.2 研究内容 1 第二章 J2ME及其体系结构概述 2 2.1 J2ME简介 2 2.2 J2ME 体系结构 2 2.3 移动信息设备简表概述 3 2.3.1 MIDP的目标硬件环境 3 2.3.2 MIDP应用程序 3 2.3.3 CLDC和MIDP库中的类 3 2.4 J2ME API简介 4 2.4.1 MIDP API概述 4 2.4.2 MIDlet应用程序 4 2.4.3 使用定时器 5 2.4.4 网络 6 2.4.5 使用Connector 7 2.4.6 使用HttpConnection 8 2.4.7 永久性数据(RMS) 9 2.4.8 存储集(Record Store) 10 2.4.9 记录 11 2.4.10 枚举 12 2.4.11 异常 13 2.5 用户界面(LCDUI 13 2.5.1 UI基础 13 2.5.2 高级UI 14 2.5.3 低级UI 15 第三章 手机游戏开发过程 16 3.1 贪吃蛇游戏的规则简介以及开发环境 16 3.1.1 贪吃蛇游戏的规则简介 16 3.1.2 开

    软件工程编译原理作业过程详细

    词法分析,递归下降语法分析,LR语法分析,目标代码生成等

    jdk-8u321-windows-x64.exe

    jdk-8u321-windows-x64.exe

    23级信息安全技术应用02班+李炎坤+235102070252.zip

    23级信息安全技术应用02班+李炎坤+235102070252.zip

    229ssm_mysql_jsp 健身俱乐部网站.zip(可运行源码+sql文件+文档)

    本系统结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用目前最流行的SSM 框架和 Eclipse 编辑器、MySQL 数据库设计 并实现的。本健身俱乐部网站系统主要包括系统用户管理、新闻数据管理、用户管理、教练管理、器材管理、教室管理、课程安排管理、选课管理、课程管理、会员卡管理、办卡管理等多个模块。它帮助健身俱乐部网站实现了信息化、网络化,通过测试,实现了系统设计目标,相比传统的管理模式,本系统合理的利用了健身俱乐部网站数据资源,有效的减少了健身俱乐部网站的经济投入,大大提高了健身俱乐部网站的效率。 根据需求,将健身俱乐部网站系统功能模块主要分为管理员模块、用户模块。管理员添加课程种类、教练、课程、器材管理、教室等信息,用户可以进入网站,实现课程安排、添加办卡、添加选课等。 关键词:健身俱乐部网站;SSM框架;MySQL数据库

    多彩线条的艺术:Matplotlib中颜色与线型的深度指南

    Matplotlib是一个Python的绘图库,广泛用于生成各种格式的图表和图形。它基于NumPy,一个用于科学计算的Python库,并提供了一个类似于MATLAB的绘图框架,使得Matplotlib非常适合于数学计算和工程领域中的可视化需求。 Matplotlib的主要特点包括: 1. **多格式输出**:支持多种输出格式,包括PNG、PDF、SVG、EPS等。 2. **交互式绘图**:可以通过交互式后端,如WebAgg、TkAgg、Qt4Agg等,实现图形的交互式浏览。 3. **丰富的图表类型**:支持线图、散点图、柱状图、直方图、饼图、3D图形等多种图表类型。 4. **自定义性强**:提供丰富的接口,可以自定义图形的各个方面,包括颜色、线型、标记、文字、图例、坐标轴等。 5. **动画和动态图形**:支持动画和动态图形的生成,可以创建动态展示数据变化的图形。 6. **与其他库集成**:可以与Pandas、SciPy、Statsmodels等其他Python科学计算库无缝集成。 7. **发布和分享**:生成的图形可以很容易地嵌入到报告、网页或通过各种方式分享。

    马克思主义基本原理概论复习题.doc

    马克思主义基本原理概论复习题.doc

    基于java+数据库设计的高校选课管理系统+源码+开发文档+设计思路(毕业设计&课程设计&项目开发)

    基于java+数据库设计的高校选课管理系统+源码+开发文档+设计思路,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: 开发意义: 随着信息技术不断向深入发展,越来越多的学校开始着手信息化建设。其中学生选课、成绩信息化管理就是其中重要的一块内容。学生选课与成绩信息规模大、项目条数多、信息量庞大,传统的人工管理方式显然已经无法满足要求,需要借助计算机来进行现代化信息管理,从而提高管理的准确性与高效性。 可行性: 传统人工管理成绩存在诸多弊病,比如准确性低、效率低等。计算机具有存储快、查找便利、准确性高的特点,能非常好的解决人工管理的弊病。 应用环境: Web服务器:tomcat8.5; 编程工具Eclipse Java 2019-09; 数据库:SQL sever 2017; 技术路线: jsp+servlet+javabean; 1.1系统功能需求 系统功能框架介绍,处理模块描述。 管理员: 查询教师名单; 添加教师信息; 修改教师信息; 删除教师信息; 查询学生名单; 添加学生信息; 修改学生信息; 删除学生信息; ....

    MVC设计模式的外文参考资料集

    mysql对于正在进行毕业设计的同学们,我推荐一份专注于MVC设计模式的资源文件。这份资源主要涵盖了外文文献,同时提供了中文翻译,便于大家更深入地理解。它详细讲述了MVC的起源、实现方法以及核心原理,对于希望全面了解MVC设计模式的同学来说,这将是一份非常宝贵的资料。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    Docker 配置和使用

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 以下是一些基本的 Docker 配置和使用示例: 安装 Docker: 在 Ubuntu 系统上,可以使用以下命令安装 Docker: sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io 在 CentOS 系统上,可以使用以下命令安装 Docker: sudo yum install docker-ce docker-ce-cli containerd.io

    基于 Java+Mysql 实现的简易聊天软件【面向对象课程设计】(论文+源码+答辩 PPT)

    【作品名称】:基于 Java+Mysql 实现的简易聊天软件【面向对象课程设计】(论文+源码+答辩 PPT) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: eclipse软件 mysql驱动程序 mysql安装并开启服务 navicat for mysql软件来间接使用mysql 该课程设计要求学生综合运用在《面向对象程序设计》课程中学到的面向对象技术与实际编程相结合,独立完成一项较为完整、并具有一定实际功能的课程设计任务,同时加深学生对面向对象和Java编程技术的理解和掌握,培养实际的应用程序开发能力。在课程设计过程中,使学生养成良好的程序设计风格,并掌握Java应用程序的设计开发过程和编程方法、测试方法。培养学生使用Eclipse设计程序,使学生学会使用他们去开发软件。

    javaclooections类.docx

    javaclooections类.docx

    JavaEE技面试常见问题.doc

    JavaEE技面试常见问题.doc

    2010青海省java版本高级.docx

    2010青海省java版本高级.docx

    Gartner发布2024年企业高管增长议程:使网络安全投资与业务增长保持一致

    网络安全投资和准备被视为推动企业发展的关键因素。除了避免损失之外,高管还应利用有效的以业务为中心的安全方法,通过大规模实现敏捷性和创新来推动收入增长。 高增长公司通过扩大商业足迹来推动业绩,这需要大规模的创新、敏捷性和效率,并通过适当的网络安全投资来支持。 根据企业高管对2024 年 Gartner 增长议程调查的回应,隐私和安全位居第二,仅次于人工智能,对于实现企业收入增长至关重要。 高增长公司推动有效的安全和隐私方法,这些方法以结果为基础,并平衡保护企业的需求和企业增长的需求。

    UESTC研究生机器学习作业-线性回归,逻辑回归,BP神经网络,SVM,聚类,半监督学习python源码

    <项目介绍> -三、线性回归 四、逻辑回归 五、BP神经网络 六、SVM 七、聚类 九、半监督学习- 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    JSP学习指导手册或JSP教学资料集

    mysqlJSP编程入门指南 本资源文件为JSP编程的初学者提供了一份全面的学习目录。内容主要包括: JSP入门介绍:简要介绍JSP(JavaServer Pages)的概念和其在Web开发中的重要性。 JSP环境搭建:详细指导读者如何配置计算机环境,以支持JSP的开发和运行。 JSP语法基础:详细解释JSP的基本语法规则,帮助读者理解JSP脚本的基本构成。 JSP内置对象:介绍JSP中预定义的内置对象,如request、response、session等,并说明其在开发中的应用。 JSP常见问题解答:针对JSP开发中常遇到的疑惑和问题,给出解决方案和思路。 JSP扩展资源:涵盖面向对象编程和动态页面等高级话题,为深入学习JSP提供额外资源。 这份指南旨在帮助读者系统地掌握JSP编程的基础知识,为后续的Web开发打下坚实的基础。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    《Hive的开发指南》

    Hive 基本概念 Hive 应用场景。 Hive 与hadoop的关系。 Hive 与传统数据库对比。 Hive 的数据存储机制。 Hive 基本操作 Hive 中的DDL操作。 在Hive 中如何实现高效的JOIN查询。 Hive 的内置函数应用。 Hive shell的高级使用方式。 Hive 常用参数配置。 Hive 自定义函数和Transform的使用技巧。 Hive UDF/UDAF开发实例。 Hive 执行过程分析及优化策略

    PHP语言教程案例,从一个简单的“Hello, World!”程序开始.zip

    PHP语言教程案例,从一个简单的“Hello, World!”程序开始.zip

    基于Python的校园爱心帮扶平台的设计与实现-开题报告.docx

    随着社会的发展,人们日益关注社会公益事业,以及校园内的互助精神。尤其是大学校园,是多元文化和人才的聚集地。在这个社会群体中,存在着学生和教职工,他们有着不同的需求和能力。一方面,学生可能需要获得经济援助、物品支持,或者寻找志愿者机会,以发挥他们的社会责任感。另一方面,教职工可能希望为校园的公益活动提供支持,或者寻找合适的渠道,将不再需要的物品回馈给社会。 然而,校园内的爱心互助活动存在一些挑战,例如信息不对称导致了需求方和供给方之间的联系不畅。还有如何管理和统计捐赠物品、义卖商品以及帮扶行动的情况也是一个问题。这种情况需要一个高效的系统来协调和跟踪。以及管理用户信息以确保数据的安全性也是一个必须考虑的问题。 校园爱心帮扶平台是一个旨在鼓励校园社区内爱心互助活动的在线平台。它的目的是通过提供一个便捷的方式,让学生能够共享闲置物品、义卖商品、参与帮扶行动、寻求校园内的帮助以及获取爱心资讯。同时,管理员也扮演着关键的角色,负责审核和管理平台上的信息。学生和管理员可以更好地协作,为校园内需要帮助的人提供支持。这有助于培养学生的社会责任感和爱心意识,使校园成为一个更加温馨的校园。

Global site tag (gtag.js) - Google Analytics