JSP include指令和include行为的区别

我们都知道在JSP中include有两种形式,分别是

 
 
 
  1. < %@ include file=” ”%> 
  2. < 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文件。下面举个例子。

服务器用tomcat,引入页面的JSP文件叫test.JSP。被引入的页面叫date.JSP.这个JSP文件里存放的是一个有关时间的JSP代码,当前的上下文根设为test

 
 
 
  1. <%@ page language=”java” contentType="text/html;charset=gb2312"%> 
  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()+  
  17. "日(星期" + date_cn + ")";  
  18. %> 
  19. document.write("<%=dateStr%>");  
  20. //======以下是test.jsp的源文件=============//  
  21. <%@ page language=”java” contentType=”text/html;charset=gb2312”%> 
  22.  
  23.  
  24. </strong>include的两种用法<strong> title></strong> </li> <li><strong><jsp:include</strong> page=”date.jsp” flush=”true”<strong>/></strong> </li> <li><strong><</strong>%--@ include file=”date.jsp” %--<strong>></strong> </li> <li>//我们在这里用include的两种不同形式来引入date.jsp这个文件.  </li> <li><strong><head></strong> </li> <li><strong><body></strong> </li> <li><strong><table><tr><td></strong> </li> <li>有关jsp中include的两种用法.敬请关注。  </li> <li><strong> td> tr> table></strong> </li> <li><strong> body></strong> </li> <li><strong> html></strong> </li> </ol></pre><p>在test.JSP 文件中,我们只输出了一行文本“ 有关JSP include的两种用法.敬请关注。”,现在让我们先用<%@ include file=”date.JSP” %>这种形式引入date.JSP这个文件。你想会出现什么问题了吗?此时出现了错误提示:</p><pre> <ol> <li>HTTP Status 500 ?  </li> <li>org.apache.jasper.JasperException: /date.jsp(0,0) Page directive:   </li> <li>can't have multiple occurrences of contentType </li> </ol></pre><p>以下还有一堆错误,但我们只要看这里就知道问题的所在了。状态码为http 500服务器内部错误。再看下面的提示。在date.JSP页面中不能指定多个contentType.</p><p>原因就在这里了。是因为在翻译阶段,date.JSP文件的代码被原封不动地加入到了test.JSP页面从而合成一个文件。合成后的文件中就会相同的:</p><pre> <ol> <li><strong><</strong> %@ page language=”java” contentType=”text/html;charset=gb2312”%<strong>></strong>  </li> </ol></pre><p>这句代码。解决的办法是把date.JSP文件中的这句删掉。刷新后再请求test.JSP页面请求test.JSP在页面显示如下2003年12月10日 13:12:40有关JSP include的两种用法.敬请关注。</p><p>这时我们还不能发现什么。还是去查看tomcat下的临时文件吧。到那里去看看date.JSP文件的内容是否已被加入到了test.JSP文件中。< 注.此处的tomcat装在E盘根目录下></p><p>目录E:tomcatworkStandalonelocalhosttest.在这个目录下会看到test_JSP.java和test_JSP.class两个文件。这里的java文件就是JSP容器将JSP转化成了servlet而得到的test_JSP.java这个文件。</p><p>相对应的test_JSP.class这个文件就是编译test_JSP.java这个servlet文件产生的类文件了。打开所产生的 servlet文件(test_JSP.java)。此时我们会发现,在test.JSP 文件被转化成servlet文件时,在输出的< haed >之间加入了一些不是test.JSP页面里面的代码,新加入的内容就是 date.JSP里面的代码: 新加入了哪些内容或是否真的加入了新的内容请自己测试去看一下就会一目了然了.在这里不再详述.</p><p>以上就是我们用< %@ include file=”date.JSP”%>这种形式得到的结果.</p><p>下面我们换用< JSP:include page=”dae.JSP” flush=”true”/>也就是将< %@ include file=”date.JSP”%>换成< JSP:include page=”dae.JSP” flush=”true”/>,然后请求test.JSP.2003? ê 12??10?? 13:30:13</p><p>有关JSP include的两种用法.敬请关注。</p><p>此时会在页面上看见.我们所引入date.JSP输出的日期中中文出现了乱码.什么原因?是因为include行为元素是在请求处理阶段执行的(此处要对请求处理阶段进行说明一下.JSP容器除了上面提到的负责将JSP页面转化成servlet外,还负责调用JSP页面实现类以处理每个请求并产生应答.这个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文件)。</p><p>所以在我们作include行为元素引入页面时,实际只是引用了date.JSP这个文件被转化并被编译后产生的servlet类文件.既如此, date.JSP就是作为一个单独的文件在执行后才被test.JSP文件运行时调用.由于date.JSP文件中没有指定字符编码.所以出现了乱码.解决办法是在date.JSP文件中重新把刚才去掉的</p><pre> <ol> <li><strong><</strong>%@ page language=”java” contentType=”text/html;charset=gb2312”%<strong>></strong> </li> </ol></pre><p>这行语句加入后刷新重新运行.此时页面显示正确,并跟用include指令正常运行时一样.再查看tomcat下的临时文件会发现.此时多出了一个 date_JSP.java文件和一个date_JSP.class文件.这两个文件得来的方式跟test_JSP.java和 test_JSP.class文件得来的方式一样.再查看一下此时test_JSP.java文件的代码会发现.此时只新增加了一句代码:JSPRuntimeLibrary.include(request, response, "date.JSP", out, true);</p><p>它并没有把date.JSP文件的代码加入到test.JSP.</p><p>只是在运行时引入了date.JSP页面执行后所产生的应答.这意味着我们可以指定任何能够产生应答的Web资源,(例如一个 servlet或一个JSP页面),只要这些资源所产生的类型和JSP页面产生的内容类型相同.JSP容器将通过一个内部的函数调用来执行指定的资源.因此,这些被引入的资源可以帮助处理原来的请求,所以这些资源可以访问请求作用域内的所有对象.以及所有原来的请求参数.</p><p>由于在主页面被请求时,这些页面还没有被引入到主页面中,所以你可以对page属性使用一个请求时属性值,以便根据运行时的情况来决定要引入哪一个页面.还可以添加一些将被引入的页面读取的请求参数.</p><pre> <ol> <li><strong><jsp:include</strong> page=”<strong><</strong>%=pageSelectedAtRuntime%<strong>></strong>” flush=”true” <strong>></strong> </li> <li><strong><jsp:param</strong> name=”fitstParamer” value=”firstValue”<strong>></strong> </li> <li><strong><jsp:param</strong> name=”lastParamer” value=”lastValue”<strong>></strong> </li> <li><strong> jsp:include></strong> </li> </ol></pre><p>如果修改了被引入的JSP页面,那么可以立刻使用该页面的最新版本,这是因为对待被引入的页面的方式与对待由浏览器直接调用的JSP页面的方式完全相同.即容器检测页面的变化,并自动进入翻译阶段,以得到页面的最新版本.</p><p>【编辑推荐】</p><ol><li>JSP自定义标签由浅到深详细讲解</li><li>在JSP环境中配置使用fckeditor详细讲解</li><li>基于JSP实现数据库中图片的存储与显示</li><li>构造JSP和Javabean开发和发布环境的方法</li><li>JSP+JavaBean+Servlet工作原理实例讲解</li></ol> <p> 文章题目:<a href="http://www.kswsj.com/qtweb/news7/429307.html">JSP include指令和include行为的区别</a> <br> 网站链接:<a href="http://www.kswsj.com/qtweb/news7/429307.html">http://www.kswsj.com/qtweb/news7/429307.html</a> </p> <p> 网站建设、网络推广公司-成都快上网,一家网站设计、网站制作公司;服务项目有等 </p> <p class="adpic"> <a href="https://www.cdcxhl.com/service/ad.html" target="_blank" class="ad">广告</a> <a href="" target="_blank" class="adimg"><img src=""></a> </p> <p class="copy"> 声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: <a href="http://www.kswsj.com/" target="_blank">成都快上网</a> </p> </div> <div class="newsmorelb"> <p>成都快上网科技猜您喜欢</p> <ul> <li> <a href="/qtweb/news6/429306.html">3蛋服务器?(三蛋系统官网)</a> </li><li> <a href="/qtweb/news5/429305.html">如果我们再购买一个云建站</a> </li><li> <a href="/qtweb/news4/429304.html">域名注册局审核要多久?(我的域名域名实名认证提交总是审核不通过)</a> </li><li> <a href="/qtweb/news3/429303.html">离线攻击与在线攻击:一文了解密码安全的重要性</a> </li><li> <a href="/qtweb/news2/429302.html">行Linux调用命令行:展开机遇之路(linux调用命令)</a> </li><li> <a href="/qtweb/news1/429301.html">copy如何在html中打印</a> </li><li> <a href="/qtweb/news0/429300.html">Linux系统下挂载U盘的操作方法(挂载u盘linux)</a> </li><li> <a href="/qtweb/news49/429299.html">SQLServer查询速度缓慢解决办法</a> </li><li> <a href="/qtweb/news48/429298.html">解决Redis过期多线程问题(redis过期多线程)</a> </li> </ul> </div> </div> <div class="col-lg-3 noneb"> <div class="bkright" style="margin-top: 0"> <p><a href="https://www.cdcxhl.com/news/paiming/">网站排名知识</a></p> <ul> <li> <a class="text_overflow" href="/qtweb/news11/361611.html">宝塔面板怎么链接虚拟主机</a> </li><li> <a class="text_overflow" href="/qtweb/news22/44272.html">Linux网络性能分析:提升你的网络速度(linux网络性能测试)</a> </li><li> <a class="text_overflow" href="/qtweb/news15/297915.html">服务器丢包如何处理(处理服务器丢包的方法。)</a> </li><li> <a class="text_overflow" href="/qtweb/news19/193719.html">江门网站制作设计的方法是什么</a> </li><li> <a class="text_overflow" href="/qtweb/news39/187339.html">为什么手机会越用越卡?是厂商在背后搞鬼吗?</a> </li><li> <a class="text_overflow" href="/qtweb/news39/303939.html">美国vps日本vps有何区别?</a> </li><li> <a class="text_overflow" href="/qtweb/news45/329795.html">C++开发者都应该使用的10个C++11特性</a> </li><li> <a class="text_overflow" href="/qtweb/news26/63826.html">CentOS6编译配置httpd2.4的N种方法</a> </li><li> <a class="text_overflow" href="/qtweb/news18/160768.html">探究VPS性能极限:如何进行有效的压力测试?(vps压力测试)</a> </li><li> <a class="text_overflow" href="/qtweb/news40/60690.html">Redis集群实现复制的规则与技巧(redis集群复制规则)</a> </li><li> <a class="text_overflow" href="/qtweb/news49/271199.html">创意还是垃圾?八成软件服务公司陷入“功能迷宫”</a> </li><li> <a class="text_overflow" href="/qtweb/news1/141401.html">Linux拷贝大文件更流畅(大文件拷贝linux比win流畅)</a> </li><li> <a class="text_overflow" href="/qtweb/news20/507870.html">vps如何卸载</a> </li><li> <a class="text_overflow" href="/qtweb/news13/489263.html">免费云服务器美国</a> </li><li> <a class="text_overflow" href="/qtweb/news49/355199.html">域名没有解析-其他问题</a> </li> </ul> </div> <div class="bkright tag"> <p><a href="https://www.cdcxhl.com/hangye/link.html" target="_blank">各行业网站</a></p> <ul> <li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/bdfhw/" target="_blank">被动防护网</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/xuanchuanpian/" target="_blank">宣传片制作</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/yangguangfang/" target="_blank">阳光房</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/weilanhulan/" target="_blank">围栏护栏</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/bxgds/" target="_blank">不锈钢雕塑</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/loutihulan/" target="_blank">楼梯护栏</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/opp/" target="_blank">OPP胶袋</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/sdgz/" target="_blank">水电改造</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/geshan/" target="_blank">格栅板</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/shiliangting/" target="_blank">石凉亭</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/shidiao/" target="_blank">石雕</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/fadianjihs/" target="_blank">发电机回收</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/zufadianji/" target="_blank">发电机租赁</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/muwu/" target="_blank">木屋</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/sljbgc/" target="_blank">三轮搅拌车</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/chalousj/" target="_blank">茶楼设计</a> </li> </ul> </div> </div> </div> <div class="carousel-inner linkbg" style="background: #fff"> <div class="container"> <a href="https://www.cdxwcx.com/city/qionglai/" target="_blank">邛崃网站建设</a>    <a href="http://www.xhgfhy.com/" target="_blank">犀浦防纹窗</a>    <a href="https://www.cdxwcx.com/jifang/xibuxinxi.html" target="_blank">西部信息中心</a>    <a href="http://www.bzwzjz.com/" target="_blank">广东网站设计</a>    <a href="https://www.cdxwcx.com/jifang/xiyun.html" target="_blank">成都移动服务器托管</a>    <a href="http://www.cdhuace.com/baozhuang.html" target="_blank">成都包装设计公司</a>    <a href="http://www.cxjianzhan.cn/" target="_blank">成都网站设计</a>    <a href="http://www.cdhuace.com/faguangzi/bfg.html" target="_blank">背发光字</a>    <a href="http://www.hzxinyuan.com/" target="_blank">佑馨产后护理</a>    <a href="http://www.xwwzsj.com/" target="_blank">宣威网站建设</a>    <a href="http://www.kswsj.cn/" target="_blank">全网营销网站推广</a>    <a href="http://www.pcwzsj.com/" target="_blank">平昌做网站</a>    <a href="https://www.cdcxhl.com/" target="_blank">成都网站建设公司</a>    <a href="http://www.scemts.cn/" target="_blank">德阳东方电机技改</a>    <a href="http://www.muyideyu.com/" target="_blank">营山月子护理</a>    <a href="http://www.dgruizhi.cn/" target="_blank">娄底尾呼妄服装</a>    <a href="http://www.kjdeyu.com/" target="_blank">营山月子会所</a>    <a href="http://www.jinhuajc.com/" target="_blank">橡塑保温管</a>    <a href="https://www.cdcxhl.com/idc/xixin.html" target="_blank">西信服务器托管</a>    <a href="https://www.xwcx.net/" target="_blank">成都机柜租用</a>     </div> </div> <footer> <div class="carousel-inner footjz"> <div class="container"> <i class="icon iconfont zbw"></i> 品质网站建设 <i class="icon iconfont"></i> 多平台展现 <i class="icon iconfont"></i> 600元建站 <i class="icon iconfont"></i> 高效快速 <i class="icon iconfont"></i> 专业用心服务 <button type="button" class="btn btn-default btn-lg" onClick="window.location.href='tencent://message/?uin=631063699&Site=&Menu=yes'"> 立即开始600元网站建设</button> <button type="button" class="btn btn-default btn-xs" onClick="window.location.href='tencent://message/?uin=631063699&Site=&Menu=yes'"> 600元企业网站建设</button> </div> </div> <div class="carousel-inner bqsy"> <div class="container"> <div class="lxfs"> <h4 class="yutelnone">028-86922220 13518219792</h4> <h4 class="yutelblock"><a href="tel:02886922220">028-86922220</a> <a href="tel:13518219792">13518219792</a></h4> <a class="btn btn-default" href="tencent://message/?uin=532337155&Site=&Menu=yes" role="button">网站建设<span>QQ</span>:532337155</a> <a class="btn btn-default" href="tencent://message/?uin=631063699&Site=&Menu=yes" role="button">营销推广<span>QQ</span>:631063699</a> <a class="btn btn1 btn-default" href="mqqwpa://im/chat?chat_type=wpa&uin=532337155&version=1&src_type=web&web_src=oicqzone.com" role="button">网站制作<span>QQ</span>:532337155</a> <a class="btn btn1 btn-default" href="mqqwpa://im/chat?chat_type=wpa&uin=631063699&version=1&src_type=web&web_src=oicqzone.com" role="button">营销推广<span>QQ</span>:631063699</a> <a class="btn btn-default nonea" href="tencent://message/?uin=1683211881&Site=&Menu=yes" role="button">售后QQ:1683211881</a> <div class="dz">成都快上网专注: <a href="http://www.kswsj.com/" target="_blank">成都网站制作</a> <a href="http://www.kswsj.com/" target="_blank">网站设计</a> <a href="http://www.kswsj.com/" target="_blank">成都网站建设</a> <address>地址:成都太升南路288号锦天国际A幢10楼</address> </div> </div> <div class="bzdh dz"><img src="https://www.cdcxhl.com/imges/bottom_logo.png" alt="创新互联"> <p><a href="https://www.cdcxhl.com/menu.html" target="_blank">成都创新互联科技有限公司</a><br> Tel:028-86922220(7x24h)</p></div> </div> </div> </footer> </body> </html> <script> $.getJSON ("../../qtwebpic.txt", function (data) { var jsonContent = { "featured":data } var random = jsonContent.featured[Math.floor(Math.random() * jsonContent.featured.length)]; $(".adpic .adimg").attr("href",random.link) $(".adpic img").attr("src",random.pic); }) </script>