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.mswzjz.cn/qtweb/news7/429307.html">JSP include指令和include行为的区别</a> <br> 浏览路径:<a href="http://www.mswzjz.cn/qtweb/news7/429307.html">http://www.mswzjz.cn/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.mswzjz.cn/" 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/dianzishangwu/">电子商务知识</a></p> <ul> <li> <a class="text_overflow" href="/qtweb/news35/480185.html">Redis数据过期多线程优化实践(redis过期 多线程)</a> </li><li> <a class="text_overflow" href="/qtweb/news43/418693.html">探索ZabbixAPI:导出主机组及主机信息</a> </li><li> <a class="text_overflow" href="/qtweb/news34/21934.html">十大云计算服务商开年加紧数据中心建设布局海外各显身手</a> </li><li> <a class="text_overflow" href="/qtweb/news8/240758.html">微信小程序运力方使用·onCheckBusiness</a> </li><li> <a class="text_overflow" href="/qtweb/news9/138309.html">Linux服务器性能优化,让你的网站飞快启动!(linux服务器性能优化)</a> </li><li> <a class="text_overflow" href="/qtweb/news49/207249.html">「如何在TP框架中查询单个值的tp数据库方法」 (tp数据库查询单个值)</a> </li><li> <a class="text_overflow" href="/qtweb/news49/227499.html">分分钟甩Word几条街,Python编辑公式竟可以如此简单</a> </li><li> <a class="text_overflow" href="/qtweb/news17/262517.html">如何打造一个令人愉悦的前端开发环境(四)</a> </li><li> <a class="text_overflow" href="/qtweb/news21/474821.html">Oracle数据库入门之试题指南</a> </li><li> <a class="text_overflow" href="/qtweb/news12/434962.html">redis字符串存储的方法是什么</a> </li><li> <a class="text_overflow" href="/qtweb/news31/510081.html">利用Redis实现有效期管理的集合(redis集合设置有效期)</a> </li><li> <a class="text_overflow" href="/qtweb/news35/405685.html">使用VBA轻松修改网页数据库连接(vba修改网页数据库连接)</a> </li><li> <a class="text_overflow" href="/qtweb/news19/226419.html">无内核技术助力Java、Node.js、Go与Python应用</a> </li><li> <a class="text_overflow" href="/qtweb/news22/364272.html">服务器监控有哪些好处和坏处</a> </li><li> <a class="text_overflow" href="/qtweb/news49/468799.html">深入剖析PowerDesignerUML建模</a> </li> </ul> </div> <div class="bkright tag"> <p><a href="https://www.cdcxhl.com/hangye/" 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/jbgc/" 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/zhanting/" 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/fadianji/" 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/tongdiaosu/" 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/sdjbc/" 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/jiaquan/" 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/tadiaozulin/" 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/xiangsu/" 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/zsljbc/" 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/zdfhw/" 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/gaokongche/" 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/jianzhudonghua/" 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/bolixiufu/" 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/suliaodai/" target="_blank">塑料袋</a> </li> </ul> </div> </div> </div> <div class="carousel-inner linkbg" style="background: #fff"> <div class="container"> <a href="http://www.cdhuace.com/zhuangxiu.html" target="_blank">成都装修公司</a>    <a href="http://www.xhgfhy.com/ " target="_blank">犀浦门窗定制</a>    <a href="https://www.cdxwcx.com/wangzhan/dingzhi.html" target="_blank">定制网站</a>    <a href="http://www.xdwzjz.cn/" target="_blank">新都网站建设</a>    <a href="http://www.ycggtw.cn/" target="_blank">金羊影视传媒</a>    <a href="http://www.gdcrkj.cn/" target="_blank">德阳东方电机技改</a>    <a href="http://www.ahjierui.cn/" target="_blank">简阳网站制作</a>    <a href="http://seo.cdkjz.cn/" target="_blank">网络推广公司</a>    <a href="http://www.kmjierui.cn/" target="_blank">柔性防护网</a>    <a href="http://www.jawzsj.com/" target="_blank">吉安网站建设</a>    <a href="http://m.cdcxhl.cn/H5/ " target="_blank">H5建站</a>    <a href="http://www.kswsj.cn/tuiguang/" target="_blank">网站seo优化</a>    <a href="https://www.scvps.cn/" target="_blank">成都服务器租用</a>    <a href="http://www.shjike.cn/" target="_blank">宏昇商务服务</a>    <a href="https://www.cdxwcx.com/wangzhan/applet.html" target="_blank">微信小程序</a>    <a href="http://www.cdxwcx.cn/tuoguan/sichuan.html" target="_blank">四川主机托管</a>    <a href="https://www.cdcxhl.com/" target="_blank">成都做网站</a>    <a href="http://seo.cdkjz.cn/yingxiao/" target="_blank">营销型网站建设</a>    <a href="http://m.cdxwcx.com/weihu.html" target="_blank">成都网站维护公司</a>    <a href="http://www.cxjianzhan.cn/" 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> 开发成本低 <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.mswzjz.cn/" target="_blank">攀枝花网站设计</a> <a href="http://www.mswzjz.cn/" target="_blank">攀枝花网站制作</a> <a href="http://www.mswzjz.cn/" 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>