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

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

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

    愚人碼頭

    知恥而后勇,知不足而進
    隨筆 - 33, 文章 - 1, 評論 - 26, 引用 - 0
    數(shù)據(jù)加載中……

    2007年12月14日

    對hibernate的新認識

         摘要:   閱讀全文

    posted @ 2008-01-30 11:14 船夫 閱讀(1954) | 評論 (7)編輯 收藏

    轉:Javascript事件處理

         摘要:   閱讀全文

    posted @ 2007-12-26 13:00 船夫 閱讀(349) | 評論 (0)編輯 收藏

    轉:提升JSP應用程序的七大絕招

    提升JSP應用程序的七大絕招
    你時常被客戶抱怨JSP頁面響應速度很慢嗎?你想過當客戶訪問次數(shù)劇增時,你的WEB應用能承受日益增加的訪 問量嗎?本文講述了調整JSP和servlet的一些非常實用的方法,它可使你的servlet和JSP頁面響應更快,擴展性更強。而且在用戶數(shù)增加的情 況下,系統(tǒng)負載會呈現(xiàn)出平滑上長的趨勢。在本文中,我將通過一些實際例子和配置方法使得你的應用程序的性能有出人意料的提升。其中,某些調優(yōu)技術是在你的 編程工作中實現(xiàn)的。而另一些技術是與應用服務器的配置相關的。在本文中,我們將詳細地描述怎樣通過調整servlet和JSP頁面,來提高你的應用程序的 總體性能。在閱讀本文之前,假設你有基本的servlet和JSP的知識。
    方法一:在servlet的init()方法中緩存數(shù)據(jù)

    當應用服務器初始化servlet實例之后,為客戶端請求提供服務之前,它會調用這個servlet的init()方法。在一個servlet的生命周 期中,init()方法只會被調用一次。通過在init()方法中緩存一些靜態(tài)的數(shù)據(jù)或完成一些只需要執(zhí)行一次的、耗時的操作,就可大大地提高系統(tǒng)性能。

    例如,通過在init()方法中建立一個JDBC連接池是一個最佳例子,假設我們是用jdbc2.0的DataSource接口來取得數(shù)據(jù)庫連接,在通 常的情況下,我們需要通過JNDI來取得具體的數(shù)據(jù)源。我們可以想象在一個具體的應用中,如果每次SQL請求都要執(zhí)行一次JNDI查詢的話,那系統(tǒng)性能將 會急劇下降。解決方法是如下代碼,它通過緩存DataSource,使得下一次SQL調用時仍然可以繼續(xù)利用它:

    public class ControllerServlet extends HttpServlet
    {
    private javax.sql.DataSource testDS = null;
    public void init(ServletConfig config) throws ServletException
    {
    super.init(config);
    Context ctx = null;
    try
    {
    ctx = new InitialContext();
    testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");
    }
    catch(NamingException ne)
    {
    ne.printStackTrace();
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }

    public javax.sql.DataSource getTestDS()
    {
    return testDS;
    }
    ...
    ...
    }

    方法 2:禁止servlet和JSP 自動重載(auto-reloading)

    Servlet/JSP提供了一個實用的技術,即自動重載技術,它為開發(fā)人員提供了一個好的開發(fā)環(huán)境,當你改變servlet和JSP頁面后而不必重啟 應用服務器。然而,這種技術在產(chǎn)品運行階段對系統(tǒng)的資源是一個極大的損耗,因為它會給JSP引擎的類裝載器(classloader)帶來極大的負擔。因 此關閉自動重載功能對系統(tǒng)性能的提升是一個極大的幫助。

    方法 3: 不要濫用HttpSession

    在很多應 用中,我們的程序需要保持客戶端的狀態(tài),以便頁面之間可以相互聯(lián)系。但不幸的是由于HTTP具有天生無狀態(tài)性,從而無法保存客戶端的狀態(tài)。因此一般的應用 服務器都提供了session來保存客戶的狀態(tài)。在JSP應用服務器中,是通過HttpSession對像來實現(xiàn)session的功能的,但在方便的同 時,它也給系統(tǒng)帶來了不小的負擔。因為每當你獲得或更新session時,系統(tǒng)者要對它進行費時的序列化操作。你可以通過對HttpSession的以下 幾種處理方式來提升系統(tǒng)的性能:

    ? 如果沒有必要,就應該關閉JSP頁面中對HttpSession的缺省設置: 如果你沒有明確指定的話,每個JSP頁面都會缺省地創(chuàng)建一個HttpSession。如果你的JSP中不需要使用session的話,那可以通過如下的JSP頁面指示符來禁止它:

    <%@ page session="false"%>

    ? 不要在HttpSession中存放大的數(shù)據(jù)對像:如果你在HttpSession中存放大的數(shù)據(jù)對像的話,每當對它進行讀寫時,應用服務器都將對其進行 序列化,從而增加了系統(tǒng)的額外負擔。你在HttpSession中存放的數(shù)據(jù)對像越大,那系統(tǒng)的性能就下降得越快。

    ? 當你不需要HttpSession時,盡快地釋放它:當你不再需要session時,你可以通過調用HttpSession.invalidate()方法來釋放它。

    ? 盡量將session的超時時間設得短一點:在JSP應用服務器中,有一個缺省的session的超時時間。當客戶在這個時間之后沒有進行任何操作的話, 系統(tǒng)會將相關的session自動從內存中釋放。超時時間設得越大,系統(tǒng)的性能就會越低,因此最好的方法就是盡量使得它的值保持在一個較低的水平。

    方法 4: 將頁面輸出進行壓縮

    壓縮是解決數(shù)據(jù)冗余的一個好的方法,特別是在網(wǎng)絡帶寬不夠發(fā)達的今天。有的瀏覽器支持gzip(GNU zip)進行來對HTML文件進行壓縮,這種方法可以戲劇性地減少HTML文件的下載時間。因此,如果你將servlet或JSP頁面生成的HTML頁面 進行壓縮的話,那用戶就會覺得頁面瀏覽速度會非常快。但不幸的是,不是所有的瀏覽器都支持gzip壓縮,但你可以通過在你的程序中檢查客戶的瀏覽器是否支 持它。下面就是關于這種方法實現(xiàn)的一個代碼片段:

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
    OutputStream out = null
    String encoding = request.getHeader("Accept-Encoding");
    if (encoding != null && encoding.indexOf("gzip") != -1)
    {
    request.setHeader("Content-Encoding" , "gzip");
    out = new GZIPOutputStream(request.getOutputStream());
    }
    else if (encoding != null && encoding.indexOf("compress") != -1)
    {
    request.setHeader("Content-Encoding" , "compress");
    out = new ZIPOutputStream(request.getOutputStream());
    }
    else
    {
    out = request.getOutputStream();
    }
    ...
    ...
    }

    方法 5: 使用線程池

    應用服務器缺省地為每個不同的客戶端請求創(chuàng)建一個線程進行處理,并為它們分派service()方法,當service()方法調用完成后,與之相應的 線程也隨之撤消。由于創(chuàng)建和撤消線程會耗費一定的系統(tǒng)資源,這種缺省模式降低了系統(tǒng)的性能。但所幸的是我們可以通過創(chuàng)建一個線程池來改變這種狀況。另外, 我們還要為這個線程池設置一個最小線程數(shù)和一個最大線程數(shù)。在應用服務器啟動時,它會創(chuàng)建數(shù)量等于最小線程數(shù)的一個線程池,當客戶有請求時,相應地從池從 取出一個線程來進行處理,當處理完成后,再將線程重新放入到池中。如果池中的線程不夠地話,系統(tǒng)會自動地增加池中線程的數(shù)量,但總量不能超過最大線程數(shù)。 通過使用線程池,當客戶端請求急劇增加時,系統(tǒng)的負載就會呈現(xiàn)的平滑的上升曲線,從而提高的系統(tǒng)的可伸縮性。

    方法 6: 選擇正確的頁面包含機制

    在JSP中有兩種方法可以用來包含另一個頁面:1、使用include指示符(<%@ includee file=”test.jsp” %>)。2、使用jsp指示符(<jsp:includee page=”test.jsp” flush=”true”/>)。在實際中我發(fā)現(xiàn),如果使用第一種方法的話,可以使得系統(tǒng)性能更高。

    方法 7:正確地確定javabean的生命周期

    JSP的一個強大的地方就是對javabean的支持。通過在JSP頁面中使用<jsp:useBean>標簽,可以將javabean直接插入到一個JSP頁面中。它的使用方法如下:

    <jsp:useBean id="name" scope="page|request|session|application" class=
    "package.className" type="typeName">
    </jsp:useBean>

    其中scope屬性指出了這個bean的生命周期。缺省的生命周期為page。如果你沒有正確地選擇bean的生命周期的話,它將影響系統(tǒng)的性能。

    舉例來說,如果你只想在一次請求中使用某個bean,但你卻將這個bean的生命周期設置成了session,那當這次請求結束后,這個bean將仍然 保留在內存中,除非session超時或用戶關閉瀏覽器。這樣會耗費一定的內存,并無謂的增加了JVM垃圾收集器的工作量。因此為bean設置正確的生命 周期,并在bean的使命結束后盡快地清理它們,會使用系統(tǒng)性能有一個提高

    其它一些有用的方法

    ? 在字符串連接操作中盡量不使用“+”操作符:在java編程中,我們常常使用“+”操作符來將幾個字符串連接起來,但你或許從來沒有想到過它居然會對系統(tǒng) 性能造成影響吧?由于字符串是常量,因此JVM會產(chǎn)生一些臨時的對像。你使用的“+”越多,生成的臨時對像就越多,這樣也會給系統(tǒng)性能帶來一些影響。解決 的方法是用StringBuffer對像來代替“+”操作符。

    ? 避免使用System.out.println()方法:由于System.out.println()是一種同步調用,即在調用它時,磁盤I/O操作必 須等待它的完成,因此我們要盡量避免對它的調用。但我們在調試程序時它又是一個必不可少的方便工具,為了解決這個矛盾,我建議你最好使用Log4j工具 (http://Jakarta.apache.org ),它既可以方便調試,而不會產(chǎn)生System.out.println()這樣的方法。

    ? ServletOutputStream 與 PrintWriter的權衡:使用PrintWriter可能會帶來一些小的開銷,因為它將所有的原始輸出都轉換為字符流來輸出,因此如果使用它來作為 頁面輸出的話,系統(tǒng)要負擔一個轉換過程。而使用ServletOutputStream作為頁面輸出的話就不存在一個問題,但它是以二進制進行輸出的。因 此在實際應用中要權衡兩者的利弊。

    總結

    本文的目的是通過對servlet和JSP的一些調優(yōu)技術來極大地提高你 的應用程序的性能,并因此提升整個J2EE應用的性能。通過這些調優(yōu)技術,你可以發(fā)現(xiàn)其實并不是某種技術平臺(比如J2EE和.NET之爭)決定了你的應 用程序的性能,重要是你要對這種平臺有一個較為深入的了解,這樣你才能從根本上對自己的應用程序做一個優(yōu)化! 

    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1448910

    posted @ 2007-12-25 17:04 船夫 閱讀(229) | 評論 (0)編輯 收藏

    轉載一篇測試筆記,用于備忘

         摘要:   閱讀全文

    posted @ 2007-12-25 14:43 船夫 閱讀(271) | 評論 (0)編輯 收藏

    JSP編譯過程

    很久以來,都知道JSP其實就是Servlet,今天心血來潮,想把里面的具體代碼看一遍,并記錄心得。
    一個編譯好的JSP類如下:
    public
     final class index_jsp extends HttpJspBase
        
    implements JspSourceDependent
    //上述類為index.jsp被編譯后得到的類
    //HttpJspBase是extends HttpServlet的一個類
    //JspSourceDependent是一個接口,只聲明了一個方法、、getDependants(),返回當前page所依賴的文件的名稱,文件包括以下幾種
    //1) files that are included by page directives 
    //2) files that are included by include-prelude and include-coda in jsp:config 
    //3) files that are tag files and referenced 
    //4) TLDs referenced
    其核心方法為:
      public void _jspService(HttpServletRequest request, HttpServletResponse response)
            
    throws IOException, ServletException{
    .
    }
    該方法重載HttpJspBase中的_jspService方法,進行頁面解析,包括對scriptlet的加載,html的生成,自定義Tag的解析等等
    HttpJspBase的service再對_jspService再進行調用,最終生成HTML頁面

    posted @ 2007-12-18 12:06 船夫 閱讀(1907) | 評論 (1)編輯 收藏

    Annotation初步了解

    今天在看Tapestry代碼的時候,突然想了解一下annotation到底是干什么的,有什么好處?花了3個小時的時間,從JDK API開始,大致了解了一下。

    annotation實際上就是給一些特定的類和其屬性,方法等加上一些注釋(annotation),這些注釋是以屬性name,value進行設置的,這些屬性在Annotation Class中以方法的形式存在,如下:
    @Documented                //是否需要產(chǎn)生javadoc
    @Target(java.lang.annotation.ElementType.METHOD)   //應用目標,這里是應用到field屬性上面
    @Retention(RetentionPolicy.RUNTIME)   //該策略指明該注釋會被加載到jvm中,即在運行時,我們可以得到該注釋的內容,另外兩個策略,SOURCE, CLASS都不會加載到jvm中
    public @interface TestAnnoation {
        String value();   //屬性value
        String time();     //屬性time
    }
    以上為自定義的annotation,是應用在成員變量上的,使用該annotation情況如下
    public class Test {
        @TestAnnoation(time
    ="12:30",value="20")
        
    public String test(){
              System.out.println("test!");
              return null;
        };
    }

    可以使用java的反射來進行獲取,通過:
    Class cls = Class.forName("Test");
    cls.isAnnotationPresent(AnnotationClass.
    class);//判斷是否存在annotation
    TestAnnotation ta = (TestAnnotation)cls.getAnnotation(AnnotationClass.class);//獲得AnnotationClass實例,后調用這個實例可以獲得在AnnotationClass中定義的一些屬性
    System.out.println(ta.time()); //輸出注釋time內容
    System.out.println(ta.value()); //輸出注釋value內容

    我個人認為annotation的好處是將一些配置直接寫在代碼上,很直觀;以前在使用hibernate的時候,PO對象和對應的mapping xml是分開的,不夠直觀,若是使用annotation就會很直觀的看出這個對象的映射屬性以及它的一些特殊屬性(如lazy=true)之類的,在JPA中就把這種配置方式換成了annotation。

    在JE上有很多關于使用annotation和xml的爭論,我認為在小規(guī)模使用上可以使用annotation,就像JPA這種,每個PO上面都需要進行配置,即使使用XML也不能簡化;而在大規(guī)模使用,如spring所維護的一些service的事務配置上避免使用annotation,因為每個service類中都需要配置,而使用AOP根據(jù)XML配置可以一下就搞定。

    關于ElementType的其他屬性:
    TYPE(類型), FIELD(屬性), METHOD(方法), PARAMETER(參數(shù)), CONSTRUCTOR(構造函數(shù)),LOCAL_VARIABLE(局部變量), ANNOTATION_TYPE,PACKAGE(包),其中的TYPE(類型)是指可以用在Class,Interface,Enum和 Annotation類型上.

    posted @ 2007-12-17 16:33 船夫 閱讀(322) | 評論 (1)編輯 收藏

    禁食了,腎結石患者還能吃什么?

    當腎結石、膀胱結石發(fā)生以后,患者在劇烈的疼痛中常向醫(yī)生討教:腎臟、尿道里那來的石頭呢?手術之后要怎樣才能預防它復發(fā)呢?
    結石的形成,主要原因就是飲食。它是由飲食中可形成結石的有關成分攝入過多引起的。再細一點解釋是:
    草酸積存過多。體內草酸的大量積存,是導致腎尿結石的 因素之一。如菠菜、豆類、葡萄、可可、茶葉、桔子、番茄、土豆、李子、竹筍等這些人們普遍愛吃的東西,正是含草酸較高的食物。醫(yī)生通過研究發(fā)現(xiàn):200克 菠菜中,含草酸725.6毫克,如果一人一次將200克菠菜全部吃掉,食后8小時,檢查尿中草酸排泄量為20-25毫克,相當于正常人24小時排出的草酸 平均總量。
    嘌呤代謝失常。動物內臟、海產(chǎn)食品、花生、豆角、菠菜等,均含有較多的嘌呤成分。嘌呤進入體內后,要進行新陳代謝,它代謝的最終產(chǎn)物是尿酸。尿酸可促使尿中草酸鹽沉淀。如果,一次過多地食用了含嘌呤豐富的食物,嘌呤的代謝又失常,草酸鹽便在尿中沉積而形成尿結石
    脂肪攝取太多。各種動物的肉類,尤其是肥豬肉,都是脂肪多的食品。多吃了體內脂肪必然增高,脂肪會減少腸道中可結合的鈣,因而引起對草酸鹽的吸收增多,如果一旦出現(xiàn)排泄功能故障,如出汗多、喝水少,尿量少,腎結石很可能就在這種情況下形成。所以,醫(yī)生們常講,為了預防得結石病,熱天要多喝點水,吃了油水多的食物時,也要多喝點水,以促進排尿暢通,稀釋尿液成分,就減少了得結石的危險。
    糖分增高。糖是人體的重要養(yǎng)分,要經(jīng)常適量增補,但一下子增加太多,尤其是乳糖,也會使結石形成創(chuàng)造條件。專家們發(fā)現(xiàn):不論正常人或結石病人,在食用100克蔗糖后,過2小時去檢查他們的尿,發(fā)現(xiàn)尿中的鈣和草酸濃度均上升,若是服用乳糖,它更能促進鈣的吸收,更可能導致草酸鈣在體內的積存而形成尿結石
    蛋白質過量。對腎結石成分進行化驗分析,發(fā)現(xiàn)結石中的草酸鈣占87.5%。這么大比重的草酸鈣的來源就是因為蛋白質里除含有草酸的原料——甘氨酸、羥脯氨酸之外,蛋白質還能促進腸道功能對鈣的吸收。如果經(jīng)常過量食用高蛋白質的食物,便使腎臟和尿中的鈣、草酸、尿酸的成分普遍增高。如果不能及時有效地通過腎臟功能把多余的鈣、草酸、尿酸排出體外,這樣,得腎臟結石、輸尿管結石癥的條件就形成了。當今世界經(jīng)濟發(fā)達國家腎結石發(fā)病率增高的主要原因就是如此。
    從以上幾種易形成腎結石的因素來看,要預防腎結石病 的發(fā)生,就必須改變只顧單求一種營養(yǎng)和追求營養(yǎng)過甚的觀念。這就是說,在人類的日常飲食中,不能因為某種食物好吃、營養(yǎng)價值高,就一味地只顧去吃這種食 物。必須注意食物的搭配,各種食物都適量進食,即使是檢查出身體缺乏某種營養(yǎng)素需要某種食物來補充時,也不宜一次大量進食,因為人體的消化、吸收功能是有限的。消化、吸收不了的養(yǎng)分就要通過排泄器官排泄出去,這樣也會增加泌尿系統(tǒng)的負擔,即便不患腎結石病,也對健康不利。特別是當檢查出確認是腎結石癥時,在患病期間,要限制病人吃那些易促使結石形成的食物。
    結石是尿石癥的一種,多在炎熱的夏天形成,因為夏天大量出汗,甚至體內脫水,使排尿減少,再加之夏季暴露于陽光下時間長,紫外線照射皮膚有助于體內維生素D和維生素A合成增多,維生素D和維生素A可促進小腸吸收鈣離子,尿液中排泄鈣增多,尿內結石物質易產(chǎn)生結晶核,從而形成結石。冬季天氣寒冷,人的尿量增多,已形成的小結石被尿液沖刷,向下移動,此時引起腎絞痛癥狀。所以,腎結石常為“夏季形成冬季發(fā)病”。

    人們的飲食品種是多樣的,人體新陳代謝是復雜的,所以腎結石的成分也是多樣的。常見結石按成分可分為五種:一草酸鈣結石:最為常見,占腎結石的80以上,在酸性或中性尿中形成,發(fā)病多為青壯年,以男性多見。二磷酸鈣結石:占結石的6-9,在堿性尿中形成,也以男性青壯年多發(fā)。三尿酸結石:占結石的6,在酸性尿中形成,當尿PH值大于6.7時結石溶解,以男性多見。四磷酸鎂胺結石:占結石的10,在堿性尿中形成,尿PH值小于7.2時結石溶解,以女性多見。五胱氨酸結石:少見,約占結石的1-2,在酸性尿中形成,尿PH值大于7.0時結石溶解。

    大量飲水對所有成分尿石都有防治作用。在炎熱的夏天,每日尿量少于1200毫升時,尿石生長的危險性顯著增大。如能使每日飲水量在2000-4000毫升,這樣可維持每日尿量在2000毫升以上。磁化水對防治草酸鈣結石更有效,可將全日飲水量分別于晨起、餐間、睡前給予。清晨飲水量可達500-1000毫升。為了保持夜間尿量,睡前飲水500毫升,睡眠中起床排尿后再飲水300-500毫升,余下水分別于餐間飲服。大量飲水可促使小的結石排出,稀釋尿液可防止尿石結晶形成,并能延緩結石增長速度。

    1985年國外學者Vehlensieck認為,多飲水和飲食療法可使2/3復發(fā)結石病人不再生新結石。下面介紹幾種腎結石的飲食療法。

    ⑴草酸鈣結石:宜低鈣及低草酸飲食。少食牛奶及乳制品、豆制品、肉類、動物內臟(如肝、心臟、腎、腸等),還有巧克力、濃茶、芝麻醬、蛋黃、香菇、菠菜、蝦皮、蘿卜、可可、芹菜、土豆等。近年來發(fā)現(xiàn)食物中纖維素可減少尿鈣的形成,如麥麩食品中的麥麩面包、米糠也有同樣作用,對復發(fā)性高鈣尿結石有效,維生素B1、維生素B6缺乏使尿草酸增多,應增加富含此類維生素的食物,如谷物、干果、硬果等。

    ⑵磷酸鈣結石及磷酸鎂銨結石:其低鈣飲食同草酸鈣結石相同。在低磷食物中,宜少食肉類、魚類及骨頭湯。

    ⑶尿結石: 應限制蛋白質的攝入量,每日蛋白質的總攝入量應在48-80克(0.8-1.0克/公斤/日)之間。一般帶葉的蔬菜每市斤約含10克蛋白質、瘦肉類每50 克約含蛋白質10克、谷類每市斤含蛋白質35-60克。要增加新鮮蔬菜和水果的食量。蔬菜和水果含維生素B1及維生素C,它們在體內最后代謝產(chǎn)物是堿性 的,尿酸在堿性尿內易于溶解,故有利于治療。常規(guī)治療:每隔1-2日用一次清涼飲食(生水果、果汁及生菜),至少每周1次清涼飲食。少食或忌用肉類、動物 內臟、肉湯、肉汁、沙丁魚、蟹、菠菜、濃茶、咖啡,烈性的香料及調味品也宜少用。
    現(xiàn)實生活中很多疾病的發(fā)生和日常飲食是密切相關的,如果能做到起居有時,飲食有節(jié),甚至大部分癌癥也可能避免。現(xiàn)在就腎結石病這一頑癥來提醒大家如何用飲食來預防,或使已經(jīng)患了腎結石者,結石增大的速度減慢,甚至縮小、溶解而排出體外。

    (一)多飲白開水 多飲水使尿液得到稀釋,鈣離子和草酸根的濃度就會降低,形成不了草酸鈣結石。研究表明,增加50%的尿量,可使腎結石發(fā)病率下降86%。

    (二)合理補鈣,尤其飲食上補鈣 腎結石患者往往“談鈣色變”,錯誤地認為腎結石的元兇是鈣,其實不然,腎結石患者也需要補鈣。目前醫(yī)學界從兩個不同的角度來解釋,腎結石患者為什么要補鈣。

    第一是補充鈣能與胃腸道中蔬菜含有的草酸結合成不溶性的草酸鈣,隨糞便排出體外,減少了部分被腸胃吸收和經(jīng)腎臟排出體外的草酸,從而減少了形成腎結石的幾率。

    第二是日本學者提出的“酸堿平衡學說”。即血液呈酸性時,結石容易形成。呈堿性時,抑制結石形成。缺鈣時血液偏酸性,合理補鈣,血液偏堿,這樣反而有利于抑制結石形成。

    (三)限量攝入糖類 美國科學家最新一項研究結果表明,高糖食品的攝入,可以使患腎結石的機會增加,因此,要注意少吃甜食。

    (四)少吃草酸鹽含量高的食物 含草酸鹽高的食物有番茄、菠菜、草莓、甜菜、巧克力等,過高的草酸鹽攝入也是導致腎結石的主要原因之一。

    (五)少吃豆制品 大豆食品含草酸鹽和磷酸鹽都高,能同腎臟中的鈣融合,形成結石

    (六)睡前慎喝牛奶 睡眠不好的人,睡前喝杯牛奶有助于睡眠。但在睡眠后,尿量減少、濃縮,尿中各種有形物質增加。而飲牛奶后2~3小時,正是鈣通過腎臟排泄的高峰。鈣通過腎臟在短時間內驟然增多,容易形成結石。因此腎結石患者,睡前就不應喝含鈣高的牛奶。

    (七)勿過量服用魚肝油 魚肝油富含維生素D,有促進腸膜對鈣磷吸收的功能,驟然增加尿液中鈣磷的排泄,勢必產(chǎn)生沉淀,容易形成結石

    (八)多食黑木耳 黑木耳中富含多種礦物質和微量元素,能對各種結石產(chǎn)生強烈的化學反應,使結石剝脫、分化、溶解,排出體外。

    posted @ 2007-12-17 12:04 船夫 閱讀(1399) | 評論 (0)編輯 收藏

    XSL取得當前循環(huán)的位置

    最近在一個項目中用到了XSLT,目的是將返回的XML數(shù)據(jù)記錄通過XSL轉換為HTML,在for-each的循環(huán)中取得當前記錄的位置,通過實踐,找到了解決的辦法,主要是使用xsl的position函數(shù)
    1 <xsl:for-each select="QRoleInline-list/QRoleInline">
    2 <xsl:if test="not(position() = 1)"><xsl:text>,</xsl:text></xsl:if><xsl:value-of select="@roleName"/>
    3 </xsl:for-each>
    使用position函數(shù)可以取得當前行在循環(huán)中的位置,從1開始。上述代碼是判斷如果位置為第一個, 則需要加逗號。

    還有一個函數(shù)current()是負責取到當前節(jié)點對象的。

    posted @ 2007-12-14 11:33 船夫 閱讀(523) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲国产V高清在线观看| 91在线品视觉盛宴免费| 亚洲av区一区二区三| 亚洲va在线va天堂成人| 18禁止看的免费污网站| 亚洲第一精品福利| 免费国产成人18在线观看| 亚洲色WWW成人永久网址| 亚洲免费视频一区二区三区| 亚洲精品视频在线看| 人人爽人人爽人人片A免费| 国产免费人成视频在线观看| 男男黄GAY片免费网站WWW| 亚洲国产91精品无码专区| 国产vA免费精品高清在线观看 | 亚洲香蕉免费有线视频| 亚洲成亚洲乱码一二三四区软件| 亚洲欧洲成人精品香蕉网| 一个人看的www视频免费在线观看| 国产男女爽爽爽免费视频| 69精品免费视频| 亚洲国产成人久久三区| 亚州免费一级毛片| 国产精品亚洲专区在线观看 | 亚洲aⅴ无码专区在线观看| 在线观看人成视频免费| 亚洲AV无码XXX麻豆艾秋| 亚洲?V无码乱码国产精品| 在线成人精品国产区免费| 精品日韩亚洲AV无码| 成年大片免费视频| 日韩在线视频线视频免费网站| 日本亚洲免费无线码| 国产成人精品久久亚洲高清不卡| 国产成人精品无码免费看| 亚洲毛片在线免费观看| 色视频色露露永久免费观看| 成年大片免费高清在线看黄| 亚洲AV日韩AV永久无码绿巨人| 亚洲精品偷拍视频免费观看| 久久国产亚洲高清观看|