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

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

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

    零度空間

    To feel the crazy world

    The solution of problem: "code too large for try statement"

    今天碰到了個比較奇怪的問題,居然是因為JSP太大導致文件編譯不了,上網查了一下,把解決方法貼下來,以供以后參考:

    The problem is that there is a limit on the size of a compiled method in a
    Java class file, and that limit is what we're running up against. Recall
    that a JSP page is compiled into a servlet, and into essentially only one
    method in that servlet. Hence, if your page contains many, many tags, that
    method becomes too big, and up comes the exception that you're seeing.

    There are a couple of (partial) solutions.

    1) Break your giant page up into multiple smaller pages and bring them
    together at run time using <jsp:include>. Note that <%@include> won't work,
    because that's a compile-time include, which will get you straight back to
    the original problem.

    2) Look for places to save on tags. For example, the <html:option> tag was
    recently extended to allow the specification of the text to display, so
    that you can replace this:

    <html:option ... ><bean:message key="foo"/></html:option>

    with this:

    <html:option ... key="foo"/>

    More info pls access this link: Solution

    我就是用了第一種方法解決的,之前include JSP的時候用了%@include, 后來用了<jsp:include>就不會用問題了.順便貼一下兩者的區別:


    @include & jsp:include的區別
    引用:http://www.ibm.com/developerworks/cn/java/j-jsp04293/

    本文是 Java Brett McLaughlin 繼第一篇 JSP 最佳實踐文章后的后續文章,在文中,作者向您演示了如何擴展 JSP 技術中用于動態內容的包含功能。了解靜態 include 偽指令和動態 jsp:include 元素之間的差異,搞清楚如何混合搭配這二者以獲取最優性能。
    在新的 JSP 最佳實踐系列的前一篇文章中,您了解了如何使用 JSP include 偽指令將諸如頁眉、頁腳和導航組件之類的靜態內容包含到 Web 頁面中。和服務器端包含一樣,JSP include 偽指令允許某個頁面從另一個頁面提取內容或數據。

    清單 1. JSP include 偽指令

    <%@ page language="java" contentType="text/html" %>
    <html>
    <head>
          <title>newInstance.com</title>
          <meta http-equiv="Content-Type"
            content="text/html; charset=iso-8859-1" />
          <link href="/styles/default.css"
            rel="stylesheet" type="text/css" />
    </head>
    <body>
    <%@ include file="header.jsp" %>
    <%@ include file="navigation.jsp" %>
    <%@ include file="bookshelf.jsp" %>
    <%@ include file="/mt-blogs/index.jsp" %>
    <%@ include file="footer.jsp" %>
    </body>
    </html>



    雖然 include 非常適于將靜態內容并入 Web 頁面,但對于動態內容卻不盡如人意。我們在前一篇文章中在試圖重新裝入高速緩存文件時發現了這一問題。與大多數頁眉文件及頁腳文件不同,動態內容變化頻繁,必須時刻更新。我們將首先扼要地重述一下 include 偽指令的局限性,然后我將向您演示如何用 jsp:include 標記來擴展 JSP 的包含能力。


    高速緩存問題

    JSP include 偽指令的不足之處有一個是:它會導致 Web 瀏覽器高速緩存所有頁面。在處理諸如頁腳、版權聲明或一組靜態鏈接之類的靜態組件時,這是有意義的。這些文件不會改變,因此沒有理由讓 JSP 解釋器不斷地重新輪詢其中的數據。凡是可能的地方,都應該實現高速緩存,因為它改善了應用程序的性能。


    但是,有時侯,進行高速緩存會得不償失。如果提入的內容來自使用動態數據(如 Weblog 或數據庫驅動的 JSP 文件)的程序,甚至如果所包含的內容是經常變化的 HTML(如時間戳記),那么每當裝入 Web 頁面時,都需要顯示這些文件或程序的最新版本。遺憾的是,JSP include 偽指令并不具備這一功能。在測試和開發周期中,在瀏覽器中禁用高速緩存通常能夠解決這一問題。但是,對于實際使用的應用程序而言,性能是任何設計決策過程中的一項重要因素,禁用高速緩存并不是一種可行的長遠之計。更好的解決方案是使用 jsp:include 標記。

    jsp:include 標記

    jsp:include 只不過是一個不同于 include 的偽指令而已。 jsp:include 的優點在于:它 總是會檢查所含文件中的變化。過一會兒我們將研究這一新標記的工作方式。但首先看一下兩種 include 各自的代碼,以便能夠看到二者之間的異同。

    清單 2 顯示了一個簡單頁面,它使用了原始的 JSP include 偽指令。


    清單 2. JSP include 偽指令

    <%@ page language="java" contentType="text/html" %>
    <html>
         <head>
          <title>JSP include element test</title>
         </head>
         <body>
          This content is statically in the main JSP file.<br />
          <%@ include file="included.html" %>
         </body>
    </html>


    清單 3 是同一個頁面,只不過這里轉成使用 jsp:include 標記。


    清單 3. 轉成使用 jsp:include

    <%@ page language="java" contentType="text/html" %>
    <html>
         <head>
          <title>JSP include element test</title>
         </head>
         <body>
          This content is statically in the main JSP file.<br />
          <jsp:include page="included.html" flush="true" />
         </body>
    </html>


    您應該注意這兩種代碼類型之間的兩大區別。首先, jsp:include 元素不使用屬于 include 偽指令的 %@ 語法。實際上, jsp 前綴讓 JSP 編譯器知道:它應該尋找標準 JSP 標記集中的元素。其次,指定要包含的文件的屬性從 file 變成了 page 。


    flush 屬性

    您可能已注意到 jsp:include 代碼示例中的 flush 屬性。顧名思義, flush 指示在讀入包含內容之前是否清空任何現有的緩沖區。JSP 1.1 中需要 flush 屬性,因此,如果代碼中不用它,會得到一個錯誤。但是,在 JSP 1.2 中, flush 屬性缺省為 false。由于清空大多數時候不是一個重要的問題,因此,我的建議是:對于 JSP 1.1,將 flush 設置為 true;而對于 JSP 1.2 及更高版本,將其設置為關閉。


    jsp:include 是如何工作的

    如果您有點愛刨根問底,那么可能十分想知道 jsp:include 標記的行為為什么與 include 偽指令不同。道理其實十分簡單: jsp:include 包含的是所包含 URI 的 響應,而不是 URI 本身。這意味著:對所指出的 URI 進行 解釋,因而包含的是 生成的響應。如果頁面是 HTML,那么將得到一點也沒有變化的 HTML。但是,如果是 Perl 腳本、Java servlet 或者 CGI 程序,那么得到的將是從該程序解釋而得的結果。雖然頁面通常就是 HTML,但實際程序恰好是達到目的的手段。而且,由于每次請求頁面的時候都會進行解釋,因此從來不會象使用 include 偽指令時那樣高速緩存結果。雖然這只是很小的變動,但它卻導致了您所見到的行為中的全部差異。


    一種混合搭配的解決方案

    include 偽指令在某些網站上有其用武之地。例如,如果站點包含一些(如果有變化,也很少)幾乎沒有變化的頁眉、頁腳和導航文件,那么基本的 include 偽指令是這些組件的最佳選項。由于 include 偽指令采用了高速緩存,因此只需放入包含文件一次,其內容就會被高速緩存,其結果會是極大地提高了站點的性能。

    然而,對于現在許多 Web 應用程序或站點而言,地毯式的高速緩存并不能解決問題。雖然頁眉和頁腳可能是靜態的,但是不可能整個站點都是靜態的。例如,從數據庫提取導航鏈接是很常見的,并且許多基于 JSP 技術的站點還從其它站點或應用程序上的動態 JSP 頁面提取內容。如果正在處理動態內容,那么需要采用 jsp:include 來處理該內容。

    當然,最好的解決方案是經常把這兩種方法混合搭配使用,將每種構造用到最恰當的地方。清單 4 是混合搭配包含解決方案的一個示例。

    清單 4. 混合搭配解決方案

    <%@ page language="java" contentType="text/html" %>
    <html>
    <head>
    <title>newInstance.com</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link href="/styles/default.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <jsp:include page="header.jsp" flush="true">
    <jsp:param name="pageTitle" value="newInstance.com"/>
    <jsp:param name="pageSlogan" value=" " />
    </jsp:include>
    <%@ include file="/navigation.jsp" %>
    <jsp:include page="bookshelf.jsp" flush="true" />
    <jsp:include page="/mt-blogs/index.jsp" flush="true" />
    <%@ include file="/footer.jsp" %>
    </body>
    </html>


    上面的代碼顯示了前一篇文章中的示例索引頁面。導航鏈接和頁腳是靜態內容,一年最多更改一次。對于這些文件,我使用了 include 偽指令。內容窗格包含 Weblog 和“bookshelf”組件,它們是動態生成的。這兩個組件需要一直更新,因此對它們,我使用了 jsp:include 標記。 header.jsp 文件有點奇怪。這個組件是從另一個本質上是靜態的 JSP 頁面提取的。但是,正如您將注意到的那樣,它從包含頁提取頁“標語”,然后將它顯示出來。要處理這一共享信息,我們必須向頁眉文件傳入參數。而要處理那些參數,就必須使用 jsp:include 元素。

     
    后記:網上還有一種Solution:

    try giving this in the deployment descriptor.

    <jsp-param>
    <param-name>noTryBlocks</param-name>
    <param-value>true</param-value>
    </jsp-param>

    本人沒有試過, 不知好不好用....

    posted on 2009-02-06 18:33 KenLee 閱讀(1239) 評論(1)  編輯  收藏 所屬分類: Problem Solution

    評論

    # re: The solution of problem: "code too large for try statement" 2009-02-11 12:06 pyf

    我也碰到過這個問題,不過是采用動態生成組件的方式解決的,也就是在托管bean中生成部分組件。不過個人之見,如果某個頁面出現了這個問題,無論怎么解決,在加載這個頁面的時候都不會很快(畢竟這個頁面太大了),性能問題是很難解決的。  回復  更多評論   


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


    網站導航:
     

    導航

    <2009年2月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    1234567

    統計

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    Tech

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本高清免费网站| 精品久久久久久亚洲精品| 亚洲AV成人片无码网站| 免费人成网站在线观看不卡| 亚洲宅男天堂在线观看无病毒| 香蕉视频在线观看免费| 日韩一区二区三区免费体验| 午夜亚洲国产理论片二级港台二级| 久久久www成人免费毛片| 亚洲色成人网站WWW永久四虎 | 国产亚洲婷婷香蕉久久精品| 免费人成大片在线观看播放电影| 亚洲成A人片在线观看中文| 永久免费无码网站在线观看个| 亚洲AV无码乱码在线观看| 欧洲精品码一区二区三区免费看| 久久久久久亚洲精品不卡| 中文在线观看国语高清免费| 亚洲AV无码专区亚洲AV伊甸园 | 亚洲精品日韩中文字幕久久久| 6080午夜一级毛片免费看 | 亚洲AV色无码乱码在线观看| vvvv99日韩精品亚洲| 成人网站免费大全日韩国产| 久久精品国产亚洲av成人| 久久成人国产精品免费软件| 亚洲色成人WWW永久在线观看| 国产免费久久精品| 国产亚洲精品免费视频播放| 亚洲蜜芽在线精品一区| 国内自产拍自a免费毛片| 人碰人碰人成人免费视频| 久久亚洲AV无码精品色午夜 | 国产麻豆视频免费观看| 亚洲精品无码成人| 曰韩亚洲av人人夜夜澡人人爽 | 国产免费MV大全视频网站| 亚洲国产高清视频| 国产精品无码一区二区三区免费| 中文无码日韩欧免费视频| 亚洲春色另类小说|