成都网站建设设计

将想法与焦点和您一起共享

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://chengdu.cdxwcx.cn/article/dpieeid.html">http://chengdu.cdxwcx.cn/article/dpieeid.html</a> </div> </div> </div> <!--左边end--> <!--右边begin--> <div class="news_r"> <div class="news_t"><h2 class="h2">其他资讯</h2></div> <div class="news_ul3"> <ul> <li> <a href="/article/cdssigs.html"> <h3 class="h3">windows10arm系统镜像哪里下?windows8系统iso镜像</h3> </a> </li><li> <a href="/article/cdssipo.html"> <h3 class="h3">做直播一般用哪一家运营商的宽带?做直播需要什么服务器</h3> </a> </li><li> <a href="/article/cdssiho.html"> <h3 class="h3">1错误代码E50是什么原因?windowspe5.1</h3> </a> </li><li> <a href="/article/cdssihe.html"> <h3 class="h3">虚拟主机中怎么上传文件</h3> </a> </li><li> <a href="/article/cdssihs.html"> <h3 class="h3">CC域名为什么那么不值钱?(cc域名怎么样)</h3> </a> </li> </ul> </div> </div> <!--右边end--> <div class="c_l"></div> </div> </div> <!--正文end--> <!--尾部begin--> <!--尾部begin--> <footer> <div class="f_bg"> <div class="wrap"> <div class="links"> <h2 class="h2">甜橘子解决方案<a href="/solution/" title="更多" class="more">更多+</a></h2> <ul> <li><a href="/solution/xiaochengxu.html" title="小程序定制解决方案">小程序定制解决方案</a></li> <li><a href="/solution/qiyewz.html" title="企业网站建设解决方案">企业网站建设解决方案</a></li> <li><a href="/solution/menhuwz.html" title="行业门户网站建设解决方案">行业门户网站建设解决方案</a></li> <li><a href="/solution/yingxiaowz.html" title="营销型网站建设解决方案">营销型网站建设解决方案</a></li> <li><a href="/solution/waimaowz.html" title="外贸网站建设解决方案">外贸网站建设解决方案</a></li> <li><a href="/solution/pingpaiwz.html" title="品牌形象网站建设解决方案">品牌形象网站建设解决方案</a></li> <li><a href="/solution/dianziwz.html" title="数码、电子产品网站建设解决方案">数码、电子产品网站建设解决方案</a></li> <li><a href="/solution/jituanwz.html" title="集团、上市企业网站建设解决方案">集团、上市企业网站建设解决方案</a></li> <li><a href="/solution/dichanwz.html" title="房地产、地产项目网站建设解决方案">房地产、地产项目网站建设解决方案</a></li> <li><a href="/solution/zhubaowz.html" title="珠宝高端奢侈品网站建设解决方案">珠宝高端奢侈品网站建设解决方案</a></li> </ul> </div> <div class="links w2"> <h2 class="h2">我们的实力<a href="/about/" title="更多" class="more">更多+</a></h2> <ul> <li>10年专业互联网服务经验</li> <li>成都高端建站设计团队</li> <li>资深行业分析策划</li> <li>B2C营销型网站建设者</li> <li>前沿视觉设计、研发能力</li> <li>前端代码深度符合SEO优化</li> <li>成都市高新技术企业证书</li> <li>具有完备的项目管理</li> <li>完善的售后服务体系</li> <li>深厚的网络运营经验</li> <li>时刻新技术研发能力</li> <li>16个网站系统软件著作权</li> </ul> </div> <div class="f_div2_r"> <h2 class="h2">关于甜橘子<a href="/about/" title="更多" class="more">更多+</a></h2> 甜橘子网站设计,为客户量身定制各类网站建设业务,包括企业型、电子商务型、行业门户型、品牌建立型等各类网站,实战经验丰富,成功案例众多。以客户利益为出发点,甜橘子网站制作为客户规划、定制符合企业需求、带有营销价值的建站方案,提供从网站前期定位分析策划到网站界面设计... </div> <div class="c_l"></div> </div> <div class="wrap"> <div class="f_div3"> <span class="l">成都网站制作案例©2020 甜橘子设计 版权所有 | <a href="http://chengdu.cdxwcx.cn" target="_blank">甜橘子网站设计</a><a href="http://chengdu.cdxwcx.cn" target="_blank">chengdu.cdxwcx.cn</a></span> <span class="r"><a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow">蜀ICP备11025516号</a></span> </div> </div> </div> </footer> <!--尾部end--> <script language="javascript" src="/Public/Home/js/foot.js"></script> <!--尾部end--> <!--侧边栏begin--> <div class="side"> <ul> <li id="qqonline_xbceo"><a href="tencent://message/?uin=631063699&Site=&Menu=yes"><i class="bgs1"></i>QQ咨询</a></li> <li class="shangqiao"><a href="tencent://message/?uin=532337155&Site=&Menu=yes" title="在线咨询"> <div><i class="bgs2"></i>在线咨询</div> </a></li> <li class="sideewm"><i class="bgs3"></i>官方微信 <div class="ewBox"></div> </li> <li class="sideetel"><i class="bgs4"></i>联系电话 <div class="telBox"> <dd class="bgs1"><span>座机</span><a href="tel:028-86922220" target="_blank">028-86922220</a></dd> <dd class="bgs2"><span>手机</span><a href="tel:13518219792" target="_blank">13518219792</a></dd> </div> </li> <li class="sidetop" onClick="goTop()" id="sidetop"><i class="bgs6"></i>返回顶部</li> </ul> </div> <script type="text/javascript"> $('.sideewm').hover(function(){ $('.ewBox').stop().fadeIn(); },function(){ $('.ewBox').stop().fadeOut(); }); $('.sideetel').hover(function(){ $('.telBox').stop().fadeIn(); },function(){ $('.telBox').stop().fadeOut(); }); $(".con_id 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); } }); </script> <!-- WPA start --> <!-- WPA end --> <!--侧边栏end--> </body> </html>