JSP中包含外部文件的方式

1 篇文章 0 订阅
1 篇文章 0 订阅

1.<jsp:include page="b.jsp" flush="true"/>

2.<%@ include file="b.jsp" %>

不同点:
区别1:

<jsp:include page="b.jsp" />(先执行,后包含)此标签表示法:能动态区别加进来的是动态页面还是静态页面,对于静态页面则直接将资源包含(仅取其文本)。

<%@ include file="b.jsp">此指令表示:静态地包含页面,不管其内容如何,不过是静态页面还是动态页面都首先将页面的内容先加进来。
区别2:

<jsp:include page="b.jsp" />可以分开写成:<jsp:include page="b.jsp" ><jsp:param name="参数名" value="参数值"/></jsp:include>这样就可以传递参数。

经验: 

1.由于“1”是先执行后包含,假如a.jsp页面定义了String strr,b.jsp也定义了String strr ,因此b.jsp用方法一包含a.jsp不会出现重复定义错误,而用方法二就会出现 strr is already defined in _jspService……
2.方法一在写包含与被包含文件时候比较随意,不用考虑太多重复定义等因素,方法二相对方法一能节省很多代码,方法一更利于实现功能模块化分,而方法二更灵活,能更灵活的调用,两种方法结合当然最好了!

 

详细说明:

我们都知道在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文件。


================================================================================================================

    做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>来传递多个参数。


网奇网络原创文章,本文地址:http://www.wangqi.com/html/2012-05/16995.htm,转载请注明出处。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值