jsp:include

整理自网上:

在jsp中include有两种形式:
1. <%@ include file=” ”%>
2. <jsp:include page=” ” flush=”true”/>

前者是指令元素、后者是行为元素。

主要有两个方面区别:

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的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.

通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include,即<%@ 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文件。下面举个例子。

举个例子:

date.jsp

1 <%@ page language=”java” c%>
 2 <%
 3 java.util.Date date=new java.util.Date();
 4 String date_cn ="";
 5 String dateStr = "";
 6 switch(date.getDay())
 7 {
 8 case 0:date_cn ="日"; break;
 9 case 1:date_cn ="一"; break;
10 case 2:date_cn ="二"; break;
11 case 3:date_cn ="三"; break;
12 case 4:date_cn ="四"; break;
13 case 5:date_cn ="五"; break;
14 case 6:date_cn ="六"; break;
15 }
16 dateStr = (1900+date.getYear()) + "年" + (date.getMonth()+1) + "月" + date.getDate() + "日(星期" + date_cn + ")";
17 %>
18 document.write("<%=dateStr%>");

test.jsp

1 <%@ page language=”java” contentType=”text/html;charset=gb2312”%>
 2 <html>
 3 <head>
 4 <title>include的两种用法</title>
 5 <jsp:include page=”date.jsp” flush=”true”/>
 6 <%--@ include file=”date.jsp” %-->
 7 <!-- 我们在这里用include的两种不同形式来引入date.jsp这个文件. -->
 8 <head>
 9 <body>
10 <table><tr><td>
11 <!-- 有关jsp中include的两种用法.敬请关注。-->
12 </td></tr></table>
13 </body>
14 </html>

1.使用<%@ include file=”date.jsp” %>方式在test.jsp中引入date.jsp:

请求test.jsp,

错误:[HTTP Status 500:contentType重复定义,因为date.jsp原封不动加到了test.jsp]

解决:date.jsp文件中删掉<%@ page language=”java” contentType=”text/html;charset=gb2312”%>

查看tomcat下的临时文件,到那里去看看date.jsp文件的内容是否已被加入到了test.jsp文件中。

在目录下会看到test_jsp.java和test_jsp.class两个文件.

这里的java文件就是jsp容器将jsp转化成了servlet而得到的test_jsp.java。相对应的test_jsp.class这 个文件就是编译test_jsp.java这个servlet文件产生的类文件。

2.换用<jsp:include page=”dae.jsp” flush=”true”/>

请求test.jsp:

乱码:[2003? ê 12??10?? 13:30:13 ]

解决:date.jsp文件中加上<%@ page language=”java” contentType=”text/html;charset=gb2312”%>

其实Jsp容器除了负责将jsp页面转化成servlet外,还负责调用jsp页面实现类以处理每个请求并产生应答.这 个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文件。

当include行为元素引入页面时,实际只是引用了date.jsp这个文件被转化并被编译后产生的servlet类文件。

所以date.jsp是作为一个单独的文件在执行后才被test.jsp文件运行时调用,由于date.jsp文件中没有指定字符编码.所以出现了乱码。

查看tomcat下的临时文件会发现.此时多出了一个 date_jsp.java文件和一个date_jsp.class文件

再查看一下此时test_jsp.java文件的代码会发现.此时只新增加了一句代码: JspRuntimeLibrary.include(request, response, "date.jsp", out, true);

我们可以指定任何能够产生应答的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页面的方式完全相同.即容器检测页面的变化,并自动进入翻译阶段,以得到页面的最新版本.

时间: 2024-10-06 01:19:35

jsp:include的相关文章

jsp:include怎么设置才能正确显示包含的页面呢

1.项目的所有jsp都放在WEB-INF文件夹之下,使用的是SpirngMVC进行了过滤,jsp:include只能引入WEB-INF外部的jsp文件,对于改变后缀显示为htm的jsp的WEB-INF下的文件,是访问不到的.2.使用jstl的c:import标签就可以很好的解决这个问题,c标签引入的是处理后的结果.

JSP——include的使用

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6044676.html JSP中,include是一个经常用到的标签.当应用程序中所有的页面的某些部分(如标题.页脚和导航栏)都相同的时候,我们就可以考虑用include.但是相同的部分有静态的(装载进页面显示后再也不变的),有动态的(装载进页面后还会改变,如:随时间改变.随用户行为改变等).那么,对这两种类型的内容的包含方式一样吗?当然不一样. 一.静态包含:<%@ include file="包含页

