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> <br> 新闻名称:JSP include指令和include行为的区别 <br> 本文链接:<a href="http://www.gydahua.com/article/dpieeid.html">http://www.gydahua.com/article/dpieeid.html</a> </div> <div class="view-qrocde cl"> <div class="m z"><img src="/Public/Home/images/ew.jpg"/></div> <div class="text"> <h6>扫二维码与项目经理沟通</h6> <p>我们在微信上24小时期待你的声音</p> <p>解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流</p> </div> </div> <div class="othernews cl"> <h3>其他资讯</h3> <ul> <li><a href="/article/djssoei.html">区块链如何提高支付安全性</a></li><li><a href="/article/djssodd.html">windows激活和不激活谁更流畅?(windows激活和)</a></li><li><a href="/article/djssoec.html">IntelliJ 平台删除 Log4j 组件</a></li><li><a href="/article/djscppj.html">导购网站服务器?(导购网站服务器是什么)</a></li><li><a href="/article/djschhe.html">创新互联MinecraftWiki教程:命令[]</a></li> </ul> </div> </div> </div> <div class="sidebar"> <div class="tuijian"> <a href="#"> <h2 class="cl"><span>行业动态</span></h2> <h3>企业网站建设的重要性!</h3> <p>现在虽然是移动互联网时代,但企业网站依然重要,包含PC站点,移动站。可以说企业网站关系企业的未来发展和前途,尤其对中小企业更是如此,一些中小企业老板,对自己的名片很在乎,因为这是个门面。...</p> </a> </div> <div class="ser sidesub"> <h2>服务项目</h2> <ul class="ebox"> <li class="sub sub-1"> <div> <h3>网站建设</h3> <p></p> <a class="btn" href="/serve/website/">查看详情</a> </div> </li> <li class="sub sub-1"> <div> <h3>移动端/APP</h3> <p></p> <a class="btn" href="/serve/moblie/">查看详情</a> </div> </li> <li class="sub sub-1"> <div> <h3>微信/小程序</h3> <p></p> <a class="btn" href="/serve/small/">查看详情</a> </div> </li> <li class="sub sub-1"> <div> <h3>技术支持</h3> <p></p> <a class="btn" href="/serve/tech/">查看详情</a> </div> </li> <li class="sub sub-1"> <div> <h3>其它服务</h3> <p></p> <a class="btn" href="/serve/othe/">查看详情</a> </div> </li> <li class="sub sub-5"> <div> <h3>更多服务项目</h3> <p> <a>用我们的专业和诚信赢得您的信赖,从PC到移动互联网均有您想要的服务!</a></p> <a class="btn" href="/serve/">获取更多</a> </div> </li> </ul> </div> <div class="contact" id="fix"> <h2 class="cl"> <span>联系吧</span> <a href="https://map.baidu.com/" class="ditu" rel="nofollow" target="_blank">在百度地图上找到我们</a> </h2> <h3>电话:13518219792</h3> <p>如遇占线或暂未接听请拨:136xxx98888</p> <div class="qq"> <a href="//wpa.qq.com/msgrd?v=3&uin=244261566&site=qq&menu=yes" rel="nofollow" target="_blank">业务咨询</a> <a href="//wpa.qq.com/msgrd?v=3&uin=244261566&site=qq&menu=yes" rel="nofollow" target="_blank">技术咨询</a> <a href="//wpa.qq.com/msgrd?v=3&uin=244261566&site=qq&menu=yes" rel="nofollow" target="_blank">售后服务</a> </div> </div> </div> <script> //固定滚动 (function () { var oDiv = document.getElementById("fix"); var H = 120, iE6; var Y = oDiv; while (Y) { H += Y.offsetTop; Y = Y.offsetParent }; iE6 = window.ActiveXObject && !window.XMLHttpRequest; if (!iE6) { window.onscroll = function () { var s = document.body.scrollTop || document.documentElement.scrollTop; if (s > H) { oDiv.className = "contact fixed"; if (iE6) { oDiv.style.top = (s - H) + "px"; } } else { oDiv.className = "contact "; } }; } })(); </script> </div> <div class="footer"> <div class="wp"> <div class="wpss cl"> <dl class="about"> <dt>网站设计</dt> <dd><a href="http://www.kswcd.com/" target="_blank" title="企业网站设计">企业网站设计</a></dd><dd><a href="http://www.wjwzjz.com/" target="_blank" title="温江网站设计">温江网站设计</a></dd><dd><a href="http://www.cxjianzhan.cn/" target="_blank" title="成都网站设计">成都网站设计</a></dd><dd><a href="http://www.cdxwcx.cn/sheji/" target="_blank" title="成都网站设计">成都网站设计</a></dd> </dl> <dl class="about"> <dt>网站制作</dt> <dd><a href="http://www.cdkjz.cn/" target="_blank" title="成都网站制作">成都网站制作</a></dd><dd><a href="https://www.cdxwcx.com/" target="_blank" title="成都网站制作">成都网站制作</a></dd><dd><a href="http://chengdu.cdcxhl.com/" target="_blank" title="成都营销网站制作">成都营销网站制作</a></dd><dd><a href="http://www.36103.cn/" target="_blank" title="成都网站制作">成都网站制作</a></dd> </dl> <dl class="contact"> <dt>联系我们</dt> <dd>电话:13518219792</dd> <dd>邮箱:631063699@qq.com</dd> <dd>地址:成都青羊区锦天国际1002号</dd> <dd>网址:www.gydahua.com</dd> </dl> <dl class="about" style="margin-left:50px;width:235px;"> <dt>网站建设</dt> <dd><a href="http://www.sclezhi.cn/" target="_blank" title="乐至网站建设">乐至网站建设</a></dd><dd><a href="http://www.cxjianzhan.com/" target="_blank" title="成都网站建设公司">成都网站建设公司</a></dd><dd><a href="https://www.cdxwcx.com/city/suining/" target="_blank" title="遂宁网站建设">遂宁网站建设</a></dd><dd><a href="https://www.cdxwcx.com/wangzhan/" target="_blank" title="成都网站建设">成都网站建设</a></dd> <!--成都网站建设 成都网站制作 成都做网站 网站建设公司--> </dl> <dl class="flow"> <dt></dt> <div class="ma cl"> <div class="m"> <img src="/Public/Home/images/ew.jpg" /> <p>微信二维码</p> </div> </div> </dl> </div> </div> <div class="footer-link wp"> <ul class="wpss cl"> <li class="fisrt">友情链接</li> <li><a href="http://www.snfdjwx.cn/" title="遂宁柴油发电机组维修" target="_blank">遂宁柴油发电机组维修</a></li><li><a href="http://www.lsfdjgs.com/" title="乐山康明斯发电机" target="_blank">乐山康明斯发电机</a></li><li><a href="http://www.4006tel.net/mobile/" title="IOS开发" target="_blank">IOS开发</a></li><li><a href="http://www.cxhlcq.com/seo/" title="重庆网络营销" target="_blank">重庆网络营销</a></li><li><a href="http://www.cdkjz.cn/small/" title="成都微信小程序开发" target="_blank">成都微信小程序开发</a></li><li><a href="http://www.scdwdx.com/" title="成都柴油发电机公司" target="_blank">成都柴油发电机公司</a></li><li><a href="http://m.xwcx.net/" title="自适应网站" target="_blank">自适应网站</a></li><li><a href="http://www.cdymzj.com/" title="注册域名" target="_blank">注册域名</a></li><li><a href="http://www.sxpndq.cn/" title="普能电气" target="_blank">普能电气</a></li><li><a href="http://m.cdcxhl.com/" title="成都建网站" target="_blank">成都建网站</a></li> </ul> </div> </div> <div class="bot-footer"> <div class="wp"> <p class="wpss"> <em>Copyright © 2002-2023 www.gydahua.com 快上网建站品牌 QQ:244261566 版权所有</em> <em>备案号:<a href="http://beian.miit.gov.cn/" rel="external nofollow">蜀ICP备19037934号</a></em> </p> <p class="wpss" style="line-height:30px !important;"> </p> </div> </div> <div class="footer-kefu"> <ul> <li class="qq"><a href="https://wpa.qq.com/msgrd?v=3&uin=244261566&site=qq&menu=yes"><em></em>在线咨询</a> </li> <li class="tel"><a href="tel:13518219792" target="_blank"><em></em>13518219792</a></li> <li class="wx"> <em></em> <div class="code"> <img src="/Public/Home/images/ew.jpg" /> <p>微信二维码</p> </div> </li> <li class="m"> <em></em> <div class="code"> <img src="/Public/Home/images/ew.jpg" /> <p>移动版官网</p> </div> </li> <li class="top"><em></em></li> </ul> </div> <script src="/Public/Home/js/all.js"></script> </body> </html> <script> $(".cont img").each(function(){ var src = $(this).attr("src"); //获取图片地址 var str=new RegExp("http"); var result=str.test(src); if(result==false){ var url = "https://www.cdcxhl.com"+src; //绝对路径 $(this).attr("src",url); } }); window.onload=function(){ document.oncontextmenu=function(){ return false; } } </script>