一、include 指令
格式:
Java代码 收藏代码
<%@include file="文件的绝对路径或者相对路径"%>
file属性:指定被包含的文件,是必添属性。该属性不支持任何表达式,也不允许通过如下方式来传递参数。
Java代码 收藏代码
<%@include file="welcome.jsp?name=mr"%>
如果路径以“/”开头,那么指定的是一个绝对路径,将在当前应用的根目录下查找文件,如果是以文件名或文件夹名开头,那么指定的是一个相对路径,将在当前应用的根目录下查找文件。
二、include动作
格式:
Java代码 收藏代码
<jsp:include page="被包含文件的路径" flush="true/false">
<jsp:param name="参数名称" value="参数值"/>
</jsp:inclue>
page属性:该属性指定了被包含文件的路径,其值可以是一个代表了相对路径的表达式.当路径以"/"开头时,则按照当前应用的路径查找这个文件,如果路径是以文件名或者目录名称开头,那么将按照当前的路径来查找被包含的文件,
flush属性:表示当输出缓冲区满时,是否清空缓冲区.
三、两者的不同
1、从属性方面进行区分
include 指令通过file属性来指定被包含的页面,include指令将file属性看作一个实际存在的文件的路径。所以该属性不支持任何表达式,也不支持在struts应用中的请求模式(如*.do),若在file属性值中应用JSP表达式,会抛出异
常,如下面的代码:
Java代码 收藏代码
<% String path="login.jsp"%>
<%@inclue file="<%=path%>"%>
include动作标识通过page属性来指定被包含的页面,该属性支持JSP表达式和Struts 应用在的请求模式
2、从处理方式方面进行区分
使用include指令,被包含的文件为原封不动的插入到包含页中使用该指令的位置,然后JSP编译器再对这个合成的文件进行编译,所以在一个JSP页面中使用include指令来包含另外一个JSP页面,最终编译后的文件只有一个。
使用include 动作标识包含文件时,当该标识执行时,程序会将请求转发到(注意是转发而不是重定向)被包含的页,并将执行结果输出到浏览器中,然后返回包含页继续执行后面的代码,因为服务器执行的是两个文件。所以JSP编
译器会分别对这两个文件进行编译。
3、从包含方式方面进行区分
使用include指令包含文件,最终服务器执行的是将两个文件合成后由JSP编译器编译成一个Class 文件,所以被包含的文件的内容是固定不变的,若改变了被包含的文件,则主文件的代码就发生了变化,因此服务器会重新编译主文件
,include指令的这种包含称为静态包含
使用include动作标识通常是包含那些经常需要改动的文件,此时服务器执行的是两个文件,被包含的文件改变不会影响到主文件,因此服务器不会对主文件重新编译,而只需要重新编译被包含的文件即可,而对被包含文件的编译是在执
行时才进行的,也就是说,只有当include动作被执行时,使用该标识包含的目标文件才会被编译,否则被包含的文件不会被编译,所以这种包含过程称为动态包含。
4、从被包含文件的约定方面进行区分
JSP有一些标识符例如
Java代码 收藏代码
<%@page contentType="text/html;charset=gb2312"%>
在一个JSP页面中只能出现一次,这个时间用jsp动作包含一个文件时,包含页与被包含页面只能有一个文件有此标识,而jsp动作没有此限制。
------------------------------------------
简单说来:
include指令是指把其它页面的JAVA代码(源码)加进来,跟本页面的代码合并在一起,相当于把源码从那个页面复制到本页面中来,然后再编译。所以变量可以共用。并用由于本页面编译时已经包含了别的文件的源码,所以以后其它页面更改时,本页面并不理会,因为已经编译过了。
<jsp:include>动作是指两个页面的代码运行完以后,再把包含的那个页面运行后的HTML结果页面加到本页面运行后的HTML结果页面中来。所以变量不能共用。
------------------------------------------
我们都知道在jsp中include有两种形式,分别是Include指令:<%@ include file=""%>和include动作:<jsp:include page="" flush="true"/>
前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。
通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include。具体在哪些时候用<%@ include file=""%>,哪些时候用<jsp:include page="" flush="true"/>。这种形式。首先要明白的是它们之间的区别。只有了解了它们用法的不同才理解该在何时去用以及如何选择。
两者最重要的区别:JSP指令<%@ include file=""%>,是将被引入的JSP与原JSP融合到一起,而这个融合过程是在翻译阶段进行的。
为什么需要翻译阶段?我们知道,jsp页面并不是原封不动的发送到客户端的,因为浏览JSP页面的客户端并不需要安装Java虚拟机,客户端机器并不能读懂JSP,它能读懂的只有HTML、JavaScript (当然还有其他,例如:Applet、Flex、AxtiveX等等,但那些都需要下载相应的客户端解析器),这样就需要Servlet Engine (例如:Tomcat) 将所有的JSP元素进行处理。这是通过将jsp页面转化成Servlet,然后执行这个Servlet来完成的。服务器需要一个jsp容器来处理jsp页面。jsp容器通常以Servlet的形式实现,这个servlet经过配置,可以处理对jsp页面的所有请求。
JSP容器负责将jsp页面转化成servlet,并编译这个servlet。这两个步骤就构成了翻译阶段。
而jsp翻译之后的servlet输出的内容才是客户端浏览器能够识别的东西,HTML、JavaScript之类的,servlet是使用JspWriter对象输出输出这些HTML、JavaScript的。如果你去翻看翻看jsp编译后的servlet代码,你会发现很有意思的东西,比如Struts的<logic:iterator>标签,被翻译成do{}while()语句实现循环。如果我们把<bean:write>写在<logic:iterator>内部,则在do的内部会出现类似_jspx_meth_bean_write_2(_jspx_th_logic_iterate_0, _jspx_page_context)的方法调用。这些说明了一切。
由此我们知道:jsp页面是把include指令元素(<%@ include file=""%>)所指定的页面的实际内容(也就是代码段)加入到引入它的jsp页面中,合成一个文件后被jsp容器将它转化成servlet。可以看到这时会产生一个临时class文件和一个servlet源文件。而动作元素(<jsp:include page=""/>)是在请求处理阶段引入的,会被JSP容器生成两个临时class文件和两个servlet原文件。而引入的只是servlet的输出结果,即JspWriter对象的输出结果,而不是jsp的源代码。
格式:
Java代码 收藏代码
<%@include file="文件的绝对路径或者相对路径"%>
file属性:指定被包含的文件,是必添属性。该属性不支持任何表达式,也不允许通过如下方式来传递参数。
Java代码 收藏代码
<%@include file="welcome.jsp?name=mr"%>
如果路径以“/”开头,那么指定的是一个绝对路径,将在当前应用的根目录下查找文件,如果是以文件名或文件夹名开头,那么指定的是一个相对路径,将在当前应用的根目录下查找文件。
二、include动作
格式:
Java代码 收藏代码
<jsp:include page="被包含文件的路径" flush="true/false">
<jsp:param name="参数名称" value="参数值"/>
</jsp:inclue>
page属性:该属性指定了被包含文件的路径,其值可以是一个代表了相对路径的表达式.当路径以"/"开头时,则按照当前应用的路径查找这个文件,如果路径是以文件名或者目录名称开头,那么将按照当前的路径来查找被包含的文件,
flush属性:表示当输出缓冲区满时,是否清空缓冲区.
三、两者的不同
1、从属性方面进行区分
include 指令通过file属性来指定被包含的页面,include指令将file属性看作一个实际存在的文件的路径。所以该属性不支持任何表达式,也不支持在struts应用中的请求模式(如*.do),若在file属性值中应用JSP表达式,会抛出异
常,如下面的代码:
Java代码 收藏代码
<% String path="login.jsp"%>
<%@inclue file="<%=path%>"%>
include动作标识通过page属性来指定被包含的页面,该属性支持JSP表达式和Struts 应用在的请求模式
2、从处理方式方面进行区分
使用include指令,被包含的文件为原封不动的插入到包含页中使用该指令的位置,然后JSP编译器再对这个合成的文件进行编译,所以在一个JSP页面中使用include指令来包含另外一个JSP页面,最终编译后的文件只有一个。
使用include 动作标识包含文件时,当该标识执行时,程序会将请求转发到(注意是转发而不是重定向)被包含的页,并将执行结果输出到浏览器中,然后返回包含页继续执行后面的代码,因为服务器执行的是两个文件。所以JSP编
译器会分别对这两个文件进行编译。
3、从包含方式方面进行区分
使用include指令包含文件,最终服务器执行的是将两个文件合成后由JSP编译器编译成一个Class 文件,所以被包含的文件的内容是固定不变的,若改变了被包含的文件,则主文件的代码就发生了变化,因此服务器会重新编译主文件
,include指令的这种包含称为静态包含
使用include动作标识通常是包含那些经常需要改动的文件,此时服务器执行的是两个文件,被包含的文件改变不会影响到主文件,因此服务器不会对主文件重新编译,而只需要重新编译被包含的文件即可,而对被包含文件的编译是在执
行时才进行的,也就是说,只有当include动作被执行时,使用该标识包含的目标文件才会被编译,否则被包含的文件不会被编译,所以这种包含过程称为动态包含。
4、从被包含文件的约定方面进行区分
JSP有一些标识符例如
Java代码 收藏代码
<%@page contentType="text/html;charset=gb2312"%>
在一个JSP页面中只能出现一次,这个时间用jsp动作包含一个文件时,包含页与被包含页面只能有一个文件有此标识,而jsp动作没有此限制。
------------------------------------------
简单说来:
include指令是指把其它页面的JAVA代码(源码)加进来,跟本页面的代码合并在一起,相当于把源码从那个页面复制到本页面中来,然后再编译。所以变量可以共用。并用由于本页面编译时已经包含了别的文件的源码,所以以后其它页面更改时,本页面并不理会,因为已经编译过了。
<jsp:include>动作是指两个页面的代码运行完以后,再把包含的那个页面运行后的HTML结果页面加到本页面运行后的HTML结果页面中来。所以变量不能共用。
------------------------------------------
我们都知道在jsp中include有两种形式,分别是Include指令:<%@ include file=""%>和include动作:<jsp:include page="" flush="true"/>
前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。
通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include。具体在哪些时候用<%@ include file=""%>,哪些时候用<jsp:include page="" flush="true"/>。这种形式。首先要明白的是它们之间的区别。只有了解了它们用法的不同才理解该在何时去用以及如何选择。
两者最重要的区别:JSP指令<%@ include file=""%>,是将被引入的JSP与原JSP融合到一起,而这个融合过程是在翻译阶段进行的。
为什么需要翻译阶段?我们知道,jsp页面并不是原封不动的发送到客户端的,因为浏览JSP页面的客户端并不需要安装Java虚拟机,客户端机器并不能读懂JSP,它能读懂的只有HTML、JavaScript (当然还有其他,例如:Applet、Flex、AxtiveX等等,但那些都需要下载相应的客户端解析器),这样就需要Servlet Engine (例如:Tomcat) 将所有的JSP元素进行处理。这是通过将jsp页面转化成Servlet,然后执行这个Servlet来完成的。服务器需要一个jsp容器来处理jsp页面。jsp容器通常以Servlet的形式实现,这个servlet经过配置,可以处理对jsp页面的所有请求。
JSP容器负责将jsp页面转化成servlet,并编译这个servlet。这两个步骤就构成了翻译阶段。
而jsp翻译之后的servlet输出的内容才是客户端浏览器能够识别的东西,HTML、JavaScript之类的,servlet是使用JspWriter对象输出输出这些HTML、JavaScript的。如果你去翻看翻看jsp编译后的servlet代码,你会发现很有意思的东西,比如Struts的<logic:iterator>标签,被翻译成do{}while()语句实现循环。如果我们把<bean:write>写在<logic:iterator>内部,则在do的内部会出现类似_jspx_meth_bean_write_2(_jspx_th_logic_iterate_0, _jspx_page_context)的方法调用。这些说明了一切。
由此我们知道:jsp页面是把include指令元素(<%@ include file=""%>)所指定的页面的实际内容(也就是代码段)加入到引入它的jsp页面中,合成一个文件后被jsp容器将它转化成servlet。可以看到这时会产生一个临时class文件和一个servlet源文件。而动作元素(<jsp:include page=""/>)是在请求处理阶段引入的,会被JSP容器生成两个临时class文件和两个servlet原文件。而引入的只是servlet的输出结果,即JspWriter对象的输出结果,而不是jsp的源代码。