JSP include指令
- 格式:doc
- 大小:166.00 KB
- 文档页数:2
JSP <jsp:include>包含动作<jsp:include>动作指令表示在当前的JSP页面中,包含静态或动态资源。
前面已经介绍过include指令,它是在JSP文件被转换成Servlet的时候引入文件,而这里的jsp:include动作不同,插入文件的时间是在页面被请求的时候。
<jsp:include>动作的文件引入时间决定了它的效率要稍微差一点,而且被引用文件不能包含某些JSP代码(例如不能设置HTTP头),但它的灵活性却要好得多。
<jsp:include>动作可以在当前JSP文件中包含txt文件、JSP文件、HTML文件和Servlet文件。
例如:下面对jsp:include标签具体格式中的参数说明如下:●page="{relativeURL | <%= expression %>}该参数为一相对路径,或者是代表相对路径的表达式。
如果路径以“/”开头,那么路径主要是参照JSP应用的上下关系路径。
如果路径是以文件名或目录名开头,那么这个路径就是正在使用JSP文件的当前路径。
●flush="true"注意,这里用户必须使用flush="true",不能使用false值,默认值为false。
●<jsp:param name="parameterName" value="{parameterValue | …/><jsp:param>子句能用来传递一个或多个参数给动态文件,用户可以在一个页面中使用多个<jsp:param>来传递多个参数。
<jsp:include>和<%@ include %>指令不同的是,<jsp:include>包含的内容可以是动态改变的,它在执行时才确定,而<%@ include %>包含的内容是固定不变的,一经编译,就不能改变。
JSP中include指令和include动作浅析⼀、 JSP⼯作原理JSP⽂件是⼀种Servlet,其⼯作⽅式是先部署源代码后编译为.class⽂件。
JSP会在客户端第⼀次请求JSP⽂件时被编译成Servlet,由Servlet处理客户端的请求。
具体流程如下图:举例说明JSP的编译过程。
客户端第⼀次请求index.jsp⽂件时,Tomcat先将index.jsp转换为标准的java源代码 index_jsp.java(该java⽂件存放在F:\apache-tomcat-7.0.68\work\Catalina\localhost \项⽬名\org\apache\jsp⽬录下),并将index_jsp.java编译成类⽂件index_jsp.class。
该class⽂件便是 JSP对应的Servlet。
编译完成后运⾏class⽂件响应客户端请求。
以后客户端访问index.jsp 时,服务器将不再重新编译JSP⽂件,⽽是直接调⽤index_jsp.class来响应客户端请求。
也就是说,JSP只会在客户端第⼀次请求的时候被编译,因此第⼀次请求会⽐较慢,⽽之后的请求就会速度⽐较快。
⼆、 Include指令Include指令可以在JSP程序中插⼊多个外部⽂件(如:JSP、HTML、java程序,甚⾄是⽂本)。
在转换成Servlet之前,include指令就会将相应的⽂件包含进主⽂件,然后⼀并转换成Servlet,编译⽣成⼀个class⽂件,最后⼀起执⾏。
语法:<%@ include file="relativeURL" %>file属性是include指令的必要属性,⽤于指定包含哪个⽂件。
其中relativeURL为被包含⽂件的路径。
Include指令可以被多次调⽤。
注意:include指令将对应的⽂件包含进主⽂件,等价于代码复制;所以在使⽤include指令时要注意主⽂件与被包含⽂件不能定义相同的变量,也就是要避免变量同名冲突。
jsp:include动作指令与include指令include动作指令可以在JSP页⾯中动态包含⼀个⽂件,这与include指令不同,前者可以动态包含⼀个⽂件,⽂件的内容可以是静态的⽂件也可以是动态的脚本,⽽且当包含的动态⽂件被修改的时候JSP引擎可以动态对其进⾏编译更新。
⽽include指令仅仅是把⼀个⽂件简单的包含在⼀个JSP页⾯中,从⽽组合成⼀个⽂件,仅仅是简单的组合作⽤,其功能没有include动作指令强⼤。
includeActon.jsp:<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%><html><head><title>include动作指令使⽤⽰例程序</title></head><body><font size="2"><jsp:include flush="true" page="header.txt"></jsp:include>这是⼀个JSP动作标签include的使⽤⽰例程序。
<br><jsp:include flush="true" page="footer.jsp"></jsp:include></font></body></html>header.txt:这⾥⽤include动作指令包含⼀个静态的⽂本⽂件。
<br>footer.jsp:<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%><html><body><%out.print("这⾥⽤include动作指令包含⼀个动态的JSP页⾯!");%></body></html>include.jsp:<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%><html><head><title>include指令使⽤⽰例程序</title></head><body><font size="2">这是include指令的使⽤⽰例程序。
include js用法静态include: <%@ inlcude file =”header.jsp” %>此时引入的是静态的jsp文件,它将引入的jsp中的源代码原封不动地附加到当前文件中,所以在jsp程序中使用这个指令的时候file里面的值(即要导入的文件)不能带多余的标签或是与当前jsp文件重复的东西。
例如里面不要包含<html><body>这样的标签,因为是把源代码原封不动的附加过来,所以会与当前的jsp中的这样的标签重复导致出错。
动态include: <jsp:include page=”header.jsp”flush=”true” ></jsp:include>此时引入执行页面或生成的应答文本.jsp:include标签导入一个重用文件的时候,这个文件是经过编译的,通俗点说就是附加这个要导入文件经过编译后的效果,所以可以含有与当前jsp程序中重复的内容,因为在附加过来之前就会被解析掉。
其中flush 表示在读入包含内容之前是否清空任何现有的缓冲区。
2.include页面携带入参<jsp:include page=”header.jsp” flush=”true”><jsp: paramname=”userID”value=”2”/><jsp:include><jsp:param name = "" value="">是将值传给被包含页面(即header.jsp),可通过<%=request.getParameter("userID")%>获取3.两种用法的区别翻译阶段:jsp页面不能原封不动地被传送给浏览器,全部的jsp元素都必须首先由服务器进行处理。
这是通过将jsp 页面转达化成servlet,然后执行这个servlet来结束的。
include指令和include动作的区别include指令和include动作都能实现将外部文档包含到JSP文档中的功能,名称也很相似,非常容易混淆。
include指令和include动作到底有什么分别,哪一种方式会更好呢?1.include指令include可以在JSP页面转换成Servlet之前,将JSP代码插入其中。
它的主要优点是功能强大,所包含的代码可以含有总体上影响主页面的JSP构造,比如属性、方法的定义和文档类型的设定。
它的缺点是难于维护只要被包含的页面发生更改,就得更改主页面,这是因为主页面不会自动地查看被包含的页面是否发生更改。
include指令的语法格式如下<%@ include file="Relative Url"%>2.include动作jsp:include动作是在主页面被请求时,将次级页面的输出包含进来。
尽管被包含的页面的输出中不能含有JSP,但这些页面可以是其他资源所产生的结果。
服务器按照正常的方式对指向被包含资源的URL进行解释,因而这个URL可以是Servlet或JSP页面。
服务器以通常的方式运行被包含的页面,将产生的输出放到主页面中,这种方式与RequestDispatcher 类的include方法一致。
它的优点是在被包含的页面发生更改时,无须对主页面做出修改。
它的缺点是所包含的是次级页面的输出,而非次级页面的实际代码,所以在被包含的页面中不能使用任何有可能在整体上影响主页面的JSP构造。
jsp:include动作的完整语法如下<jsp:include page="Relative path to resource" flush="true">其中jsp:include之间不能有空格,page属性指定被包含的页面,这个属性是必需的,是指向某种资源的相对URL。
如果这个相对URL不是以/开头,则将其解释为相对于主页面的路径;如果是以/开头,是这个URL被解释为相对于当前WEB应用的根目录,而不是服务器的根目录,这是因为该URL是由服务器来解释的,不是由用户的浏览器来解释的。
jsp的常⽤指令有哪些(编译指令动作指令整理)Jsp包含三个编译指令和七个动作指令。
三个编译指令为:page、include、taglib。
七个动作指令为:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getProperty。
1、 page指令a. 通常位于jsp页⾯的顶端,同⼀个页⾯可以有多个page指令。
语法格式如下:复制代码代码如下:〈% @page[language="Java"][extends="package.class"][import= "package. class I package. *},…"][session="true I false"][buffer="none I 8kb I size kb" 1[autoFlush="true I false"][isThreadSafe="true I false"][info="text"][errorPage="relativeURL"][contentType="mimeType[ ;charset=characterSet]" I"text/html;charset= "808859-1"][isErrorPage=" true I false"]%〉1)language属性,⼀般情况就是java,代表jsp页⾯使⽤的脚本语⾔。
2)Extends属性,确定 JSP 程序编译时所产⽣的 Java 类,需要继承的⽗类,或者需要实现的接⼝的全限定类名。
1.import属性,⽤来导⼊包,下⾯⼏个包是默认⾃动导⼊的,不需要显式导⼊。
java面试笔试题:JSP中动态INCLUDE与静态INCLUDE的区别动态INCLUDE用jsp:include动作实现<jsp:include page="" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数.静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="" %>下面非常详细地解析了有关JSP动态INCLUDE和静态INCLUDE的使用方法及其区别:我们都知道在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),并编译这个servle t.这两步就构成了翻译阶段.由此我们就会知道:jsp页面是把include指令元素所指定的页面的实际内容(也就是代码段)加入到引入它的jsp 页面中,合成一个文件后被jsp容器将它转化成servlet.可以看到这时会产生一个临时class文件和一个java文件.下面举个例子.服务器用tomcat,引入页面的jsp文件叫.被引入的页面叫.这个jsp文件里存放的是一个有关时间的jsp代码,当前的上下文根设为test<head><body><table><tr><td>有关jsp中include的两种用法.敬请关注.</td></tr></table></body></html>在文件中,我们只输出了一行文本" 有关jsp中include的两种用法.敬请关注.",现在让我们先用<%@ include file="" %>这种形式引入这个文件.你想会出现什么问题了吗此时出现了错误提示:HTTP Status 500/(0,0) Page directive: can't have multiple occurrences of contentType以下还有一堆错误,但我们只要看这里就知道问题的所在了.状态码为http 500服务器内部错误.再看下面的提示.在页面中不能指定多个contentType.原因就在这里了.是因为在翻译阶段,文件的代码被原封不动地加入到了页面从而合成一个文件.合成后的文件中就会相同的:<%@ page language="java" contentType="text/html;charset=gb2312"%>这句代码.解决的办法是把文件中的这句删掉.刷新后再请求页面请求在页面显示如下2003年12月10日13:12:40有关jsp中include的两种用法.敬请关注.这时我们还不能发现什么.还是去查看tomcat下的临时文件吧.到那里去看看文件的内容是否已被加入到了文件中.<注.此处的tomcat装在E盘根目录下>目录E:\tomcat\work\Standalone\localhost\test.在这个目录下会看到和两个文件.这里的java文件就是jsp容器将jsp转化成了servlet而得到的这个文件.相对应的这个文件就是编译这个servlet文件产生的类文件了.打开所产生的servlet文件.此时我们会发现,在文件被转化成servlet文件时,在输出的<haed>之间加入了一些不是页面里面的代码,新加入的内容就是里面的代码: 新加入了哪些内容或是否真的加入了新的内容请自己测试去看一下就会一目了然了.在这里不再详述.以上就是我们用<%@ include file=""%>这种形式得到的结果.下面我们换用<jsp:include page="" flush="true"/>也就是将<%@ include file=""%>换成<jsp:include page="" flush="true"/>,然后请求.2003 ê 1210 13:30:13有关jsp中include的两种用法.敬请关注.此时会在页面上看见.我们所引入输出的日期中中文出现了乱码.什么原因是因为include行为元素是在请求处理阶段执行的(此处要对请求处理阶段进行说明一下.Jsp容器除了上面提到的负责将jsp页面转化成servlet外,还负责调用jsp页面实现类以处理每个请求并产生应答.这个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文件).所以在我们作include行为元素引入页面时,实际只是引用了这个文件被转化并被编译后产生的servlet类文件.既如此, 就是作为一个单独的文件在执行后才被文件运行时调用.由于文件中没有指定字符编码.所以出现了乱码.解决办法是在文件中重新把刚才去掉的<%@ page language="java" contentType="text/html;charset=gb2312"%>这行语句加入后刷新重新运行.此时页面显示正确,并跟用include指令正常运行时一样.再查看tomcat下的临时文件会发现.此时多出了一个文件和一个文件.这两个文件得来的方式跟和文件得来的方式一样.再查看一下此时文件的代码会发现.此时只新增加了一句代码:(request, response, "", 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页面的方式完全相同.即容器检测页面的变化,并自动进入翻译阶段,以得到页面的最新版本.(注意,include行为元素同jsp其它元素一样,没有行为体时要以"/"结束.就像下面这样.<jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" />)以下是对include 两种用法的区别主要有两个方面的不同;一:执行时间上:<%@ include file="relativeURI"%> 是在翻译阶段执行<jsp:include page="relativeURI" flush="true" /> 在请求处理阶段执行.二:引入内容的不同:<%@ include file="relativeURI"%>引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.<jsp:include page="relativeURI" flush="true" />引入执行页面或servlet所生成的应答文本.另外在两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径.将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.更多有关URL是如何解释的请参考相关资料或书籍.。
jspinclude用法JSP(Java Server Pages)是一种用于构建动态网页的技术,它允许将Java代码嵌入到HTML页面中。
在大型的JSP项目中,经常会遇到多个JSP页面之间需要共享一些通用的代码或功能的情况。
为了实现代码的重用和模块化,JSP提供了include指令来引入其他JSP页面的内容。
include指令用于将一个JSP页面的内容嵌入到另一个JSP页面中。
在JSP中,可以使用两种方式来进行include操作:静态包含(static include)和动态包含(dynamic include)。
1. 静态包含(static include):静态包含是在编译时完成的,使用静态包含时,被引入的页面的内容会包含在包含页面中,一起编译和执行。
可以通过以下方式使用静态包含:```jsp```静态包含的特点是:在编译时,被包含的页面的内容会被复制到包含页面中,在运行时,包含页面和被包含页面是一个整体,共享相同的上下文信息。
静态包含适用于包含一些静态的、不需要动态生成的内容。
在包含页面的任何地方使用include指令,被包含的页面都会在该位置展示。
2. 动态包含(dynamic include):动态包含是在运行时完成的,使用动态包含时,可以在运行时根据条件来决定是否包含一些页面。
可以通过以下方式使用动态包含:```jsp<jsp:include page="included.jsp"></jsp:include>```动态包含的特点是:在运行时,根据条件将被包含的页面插入到包含页面中。
动态包含可以在包含页面中的任意位置使用,可以在循环中动态判断是否需要包含一些页面。
动态包含适用于根据运行时条件来包含不同的内容。
总结:。
jspinclude用法1.静态包含静态包含是指在JSP编译时将被包含的文件的内容直接嵌入到当前JSP文件中。
静态包含的语法如下:其中,filename是要被包含的文件名,可以是相对路径或绝对路径。
静态包含的特点是包含的文件内容会在JSP文件编译时被插入到当前文件中,因此在运行时只剩下一个JSP文件。
这种方式适合用于在多个JSP页面中共享相同的代码块或页面布局,可以提高代码的复用性和可维护性。
2.动态包含动态包含是指在JSP运行时动态地决定要被包含的文件。
动态包含的语法如下:<jsp:include page="filename" [flush="true,false"] [errorPage="url"] [isErrorPage="true,false"] />其中,filename是要被包含的文件名,可以是相对路径或绝对路径。
flush属性表示是否在包含之前刷新缓冲区,默认值为false。
errorPage属性是一个可选属性,用于指定该包含的JSP文件是一个错误页面。
isErrorPage属性表示包含的JSP文件是否是一个错误页面,如果为true,则可以使用内置对象exception和error_page来处理异常。
动态包含和静态包含的最大区别在于,动态包含是在运行时进行的,因此可以根据业务逻辑决定是否包含一些文件。
动态包含的文件可以由用户输入、数据库查询结果或者其他变量来决定。
使用include指令的一般步骤如下:1. 创建两个JSP文件,一个叫做"main.jsp",另一个叫做"included.jsp"。
2. 在included.jsp文件中填入以下内容:<!DOCTYPE html><html><head><title>included.jsp</title></head><body><p>This is the included page.</p></body></html>3. 在main.jsp文件中填入以下内容:<!DOCTYPE html><html><head><title>main.jsp</title></head><body><p>This is the main page.</p></body></html>4. 运行main.jsp文件,你会看到main.jsp页面中的内容被显示出来,然后是included.jsp页面中的内容。
JSP include指令
在JSP开发中,为了减少代码冗余,可以把JSP开发中多次使用的功能代码封装成一个独立的JSP文件。
这样,其他JSP页面如果需要实现此种功能,直接把封装页面包含到当前页面即可。
完成这样的操作,需要使用到页面包含指令include。
JSP页面的某些部分(例如标题、页脚和导航栏)都相同的时候,就可以考虑用in clude。
include指令表示在当前页面中包含一个静态文件,静态包含表示被包含的文件将会被完整地插入到JSP文件中去。
被包含的文件可以是JSP文件、HTML文件、
include指令表示在翻译阶段(将JSP页面转换成Servlet的阶段),会读入包含页面中的内容,并将这些内容和原来的页面融合在一起。
在融合过程中,引入页面只是将普通文本进行融合,并不对动态内容求值,融合后的完整页面再被整体的转换为一个Servlet。
这意味着JSP页面和被包含页面共享所有页面作用域数据。
因此,如果主页面中声明了一个变量,而在某个被引入的页面中也声明了一个同名的变量,那么在翻译阶段将会造成一个错误,因为组合后的页面无法进行编译。
现在创建一个实例,演示include指令的用法。
此实例共包含四个文件,分别为
文本文件center.txt的内容如下所示:
上述四个文件完成之后,需要将其文件保存为UTF-8格式,否则会出现乱码。
将上述三个文件复制到指定服务器运行目录下,打开IE 浏览器,在地址栏中输入h ttp://localhost:8080/JSPExample/JExample4.jsp ,单击【转到】,会显示如图2-4所示窗口:
图2-4 include 演示窗口
使用include 指令包令文件时,即便是被包含的文件扩展名不是JSP ,
JSP 容器仍然会对其中的JSP 语句进行编译。
另外,需要注意在被包含
的文件中最好不要使用<html>、</html>、<body>、</body>等标签,因为这会影响到原JSP 页面中相应的标签。