<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 73,  comments - 55,  trackbacks - 0

    (題外話:引入的文件如果是jsp則應定義為***.jspf文件,如果其他文件可定義為***.inc文件,即include file。而且<%@ inlucde page="" %>除了可以引jspf還可以引servlet——很重要)
    近日做一項目要用到JSP動態包含JSP,本想肯定很簡單,但不想這么復雜,而且目前還沒有求到好的答案,問題如下:
    ----------------------------------------
    #文件: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%>
    ----------------------------------------
    執行three.jsp會出什么結果?
    a.編譯錯誤
    b.顯示China England

    很多人理所當然的覺得肯定是a,因為j=1所以只包含one.jsp,two.jsp不會包含進來,但答案是b,上機測試就知道。
    為什么?
    因為@include要先于jsp的其他代碼執行,所以兩個文件都會被包含進來!
    ----------------------------------------
    如果你說用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%>

    ----------------------------------------
    結果是什么?
    a.編譯錯誤
    b.顯示 China

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

    為什么?因為jsp:include是動態包含,相當于把包含文件與被包含文件分開編譯。
    ----------------------------------------

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

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

    【自己的:-))】
    ?@include包含是靜態包含,是把被包含文件加入到包含文件中然后進行編譯,所以這種包含與解釋執行的語言很象(例如php),而且JSP中@開頭的語句都要先于其他語句執行,所以如上,用if.else來判斷然后包含是不行的,所以以前如果是做PHP這種解釋語言的人會覺得不適應(象我,:(()
    ?
    ?jsp:include是既可以靜態包含又可以動態包含,與@include不同的是,jsp:include沒有@include那樣的優先權,即不是現于其他語句執行的,所以jsp:include可以又選擇性的包含。不過更重要的一點是,用jsp:include相當于編譯兩個不同的文件,所以如果被包含文件中僅僅是顯示某些東西(例如被包含文件是純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 保爾任 閱讀(7194) 評論(1)  編輯  收藏

    FeedBack:
    # re: jsp:include與include的區別[未登錄]
    2011-08-07 13:27 | 小鬼
    第一個例子靜態包含中兩次定義了String var1="**";怎么不會出錯
      回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV无码一区二区三区电影 | 黄页网站在线视频免费| 成年人免费网站在线观看| 亚洲AV成人噜噜无码网站| 成人黄动漫画免费网站视频 | 中文字幕乱码亚洲无线三区 | 国产女高清在线看免费观看| 国产一级a毛一级a看免费人娇| 国产v片免费播放| 亚欧国产一级在线免费| 中文国产成人精品久久亚洲精品AⅤ无码精品| 免费人成再在线观看网站 | 亚洲av日韩av天堂影片精品| 久久国产乱子伦精品免费强| 久久精品亚洲综合一品| 中文字幕天天躁日日躁狠狠躁免费| 亚洲最新视频在线观看| 黄瓜视频高清在线看免费下载| 亚洲久热无码av中文字幕| 国产免费变态视频网址网站| 特a级免费高清黄色片| 亚洲精品乱码久久久久久中文字幕| 免费国产在线视频| 亚洲一区二区三区亚瑟| 免费无遮挡无码视频网站| 一级毛片在线免费播放| 亚洲午夜精品一区二区| 18禁无遮挡无码网站免费| 色哟哟国产精品免费观看| 亚洲丁香色婷婷综合欲色啪| 91情侣在线精品国产免费| 亚洲日本在线看片| 香蕉高清免费永久在线视频 | 亚洲综合在线另类色区奇米| 91福利免费体验区观看区| 亚洲AV性色在线观看| 国产亚洲日韩一区二区三区| 91香蕉在线观看免费高清| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 免费a级毛片视频| 一区二区三区观看免费中文视频在线播放 |