posts - 73,  comments - 55,  trackbacks - 0

          (題外話:引入的文件如果是jsp則應(yīng)定義為***.jspf文件,如果其他文件可定義為***.inc文件,即include file。而且<%@ inlucde page="" %>除了可以引jspf還可以引servlet——很重要)
          近日做一項(xiàng)目要用到JSP動(dòng)態(tài)包含JSP,本想肯定很簡(jiǎn)單,但不想這么復(fù)雜,而且目前還沒(méi)有求到好的答案,問(wèn)題如下:
          ----------------------------------------
          #文件:one.jsp
          <%!
          String var1="China";
          %>
          ----------------------------------------
          #文件 two.jsp
          <%!
          String var1="America";
          String var2="England";
          %>
          ----------------------------------------
          #文件 three.jsp
          <%
          int j=1;
          if (j==1){
          %>
          <%@ include file="one.jsp"%>
          <%
          }else{
          %>
          <%@ include file="two.jsp"%>
          <%}%>
          <%=var1%>
          <%=var2%>
          ----------------------------------------
          執(zhí)行three.jsp會(huì)出什么結(jié)果?
          a.編譯錯(cuò)誤
          b.顯示China England

          很多人理所當(dāng)然的覺(jué)得肯定是a,因?yàn)閖=1所以只包含one.jsp,two.jsp不會(huì)包含進(jìn)來(lái),但答案是b,上機(jī)測(cè)試就知道。
          為什么?
          因?yàn)?#64;include要先于jsp的其他代碼執(zhí)行,所以兩個(gè)文件都會(huì)被包含進(jìn)來(lái)!
          ----------------------------------------
          如果你說(shuō)用jsp:include可以解決問(wèn)題,好,把three.jsp改成如下:
          #文件 three.jsp
          <%
          int j=1;
          String includeFile="";
          if (j==1){
          includeFile = "one.jsp";
          }else{
          includeFile = "two.jsp";
          }
          %>
          <jsp:include page=′<%=includeFile%>′ />
          <%=var1%>

          ----------------------------------------
          結(jié)果是什么?
          a.編譯錯(cuò)誤
          b.顯示 China

          是b嗎,不,是a,編譯錯(cuò)誤!提示var1未定義。

          為什么?因?yàn)閖sp:include是動(dòng)態(tài)包含,相當(dāng)于把包含文件與被包含文件分開(kāi)編譯。
          ----------------------------------------

          ?現(xiàn)把include的問(wèn)題總結(jié)如下:
          【引用 gfzhx(小小)的話】
          ??? 動(dòng)態(tài)包含相當(dāng)于作了一個(gè)頁(yè)面跳轉(zhuǎn),也就是相當(dāng)于重新訪問(wèn)了另一個(gè)servlet,所以當(dāng)然會(huì)提示變量沒(méi)有定義,你想一想,一個(gè)類中申明了一個(gè)變量,第二個(gè)類直接是用這個(gè)變量,你說(shuō)可以嗎?其實(shí)你的情況和這個(gè)例子很像,這就是動(dòng)態(tài)包含,而靜態(tài)包含你可以看一看jsp編譯后的java文件就知道了,它是直接將你包含的頁(yè)面直接包含進(jìn)去,然后再編譯的。所以你的問(wèn)題采用靜態(tài)包含就可以了。不過(guò)不管怎么,還是不推薦采用這種形式,會(huì)給程序造成很多問(wèn)題,至少比較難以維護(hù)了,可以說(shuō)是一種不好的編程風(fēng)格。建議采用其他方法解決問(wèn)題。

          【引用 xiao_yuer(小魚(yú)兒)的話】
          ?要使用引入文件中定義的變量,只能用@include指令。
          也就是<%@ include file="one.jsp" %>,但這在一般情況下都不是動(dòng)態(tài)的,是在jsp頁(yè)面第一次編譯時(shí),把它導(dǎo)入的。而jsp編譯后,這兩個(gè)文件再作修改很多jsp服務(wù)器都不會(huì)偵測(cè)到,因?yàn)榘@兩的jsp的jsp文件本身并沒(méi)有發(fā)生變化。但很奇怪,weblogic6好像可以。你可以試試,不過(guò)不要抱太大希望,因?yàn)槟氵@種要求不是很合理。向你這種情況,完全應(yīng)該引入一個(gè)java類,這個(gè)類中定義一些變量(按你的說(shuō)法都應(yīng)該算是常量了,jsp取出來(lái)直接用而不會(huì)修改它再存回去),然后再jsp中得到那個(gè)類的實(shí)例,來(lái)進(jìn)行處理。那樣如果你要修改這些常量的值,就修改java類,而不用修改jsp.

          【自己的:-))】
          ?@include包含是靜態(tài)包含,是把被包含文件加入到包含文件中然后進(jìn)行編譯,所以這種包含與解釋執(zhí)行的語(yǔ)言很象(例如php),而且JSP中@開(kāi)頭的語(yǔ)句都要先于其他語(yǔ)句執(zhí)行,所以如上,用if.else來(lái)判斷然后包含是不行的,所以以前如果是做PHP這種解釋語(yǔ)言的人會(huì)覺(jué)得不適應(yīng)(象我,:(()
          ?
          ?jsp:include是既可以靜態(tài)包含又可以動(dòng)態(tài)包含,與@include不同的是,jsp:include沒(méi)有@include那樣的優(yōu)先權(quán),即不是現(xiàn)于其他語(yǔ)句執(zhí)行的,所以jsp:include可以又選擇性的包含。不過(guò)更重要的一點(diǎn)是,用jsp:include相當(dāng)于編譯兩個(gè)不同的文件,所以如果被包含文件中僅僅是顯示某些東西(例如被包含文件是純HTML)的話,這種情況下,用jsp:include和@include來(lái)包含文件的效果是一樣的,但如果要用jsp:include來(lái)顯示被包含文件中定義的變量就不行了(為什么?見(jiàn)上面的引用吧,就不贅述了)。

          【感謝】
          ?gfzhx(小小)、xiao_yuer(小魚(yú)兒)

          【致版主】
          ?問(wèn)題貼地址如下:
          http://www.csdn.net/Expert/FAQ/FAQ_Index.asp?id=1380
          http://www.csdn.net/expert/topic/707/707524.xml?temp=1.226443E-02
          希望版主能夠更正一下。

          posted on 2006-07-02 11:28 保爾任 閱讀(7200) 評(píng)論(1)  編輯  收藏

          FeedBack:
          # re: jsp:include與include的區(qū)別[未登錄](méi)
          2011-08-07 13:27 | 小鬼
          第一個(gè)例子靜態(tài)包含中兩次定義了String var1="**";怎么不會(huì)出錯(cuò)
            回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 潢川县| 镇江市| 昔阳县| 瑞昌市| 巴林左旗| 阿拉善盟| 西吉县| 古浪县| 仁寿县| 凤阳县| 凤庆县| 屏东市| 静乐县| 涞水县| 铅山县| 绍兴县| 邳州市| 隆化县| 宁城县| 安图县| 手游| 昂仁县| 清流县| 绥滨县| 渭源县| 盐池县| 新干县| 米脂县| 建阳市| 安西县| 宣恩县| 阿拉尔市| 米易县| 皋兰县| 时尚| 徐州市| 镇赉县| 武城县| 临桂县| 腾冲县| 镇原县|