jsp的include两种使用方法

做jsp的大家都知道,有两种include其他页面的方法,一种是说明标签<%@ include  file="xxx.jsp"%>,一种是动作标签<jsp:include  page="xxx.jsp"/> 。

我在动态网页制作教程中a.jsp页面上定义了一个 String  path = request.getContextPath() , 而这个页面用说明标签引入了一个b.jsp ,而这个上面也需要一个String path = request.getContextPath() , 结果打开a.jsp时报错了,说path这个变量已经定义过了。查看其他同样也引了b.jsp的页面,他们也定义了path这个字符串变量,却没有这种错误,我刚开始还挺纳闷,后来发现他们和a.jsp所引入的方法是不一样的----都是动作标签。

后来把a.jsp改了之后,问题就不再出现了。回想书上说,说明标签是静态引入,动作标签是动态,当初不太明白,现在一想也许是这样的:静态引入是把b.jsp的源码拼接到a.jsp中,在一块编译,这样两者代码是加到一起的,所以b.jsp定义的path就形成了重复;而动态引入则是分开编译两个jsp,把行成的html再加到一起,所以不会出现重复定义的问题。

试了一下证实自己的想法:在用<%@  include 时 ,把b.jsp定义的path去掉,结果它就可以使用a.jsp定义的变量,没有错误;而用<jsp:include时,去掉b.jsp的path变量,则会使编译不通过,应该就是单独编译b.jsp时,发现有使用了"path"而“path”没有被定义。

JSP 语法

<jsp:include page="{relativeURL | <%= expression%>}" flush="true" />

or

<jsp:include page="{relativeURL | <%= expression %>}" flush="true" >

<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />+

</jsp:include>

Examples

<jsp:include page="scripts/login.jsp" />

<jsp:include page="copyright.html" />

<jsp:include page="/index.html" />

<jsp:include page="scripts/login.jsp">

<jsp:param name="username" value="jsmith" />

</jsp:include>

 描述

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

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

如果这个包含文件是动态的,那么你还可以用<jsp:param>还传递参数名和参数值。

属性

page="{relativeURL | <%= expression %>}"

参数为一相对路径,或者是代表相对路径的表达式.

flush="true"

这里你必须使用flush="true",你不能使用false值.缺省值为false

<jsp:param name="parameterName" value="{parameterValue | <%= expression %> }" />+

<jsp:param>子句能让你传递一个或多个参数给动态文件

 你能在一个页面中使用多个<jsp:param>来传递多个参数。

你可能感兴趣的:(jsp的include两种使用方法)