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ù)雜,而且目前還沒有求到好的答案,問題如下:
          ----------------------------------------
          #文件: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)然的覺得肯定是a,因?yàn)閖=1所以只包含one.jsp,two.jsp不會(huì)包含進(jìn)來,但答案是b,上機(jī)測(cè)試就知道。
          為什么?
          因?yàn)?#64;include要先于jsp的其他代碼執(zhí)行,所以兩個(gè)文件都會(huì)被包含進(jìn)來!
          ----------------------------------------
          如果你說用jsp:include可以解決問題,好,把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)于把包含文件與被包含文件分開編譯。
          ----------------------------------------

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

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

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

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

          【致版主】
          ?問題貼地址如下:
          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ū)別[未登錄]
          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)論排行榜

          主站蜘蛛池模板: 崇礼县| 开平市| 天全县| 宽甸| 商洛市| 吴江市| 额济纳旗| 大关县| 宽城| 太仆寺旗| 东乡县| 麻栗坡县| 报价| 通渭县| 军事| 英吉沙县| 昌乐县| 新余市| 泌阳县| 延寿县| 郯城县| 通化县| 土默特左旗| 绥棱县| 玉田县| 垫江县| 柘荣县| 安泽县| 龙里县| 三门县| 申扎县| 盘山县| 阳东县| 承德市| 兴化市| 淮滨县| 龙川县| 绥阳县| 会东县| 渭源县| 曲麻莱县|