&lt;jsp:include&gt;和&lt;%@ include %&gt;的区别

使用<%@ include %>指令元素只是将页面的内容静态的包含进来,如果被包含的文件中有JSP代码,则会执行该代码,而不管该文件是否为动态文件. <jsp:include>动作元素动态地包含文件,如果被包含的文件是静态的,则直接包含内容,不会进行处理:而如果被包含的文件是动态地,则先执行,再包含结果并进行显示. 使用<%@ include %>指令元素是将所有的被包含文件包含进来之后,再进行编译等处理,可以简单的将其称为“先包含再处理“. 而使用<jsp:in

jsp include flush true

设置flush为true,就是说,如果你的缓冲区的内容很多了,就将数据读出,以免数据泄漏,造成错误服务器端页面缓冲,大致的意思是,在将生成的HTML代码送到客户端前,先在服务器端内存中保留,因为解释JSP或Servlet变成HTML是一步步进行的,可以在服务器端生成完HTML或生成一部分HTML(所占用字节数已达到指定的缓冲字节数)后再送到客户如果不缓冲,就会解释生成一句HTML就向客户端送一句在<jsp:include语句中,必须设置flush="true">

include指令和&lt;jsp:include&gt;标准动作

利用JSP的包含机制,可以有效的避免重复,把可重用的部分独立出去,使用include把它们包含到当前文件.JSP有两种包含机制:include指令和<jsp:include>标准动作. 1.include指令 2.<jsp:include>标准动作 3.内部原理 include指令和<jsp:include>标准动作看上去一样,而且通常有相同的效果,但是它们生成的servlet代码并不相同. include指令在转换时发生,它就像把被包含的文件复制到当前文件一样:<

include与jsp:include区别

我们都知道在jsp中include有两种形式,分别是 <%@ include file=” ”%> <jsp:include page=” ” flush=”true”/> 前者是指令元素.后者是行为元素.具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题 一:执行时间上: <%@ include file=”relativeURI”%> 是在翻译阶段执行 <jsp:include page=”relativeURI” flush=”t

jsp的静态包含与动态包含:&lt;%@ include file=&quot;&quot; %&gt;和&lt;jsp:include page=&quot;&quot;&gt;&lt;/jsp:include&gt;区别与分析

<%@ include file="" %>是将文件原封不动的copy进现有的文件中,像是拼接好后,再编译成为servlet运行. <jsp:include page=""></jsp:include>是编译后的servlet运行到该句时,跳转到指定的jsp编译的那个servlet继续运行,然后将运行结果,copy到现在的jsp中,故包含与被包含文件都是单独运行的. 在开发过程中,我们需要正确选择使用.举个例子: 比如在工程项目中

Jsp Include指令 与动作区别

在说include指令和动作之前,我们先来了解下 jsp的生命周期. jsp生命周期 分为5个阶段 解析 servle容器检查页面语法 翻译将jsp编译成servlet源文件 编译 servlet容器将servlet源文件,生成为servlet类 运行加载对应的servlet类,创建实例,调用方法 销毁调用servelt销毁方法,销毁实例 以上为基础,进入正题 jsp的include有两种形式分别为 <%@include file=" " %> <jsp:includ

Jsp---解决jsp:include和jsp:forward中文乱码

其实很简单:只要在主页面执行request.setCharacter("utf-8")即可. 主页面 1 <body> 2 <% 3 request.setCharacterEncoding("utf-8"); 4 %> 5 <h1> 6 原页面的内容... 7 </h1> 8 <jsp:include page="demo02Do.jsp"> 9 <jsp:param value

jsp include 和EL函数为菜单栏动态添加样式

在模块中出现公用的菜单栏,如果每一页都单独有一个菜单栏维护起来很麻烦,每次增加一个菜单的话,菜单中的每个页面都需要修改菜单栏,稍有不慎,就会出现样式不一样的情况. 这时候就需要用到jsp的包含机制.包含机制有两种:include指令和<jsp:include/>标准动作. <%@ include file=" /jsp/widget/user/menuNavl.jsp"%> <jsp:include page=" /jsp/widget/user