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

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

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

    posts - 55,comments - 89,trackbacks - 0

    public class Trigon {

     public static void main(String[] args) {
            double x1 = 9;
            double y1 = 9;
            double x2 = 4;
            double y2 = 4;
      
      Point sp = new Point(x1,y1);//sp是直線上的一點(diǎn)
      Point tp = new Point(x2,y2);//tp是直線上的另一點(diǎn),也是三角形的頂點(diǎn)
      double arrowWidth = 3;   //設(shè)置三角形的半邊底長
      double arrowHeight = 6; //設(shè)置三角形的高

      double angle = Math.atan2(tp.y-sp.y, tp.x-sp.x); //求已知直線的傾斜角
      
      System.out.println("該直線的傾斜角度是:" + angle);

      double point_x1 = tp.x-arrowHeight*Math.cos(angle)-arrowWidth*Math.sin(angle);
      double point_y1 = tp.y-arrowHeight*Math.sin(angle)+arrowWidth*Math.cos(angle);

      double point_x2 =tp.x-arrowHeight*Math.cos(angle)+arrowWidth*Math.sin(angle);
      double point_y2 = tp.y-arrowHeight*Math.sin(angle)-arrowWidth*Math.cos(angle);
      
      Point p1 = new Point(point_x1,point_y1);
      Point p2 = new Point(point_x2,point_y2);
      p1.out();
      p2.out();
     }
    }
    //定義定點(diǎn)類
    class Point{
     double x;
     double y;
     
     public Point(){}
     public Point(double x, double y){
      this.x = x;
      this.y = y;
     }
     
     public void out(){
      System.out.println("該頂點(diǎn)的X坐標(biāo):" + x);
      System.out.println("該頂點(diǎn)的Y坐標(biāo):" + y);
     }
    }

    參考:http://blog.csdn.net/james999/archive/2008/09/05/2885380.aspx

    posted @ 2008-11-12 10:09 jiafang83 閱讀(681) | 評論 (0)編輯 收藏

    public class Test {

     public static void main(String[] args) {
      String s = "GET             /index.html HTTP/1.1";//字符串s由“GET”、“/index.html”和“HTTP/1.1”組成,中間有一個或多個空格
      String tt[] = s.split("\\s{1,}");//按照空格分割字符串,多個空格作為一個空格對字符串進(jìn)行分割
      for(String str: tt)//增強(qiáng)的for循環(huán)
      System.out.println(str);//輸出:GET
                                         //  /index.html
                                        //  HTTP/1.1          
      String qq = s.replaceAll(" {2,}", " ");//把字符串s中的多個空格替換為一個空格
      System.out.println(qq);//輸出:GET /index.html HTTP/1.1 
      System.out.println(s);//輸出:GET             /index.html HTTP/1.1
     }
    }

    posted @ 2008-11-11 17:12 jiafang83 閱讀(21320) | 評論 (4)編輯 收藏
    摘自:http://www.tkk7.com/nokiaguy/archive/2008/05/10/199645.html    
        本文將介紹如何在Java中使用正則表達(dá)式來處理文本數(shù)據(jù)。正則表達(dá)式就是一個字符串,但和普通的字符串不同的是,正則表達(dá)式是對一組相似字符串的抽象,如下面的幾個字符串:
     
    a98b   c0912d   c10b   a12345678d   ab
     
        我們仔細(xì)分析上面五個字符串,可以看出它們有一個共同特征,就是第一個字符必須是'a'或'c',最后一個字符必須是'b'或'd',而中間的字符是任意多個數(shù)字組成(包括0個數(shù)字)。因此,我們可以將這五個字符串的共同特點(diǎn)抽象出來,這就產(chǎn)生了一個正則表達(dá)式:[ac]\\d*[bd]。而根據(jù)這個正則表達(dá)式,我們可以寫出無窮多個滿足條件的字符串。
     
    在Java中使用正則表達(dá)式的方法非常多,最簡單的就是和字符串一起使用。在String中有四個方法可以使用正則表達(dá)式,它們是matches、split、replaceAll和replaceFirst。
     
    一、matches方法
     
    matches方法可以判斷當(dāng)前的字符串是否匹配給定的正則表達(dá)式。如果匹配,返回true,否則,返回false。matches方法的定義如下:

    public boolean matches(String regex)
      
      如上面給出的正則表達(dá)式我們可以用如下程序驗(yàn)證。
     
    String[] ss = new String[]{"a98b""c0912d",  "c10b",  "a12345678d",  "ab"};
    for(String s: ss)
        System.out.println(s.matches(
    "[ac]\\d*[bd]"));

    輸出結(jié)果:
     
    true
    true
    true
    true
    true
     
       下面簡單解釋一下這個正則表達(dá)式的含義。如果我們學(xué)過編譯原理的詞法分析,就會很容易理解上面的正則表達(dá)式(因?yàn)檎齽t表達(dá)式的表示方法和詞法分析中的表達(dá)式類似)。如在 [...]中的相當(dāng)于或"|",如[abcd]相當(dāng)于a|b|c|d,也就是a或b或c或d。如上面的正則表達(dá)式的開頭部分是[ac],就代表著字符串的開頭只能是a或c。[bd]表達(dá)字符串結(jié)尾只能是b或d。而中間的\d表達(dá)0-9的數(shù)字,由于\在正則表達(dá)式中有特殊含義,所以用\\來表示\。而*表示有0或無窮多個(這在詞法分析中叫*閉包),由于*跟在\d后面,因此表達(dá)有0或無窮多個數(shù)字。
     
    二、split方法
     
    split方法使用正則表達(dá)式來分割字符串,并以String數(shù)組的形式返回分割結(jié)果。split有兩種重載形式,它們定義如下:
     
    public String[] split(String regex)
    public String[] split(String regex, int limit)

        如下面的代碼將使用split的第一種重載形式來分割HTTP請求頭的第一行,代碼如下:
     
    String s = "GET /index.html HTTP/1.1";
    String ss[] 
    = s.split(" +");
    for(String str: ss)
    System.out.println(str);

    輸出結(jié)果:
    GET
    /index.html
    HTTP/1.1
     
        在使用split的第一種重載形式時應(yīng)注意,如果分割后的字符串最后有空串,將被忽略。如使用正則表達(dá)式\d來分割字符串a(chǎn)0b1c3456時,得到的數(shù)組的長度為3,而不是7。
    在split的第二種重載形式中有一個limit參數(shù),要分三種情況討論:
     
    1. 大于0: 如limit的值為n,那么將對正則表達(dá)式使用n-1次,下面的代碼:

    String s = "a0b1c3456";
    String ss[] 
    = s.split("\\d"3);
    for(String str: ss)
        System.out.println(str);


    輸出結(jié)果:
     
    a
    b
    c3456
     
    從輸出結(jié)果可以看出,程序只對" a0b1c3456"使用了兩次正則表達(dá)式,也就是在少掃描完字符'1'后,不管后面有沒有滿足條件的字符串,都將后面的字符串作為一個整體來作為返回?cái)?shù)組的最后一個值。
     
    2. 小于0: 不忽略結(jié)尾的空串。也就是上面的例子返回?cái)?shù)組的長度應(yīng)該是7,而不是3。
    3. 等于0:這是默認(rèn)值,相當(dāng)于split的第一種重載形式。
     
     
    三、replaceAll 和 replaceFirst方法
     
    為兩個方法的定義如下:
    public String replaceAll(String regex, String replacement)
    public String replaceFirst(String regex, String replacement)
     
        這兩個方法用replacement替換當(dāng)前字符串中和regex匹配的字符串。使用方法很簡單,這里不再詳述,感興趣的讀者可以參考相關(guān)的文檔。
     
    對于Java中正則表達(dá)式的詳細(xì)內(nèi)容,請參考JDK文檔。
    posted @ 2008-11-11 14:56 jiafang83 閱讀(189) | 評論 (0)編輯 收藏

    摘自:http://blog.csdn.net/zbzgigi/archive/2006/05/30/763795.aspx
    1、“.”為通配符,表示任何一個字符,例如:“a.c”可以匹配“anc”、“abc”、“acc”;
    2、“[]”,在[]內(nèi)可以指定要求匹配的字符,例如:“a[nbc]c”可以匹配“anc”、“abc”、“acc”;但不可以匹配“ancc”,a到z可以寫成[a-z],0到9可以寫成[0-9];

    3、數(shù)量限定符號,表示匹配次數(shù)(或者叫做長度)的符號:

    包括:“*”——0次或者多次
          “+”——1次或者多次
          “?”——0次或者1次
          “{n}”——匹配n次,n為整數(shù)
          “{n,m}”——匹配從n到m之間的某個數(shù)的次數(shù);n和m都是整數(shù);
          “{n,}”——匹配n到無窮次之間任意次數(shù);
          “{,m}”——匹配0到m之間任意次數(shù);
    他們放到匹配格式的后面:
    例如:
    電話號碼:024-84820482,02484820482(假設(shè)前面3或者4位,后面7或者8位,并且中間的減號可有可無)

    都是符合規(guī)定的,那么可以用如下格式來匹配:[0-9]{3,4} \-? [0-9]{7,8};
    注意:“\”為轉(zhuǎn)義字符,因?yàn)?#8220;-”在正則表達(dá)式用有代表一個范圍的意義,例如:前面所說的[0-9],

    所以它需要轉(zhuǎn)義字符“\”進(jìn)行轉(zhuǎn)義才可使用;
    4、“^”為否符號,表示不想匹配的符號,例如:[^z][a-z]+可以匹配所有除“z”開頭的以外的所有字

    符串(長度大于2,因?yàn)?#8220;+”表示大于等于1的次數(shù),從第二位開始都是小寫英文字符);
    如果^放到[]的外邊則表示以[]開頭的字符串;^[az][a-z]+表示a或者z開頭的長度大于等于2的英文字符

    串;
    5、“|”或運(yùn)算符,例如:a[n|bc|cb]c可以匹配“abcc”,“anc”,“acbc”;
    6、“$”以它前面的字符結(jié)尾的;例如:ab+$就可以被“abb”,“ab”匹配;
    7、一些簡單表示方法:
    \d表示[0-9];\D表示[^0-9];\w表示[A-Z0-9];\W表示[^A-Z0-9];\s表示[\t\n\r\f],就是空格字符包括tab

    ,空格等等;\S表示[^\t\n\r\f],就是非空格字符;
    8、常用的匹配:
    匹配中文字符: “[\u4e00-\u9fa5]”;
    匹配雙字節(jié)字符(包括漢字在內(nèi)):“[^\x00-\xff]”;
    匹配空行的正則表達(dá)式:“\n[\s| ]*\r”;
    匹配HTML標(biāo)記的正則表達(dá)式:“/<(.*)>.*<\/\1>|<(.*) \/>/”;
    匹配首尾空格的正則表達(dá)式:“(^\s*)|(\s*$)”;
    匹配非負(fù)整數(shù)(正整數(shù) + 0):“^\d+$”;  
    匹配正整數(shù):“^[0-9]*[1-9][0-9]*$”;
    匹配非正整數(shù)(負(fù)整數(shù) + 0):“^((-\d+)|(0+))$”;
    匹配負(fù)整數(shù):“^-[0-9]*[1-9][0-9]*$”;
    匹配整數(shù):“^-?\d+$”;
    匹配非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0):“^\d+(\.\d+)?$”
    匹配正浮點(diǎn)數(shù):“^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*

    ))$”;
    ^((-\d+(\.\d+)?)|(0+(\.0+)?))$  //匹配非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0)
    ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匹配

    負(fù)浮點(diǎn)數(shù)
    匹配浮點(diǎn)數(shù):“^(-?\d+)(\.\d+)?$”;
    匹配由數(shù)字、26個英文字母或者下劃線組成的字符串:“^\w+$”;
    匹配email地址:“^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$”;
    匹配url:“^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$”

    下面是正則表達(dá)式中的一些常用模式。

    /pattern/  結(jié)果 
    . 匹配除換行符以外的所有字符
    x? 匹配 0 次或一次 x 字符串
    x* 匹配 0 次或多次 x 字符串,但匹配可能的最少次數(shù)
    x+ 匹配 1 次或多次 x 字符串,但匹配可能的最少次數(shù)
    .* 匹配 0 次或一次的任何字符
    .+ 匹配 1 次或多次的任何字符
    {m} 匹配剛好是 m 個 的指定字符串
    {m,n} 匹配在 m個 以上 n個 以下 的指定字符串
    {m,} 匹配 m個 以上 的指定字符串
    [] 匹配符合 [] 內(nèi)的字符
    [^] 匹配不符合 [] 內(nèi)的字符
    [0-9] 匹配所有數(shù)字字符
    [a-z] 匹配所有小寫字母字符
    [^0-9] 匹配所有非數(shù)字字符
    [^a-z] 匹配所有非小寫字母字符
    ^ 匹配字符開頭的字符
    $ 匹配字符結(jié)尾的字符
    \d 匹配一個數(shù)字的字符,和 [0-9] 語法一樣
    \d+ 匹配多個數(shù)字字符串,和 [0-9]+ 語法一樣
    \D 非數(shù)字,其他同 \d
    \D+ 非數(shù)字,其他同 \d+
    \w 英文字母或數(shù)字的字符串,和 [a-zA-Z0-9] 語法一樣
    \w+ 和 [a-zA-Z0-9]+ 語法一樣
    \W 非英文字母或數(shù)字的字符串,和 [^a-zA-Z0-9] 語法一樣
    \W+ 和 [^a-zA-Z0-9]+ 語法一樣
    \s 空格,和 [\n\t\r\f] 語法一樣
    \s+ 和 [\n\t\r\f]+ 一樣
    \S 非空格,和 [^\n\t\r\f] 語法一樣
    \S+ 和 [^\n\t\r\f]+ 語法一樣
    \b 匹配以英文字母,數(shù)字為邊界的字符串
    \B 匹配不以英文字母,數(shù)值為邊界的字符串
    a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串
    abc 匹配含有 abc 的字符串
    (pattern) () 這個符號會記住所找尋到的字符串,是一個很實(shí)用的語法。第一個 () 內(nèi)所找到的字符串
    變成 $1 這個變量或是 \1 變量,第二個 () 內(nèi)所找到的字符串變成 $2 這個變量或是 \2 變量,以此
    類推下去。 
    /pattern/i i 這個參數(shù)表示忽略英文大小寫,也就是在匹配字符串的時候,不考慮英文的大小寫問題。
    \ 如果要在 pattern 模式中找尋一個特殊字符,如 "*",則要在這個字符前加上 \ 符號,這樣才會讓特殊
    字符失效
    3、正則表達(dá)式的八大原則
      如果在 Unix 中曾經(jīng)使用過 sed、awk、grep 這些命令的話,相信對于正則表達(dá)式(Regular Expression)
    不會感到陌生。下面給大家介紹幾條正則表達(dá)式使用過程中的 8 大原則。

    正則表達(dá)式在對付數(shù)據(jù)的戰(zhàn)斗中可形成龐大的聯(lián)盟——這常常是一場戰(zhàn)爭。我們要記住下面八條原則:

    · 原則1:正則表達(dá)式有三種不同形式(匹配(m/ /),替換(s/ / /eg)和轉(zhuǎn)換(tr/ / /))。

    · 原則2:正則表達(dá)式僅對標(biāo)量進(jìn)行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 將把@array作為標(biāo)量
    對待,因此可能不會成功)。

    · 原則3:正則表達(dá)式匹配一個給定模式的最早的可能匹配。缺省時,僅匹配或替換正則表達(dá)式
    一次( $a = 'string string2'; $a =~ s/string/ /; 導(dǎo)致 $a = 'string 2')。

    · 原則4:正則表達(dá)式能夠處理雙引號所能處理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb擴(kuò)展為
    變量;如果 $varb = 'a' $a = 'as',$a =~ s/$varb/ /; 等價于 $a =~ s/a/ /; ,執(zhí)行結(jié)果使 $a = " s" )。

    · 原則5:正則表達(dá)式在求值過程中產(chǎn)生兩種情況:結(jié)果狀態(tài)和反向引用: $a=~ m/pattern/ 表示 $a 中是否有
    子串 pattern 出現(xiàn),$a =~ s/(word1)(word2)/$2$1/ 則“調(diào)換”這兩個單詞。

    · 原則6:正則表達(dá)式的核心能力在于通配符和多重匹配運(yùn)算符以及它們?nèi)绾尾僮鳌?a =~ m/\w+/ 匹配一個或多個
    單詞字符;$a =~ m/\d/" 匹配零個或多個數(shù)字。

    · 原則7:如果欲匹配不止一個字符集合,Perl使用 "|" 來增加靈活性。如果輸入 m/(cat|dog)/ 則相當(dāng)于“匹配
    字符串 cat 或者 dog。

    · 原則8:Perl用 (?..) 語法給正則表達(dá)式提供擴(kuò)展功能。

    posted @ 2008-11-11 14:53 jiafang83 閱讀(204) | 評論 (0)編輯 收藏

    log4j是一個很好的開源的日志項(xiàng)目,下面就我在實(shí)際中使用的一些情況作一個小結(jié)(我所寫的是以spring為框架的運(yùn)用,之所以要提到這點(diǎn),是因?yàn)樵趕pring中專門有處理log4j的地方,而我也用到了這些地方)。

      在使用的第一步你要明白你所發(fā)布的web項(xiàng)目所使用的服務(wù)器,因?yàn)椴煌姆?wù)器對于使用log4j是有些不同的,我在實(shí)際使用中主要是用tomcat和 jboss兩類,對于tomcat,它本身是沒有配置log4j的,所以使用起來和常規(guī)的一樣;而在jboss中它是本身配置了log4j的,所以有時候 我們在看項(xiàng)目代碼時,其整個項(xiàng)目并沒有l(wèi)og4j的配置文件,而在一些類中仍然定義了Logger,例如static Logger log = org.apache.log4j.Logger.getLogger(UserDaoImple.class);,這就表明開發(fā)者打算使用jboss默 認(rèn)的log4j的配置,我們可以在jboss下的對應(yīng)的log目錄下的server.log中看到日志,jboss本身的log4j的配置是將 debug,info級的日志寫在server.log中,而像error等級別比較高的日志打印到控制臺上,而寫到server.log中的日志比較 多,并不方便查看。于是我們想到使用自己的log4j配置寫到某個具體的文件中(注意文件要先建立,才能忘里面寫東西,log4j自己不能建立文件),但 這里因?yàn)閖boss有它自己的log4j配置,所以如果我們配置的log4j包含Console的Appender時,就會出錯,錯誤類似于

    ERROR: invalid console appender config detected, console stream is looping.
    解決方法一是不用Console的Appender,或者改jboss的配置文件,在jboss-service.xml文件里,把
    <mbean code="org.jboss.logging.Log4jService" name="jboss.system:type=Log4jService,service=Logging">
            <attribute name="ConfigurationURL">resource:log4j.xml</attribute>
            <attribute name="CatchSystemOut">false</attribute>
            <attribute name="Log4jQuietMode">true</attribute>
    </mbean>。

    我建議不用Console的Appender,當(dāng)然這是對jboss3.2.x是這樣,對于jboss4.0.x如果我們要用自己的log4j配置照上述改還是會有問題,會有類似于log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable的異常,解決方法是把/server/default/jbossweb-tomcat55.sar/META-INF/jboss-service.xml 中的以下兩個熟悉改成true
    <attribute name="Java2ClassLoadingCompliance">true</attribute>
    <attribute name="UseJBossWebLoader">true</attribute>

    以上就是使用jboss服務(wù)器可能出現(xiàn)的問題,解決了這些再來使用log4j就比較簡單了。

    下面說說對于采用了spring框架的項(xiàng)目如何使用log4j,在spring中使用log4j,有些方便的地方,

    1. 動態(tài)的改變記錄級別和策略,即修改log4j.properties,不需要重啟Web應(yīng)用,這需要在web.xml中設(shè)置一下。
    2. 把log文件定在 /WEB-INF/logs/ 而不需要寫絕對路徑。
    3. 可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。

    首先我們在web.xml中需要設(shè)定一下

    <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>WEB-INF/log4j.properties</param-value>
    </context-param>

    <context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>60000</param-value>
    </context-param>

    <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener> 
    其中第二部分就是能夠動態(tài)修改log4j.properties的關(guān)鍵,容器會每60秒掃描log4j的配置文件 。
    對 于log4j的配置文件如何寫,這就不多說了,大家可以去google,有一點(diǎn)就是我們?nèi)绻肦ollingFileAppender或者 FileAppender時,可以通過${webapp.root}來定位到服務(wù)器的發(fā)布的該項(xiàng)目下,這是spring把web目錄的路徑壓入到了 webapp.root的系統(tǒng)變量。然后,在log4j.properties 里就可以這樣定義logfile位置
    log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/myfuse.log
    如果有多個web應(yīng)用,怕webapp.root變量重復(fù),可以在context-param里定義webAppRootKey。

    當(dāng)我們定義完log4j.properties后,剩下的就是在需要記錄的class中new 出Logger了 

    常用log4j配置

    常用log4j配置,一般可以采用兩種方式,.properties和.xml,下面舉兩個簡單的例子:
    一、log4j.properties
    ### 設(shè)置org.zblog域?qū)?yīng)的級別INFO,DEBUG,WARN,ERROR和輸出地A1,A2 ##
    log4j.category.org.zblog=ERROR,A1
    log4j.category.org.zblog=INFO,A2
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    ### 設(shè)置輸出地A1,為ConsoleAppender(控制臺) ##
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    ### 設(shè)置A1的輸出布局格式PatterLayout,(可以靈活地指定布局模式)##
    log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
    ### 配置日志輸出的格式##
    log4j.appender.A2=org.apache.log4j.RollingFileAppender
    ### 設(shè)置輸出地A2到文件(文件大小到達(dá)指定尺寸的時候產(chǎn)生一個新的文件)##
    log4j.appender.A2.File=E:/study/log4j/zhuwei.html
    ### 文件位置##
    log4j.appender.A2.MaxFileSize=500KB
    ### 文件大小##
    log4j.appender.A2.MaxBackupIndex=1
    log4j.appender.A2.layout=org.apache.log4j.HTMLLayout
    ##指定采用html方式輸出
    二、log4j.xml
    <?xml version="1.0" encoding="GB2312" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="org.zblog.all" class="org.apache.log4j.RollingFileAppender">
    <!-- 設(shè)置通道ID:org.zblog.all和輸出方式:org.apache.log4j.RollingFileAppender -->
       <param name="File" value="E:/study/log4j/all.output.log" /><!-- 設(shè)置File參數(shù):日志輸出文件名 -->
       <param name="Append" value="false" /><!-- 設(shè)置是否在重新啟動服務(wù)時,在原有日志的基礎(chǔ)添加新日志 -->
       <param name="MaxBackupIndex" value="10" />
       <layout class="org.apache.log4j.PatternLayout">
           <param name="ConversionPattern" value="%p (%c:%L)- %m%n" /><!-- 設(shè)置輸出文件項(xiàng)目和格式 -->
       </layout>
    </appender>
    <appender name="org.zblog.zcw" class="org.apache.log4j.RollingFileAppender">
       <param name="File" value="E:/study/log4j/zhuwei.output.log" />
       <param name="Append" value="true" />
       <param name="MaxFileSize" value="10240" /> <!-- 設(shè)置文件大小 -->
       <param name="MaxBackupIndex" value="10" />
       <layout class="org.apache.log4j.PatternLayout">
           <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
       </layout>
    </appender>
    <logger name="zcw.log"> <!-- 設(shè)置域名限制,即zcw.log域及以下的日志均輸出到下面對應(yīng)的通道中 -->
       <level value="debug" /><!-- 設(shè)置級別 -->
       <appender-ref ref="org.zblog.zcw" /><!-- 與前面的通道id相對應(yīng) -->
    </logger>
    <root> <!-- 設(shè)置接收所有輸出的通道 -->
       <appender-ref ref="org.zblog.all" /><!-- 與前面的通道id相對應(yīng) -->
    </root>
    </log4j:configuration>
    三、配置文件加載方法:
    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;
    import org.apache.log4j.xml.DOMConfigurator;
    public class Log4jApp {
       public static void main(String[] args) {
           DOMConfigurator.configure("E:/study/log4j/log4j.xml");//加載.xml文件
           //PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加載.properties文件
           Logger log=Logger.getLogger("org.zblog.test");
           log.info("測試");
       }
    }
    四、項(xiàng)目使用log4j
    在web 應(yīng)用中,可以將配置文件的加載放在一個單獨(dú)的servlet中,并在web.xml中配置該servlet在應(yīng)用啟動時候加載。對于在多人項(xiàng)目中,可以給每一個人設(shè)置一個輸出通道,這樣在每個人在構(gòu)建Logger時,用自己的域名稱,讓調(diào)試信息輸出到自己的log文件中。
    五、常用輸出格式
    # -X號:X信息輸出時左對齊;
    # %p:日志信息級別
    # %d{}:日志信息產(chǎn)生時間
    # %c:日志信息所在地(類名)
    # %m:產(chǎn)生的日志具體信息
    # %n:輸出日志信息換行

    Log4J 最佳實(shí)踐之全能配置文件

    給出得Log4J配置文件實(shí)現(xiàn)了輸出到控制臺,文件,回滾文件,發(fā)送日志郵件,輸出到數(shù)據(jù)庫日志表,自定義標(biāo)簽等全套功能。

    log4j.rootLogger=DEBUG,CONSOLE,A1,im
    #DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE

    log4j.addivity.org.apache=true


    ###################
    # Console Appender
    ###################
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.Threshold=DEBUG
    log4j.appender.CONSOLE.Target=System.out
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
    #log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n


    #####################
    # File Appender
    #####################
    log4j.appender.FILE=org.apache.log4j.FileAppender
    log4j.appender.FILE.File=file.log
    log4j.appender.FILE.Append=false
    log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
    log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
    # Use this layout for LogFactor 5 analysis



    ########################
    # Rolling File
    ########################
    log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
    log4j.appender.ROLLING_FILE.Threshold=ERROR
    log4j.appender.ROLLING_FILE.File=rolling.log
    log4j.appender.ROLLING_FILE.Append=true
    log4j.appender.ROLLING_FILE.MaxFileSize=10KB
    log4j.appender.ROLLING_FILE.MaxBackupIndex=1
    log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
    log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


    ####################
    # Socket Appender
    ####################
    log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
    log4j.appender.SOCKET.RemoteHost=localhost
    log4j.appender.SOCKET.Port=5001
    log4j.appender.SOCKET.LocationInfo=true
    # Set up for Log Facter 5
    log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
    log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n


    ########################
    # Log Factor 5 Appender
    ########################
    log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
    log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000


    ########################
    # SMTP Appender
    #######################
    log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
    log4j.appender.MAIL.Threshold=FATAL
    log4j.appender.MAIL.BufferSize=10
    log4j.appender.MAIL.From=chenyl@hollycrm.com
    log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
    log4j.appender.MAIL.Subject=Log4J Message
    log4j.appender.MAIL.To=chenyl@hollycrm.com
    log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
    log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


    ########################
    # JDBC Appender
    #######################
    log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
    log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
    log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
    log4j.appender.DATABASE.user=root
    log4j.appender.DATABASE.password=
    log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
    log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
    log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


    log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A1.File=SampleMessages.log4j
    log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
    log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

    ###################
    #自定義Appender
    ###################
    log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender

    log4j.appender.im.host = mail.cybercorlin.net
    log4j.appender.im.username = username
    log4j.appender.im.password = password
    log4j.appender.im.recipient = corlin@cybercorlin.net

    log4j.appender.im.layout=org.apache.log4j.PatternLayout
    log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

    posted @ 2008-11-10 15:45 jiafang83 閱讀(17042) | 評論 (2)編輯 收藏

    轉(zhuǎn)載:http://hi.baidu.com/fgfd0/blog/item/fa547ff01ffc7faaa50f522e.html
    log4j與log4j.properties的配置說明
    在強(qiáng)調(diào)可重用組件開發(fā)的今天,除了自己從頭到尾開發(fā)一個可重用的日志***作類外,Apache為我們提供了一個強(qiáng)有力的日志***作包-Log4j。

    Log4j是Apache的一個開放源代碼項(xiàng)目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件、甚至是套接口服務(wù)器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細(xì)致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進(jìn)行配置,而不需要修改應(yīng)用的代碼。

    此外,通過Log4j其他語言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其語法和用法與在Java程序中一樣,使得多語言分布式系統(tǒng)得到一個統(tǒng)一一致的日志組件模塊。而且,通過使用各種第三方擴(kuò)展,您可以很方便地將Log4j集成到J2EE、JINI甚至是SNMP應(yīng)用中。

    說明:下面分為三部分,第一部分講解如何配置log4j,第二部分為對log4j.properties配置文件中的各個屬性的講解,第三部分為對log4j的詳細(xì)講解,如果只想配置上log4j,那么只需要看前兩個部分就可以,如果想對log4j深入了解,則還需看第三部分。

    一、Log4j配置

    第一步:加入log4j-1.2.8.jar到lib下。

    第二步:在CLASSPATH下建立log4j.properties。內(nèi)容如下:

    1 log4j.rootCategory=INFO, stdout , R

    2

    3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender

    4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    5 log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n

    6

    7 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

    8 log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log

    9 log4j.appender.R.layout=org.apache.log4j.PatternLayout

    10 log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

    11

    12 log4j.logger.com.neusoft=DEBUG

    13 log4j.logger.com.opensymphony.oscache=ERROR

    14 log4j.logger.net.sf.navigator=ERROR

    15 log4j.logger.org.apache.commons=ERROR

    16 log4j.logger.org.apache.struts=WARN

    17 log4j.logger.org.displaytag=ERROR

    18 log4j.logger.org.springframework=DEBUG

    19 log4j.logger.com.ibatis.db=WARN

    20 log4j.logger.org.apache.velocity=FATAL

    21

    22 log4j.logger.com.canoo.webtest=WARN

    23

    24 log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN

    25 log4j.logger.org.hibernate=DEBUG

    26 log4j.logger.org.logicalcobwebs=WARN

    第三步:相應(yīng)的修改其中屬性,修改之前就必須知道這些都是干什么的,在第二部分講解。

    第四步:在要輸出日志的類中加入相關(guān)語句:

    定義屬性:protected final Log log = LogFactory.getLog(getClass());

    在相應(yīng)的方法中:

    if (log.isDebugEnabled())

    {

    log.debug(“System …..”);

    }

    二、Log4j說明

    1 log4j.rootCategory=INFO, stdout , R

    此句為將等級為INFO的日志信息輸出到stdout和R這兩個目的地,stdout和R的定義在下面的代碼,可以任意起名。等級可分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF則不打出任何信息,如果配置為INFO這樣只顯示INFO, WARN, ERROR的log信息,而DEBUG信息不會被顯示,具體講解可參照第三部分定義配置文件中的logger。

    3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender

    此句為定義名為stdout的輸出端是哪種類型,可以是

    org.apache.log4j.ConsoleAppender(控制臺),

    org.apache.log4j.FileAppender(文件),

    org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件),

    org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時候產(chǎn)生一個新的文件)

    org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)

    具體講解可參照第三部分定義配置文件中的Appender。

    4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    此句為定義名為stdout的輸出端的layout是哪種類型,可以是

    org.apache.log4j.HTMLLayout(以HTML表格形式布局),

    org.apache.log4j.PatternLayout(可以靈活地指定布局模式),

    org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),

    org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間、線程、類別等等信息)

    具體講解可參照第三部分定義配置文件中的Layout。

    5 log4j.appender.stdout.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n

    如果使用pattern布局就要指定的打印信息的具體格式ConversionPattern,打印參數(shù)如下:

    %m 輸出代碼中指定的消息

    %p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL

    %r 輸出自應(yīng)用啟動到輸出該log信息耗費(fèi)的毫秒數(shù)

    %c 輸出所屬的類目,通常就是所在類的全名

    %t 輸出產(chǎn)生該日志事件的線程名

    %n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”

    %d 輸出日志時間點(diǎn)的日期或時間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921

    %l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。

    [QC]是log信息的開頭,可以為任意字符,一般為項(xiàng)目簡稱。

    輸出的信息

    [TS] DEBUG [main] AbstractBeanFactory.getBean(189) | Returning cached instance of singleton bean 'MyAutoProxy'

    具體講解可參照第三部分定義配置文件中的格式化日志信息。

    7 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

    此句與第3行一樣。定義名為R的輸出端的類型為每天產(chǎn)生一個日志文件。

    8 log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log

    此句為定義名為R的輸出端的文件名為D:\Tomcat 5.5\logs\qc.log

    可以自行修改。

    9 log4j.appender.R.layout=org.apache.log4j.PatternLayout

    與第4行相同。

    10 log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

    與第5行相同。

    12 log4j.logger.com. neusoft =DEBUG

    指定com.neusoft包下的所有類的等級為DEBUG。

    可以把com.neusoft改為自己項(xiàng)目所用的包名。

    13 log4j.logger.com.opensymphony.oscache=ERROR

    14 log4j.logger.net.sf.navigator=ERROR

    這兩句是把這兩個包下出現(xiàn)的錯誤的等級設(shè)為ERROR,如果項(xiàng)目中沒有配置EHCache,則不需要這兩句。

    15 log4j.logger.org.apache.commons=ERROR

    16 log4j.logger.org.apache.struts=WARN

    這兩句是struts的包。

    17 log4j.logger.org.displaytag=ERROR

    這句是displaytag的包。(QC問題列表頁面所用)

    18 log4j.logger.org.springframework=DEBUG

    此句為Spring的包。

    24 log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN

    25 log4j.logger.org.hibernate=DEBUG

    此兩句是hibernate的包。

    以上這些包的設(shè)置可根據(jù)項(xiàng)目的實(shí)際情況而自行定制。

    三、log4j詳解

    1、定義配置文件

    Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是Java特性文件log4j.properties(鍵=值)。下面將介紹使用log4j.properties文件作為配置文件的方法:

    ①、配置根Logger

    Logger 負(fù)責(zé)處理日志記錄的大部分***作。

    其語法為:

    log4j.rootLogger = [ level ] , appenderName, appenderName, …

    其中,level 是日志記錄的優(yōu)先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定義的級別。Log4j建議只使用四個級別,優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,您可以控制到應(yīng)用程序中相應(yīng)級別的日志信息的開關(guān)。比如在這里定義了INFO級別,只有等于及高于這個級別的才進(jìn)行處理,則應(yīng)用程序中所有DEBUG級別的日志信息將不被打印出來。ALL:打印所有的日志,OFF:關(guān)閉所有的日志輸出。 appenderName就是指定日志信息輸出到哪個地方。可同時指定多個輸出目的地。

    ②、配置日志信息輸出目的地 Appender

    Appender 負(fù)責(zé)控制日志記錄***作的輸出。

    其語法為:

    log4j.appender.appenderName = fully.qualified.name.of.appender.class

    log4j.appender.appenderName.option1 = value1

    log4j.appender.appenderName.optionN = valueN

    這里的appenderName為在①里定義的,可任意起名。

    其中,Log4j提供的appender有以下幾種:

    org.apache.log4j.ConsoleAppender(控制臺),

    org.apache.log4j.FileAppender(文件),

    org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件),

    org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時候產(chǎn)生一個新的文件),可通過log4j.appender.R.MaxFileSize=100KB設(shè)置文件大小,還可通過log4j.appender.R.MaxBackupIndex=1設(shè)置為保存一個備份文件。

    org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)

    例如:log4j.appender.stdout=org.apache.log4j.ConsoleAppender

    定義一個名為stdout的輸出目的地,ConsoleAppender為控制臺。

    ③、配置日志信息的格式(布局)Layout

    Layout 負(fù)責(zé)格式化Appender的輸出。

    其語法為:

    log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

    log4j.appender.appenderName.layout.option1 = value1

    log4j.appender.appenderName.layout.optionN = valueN

    其中,Log4j提供的layout有以下幾種:

    org.apache.log4j.HTMLLayout(以HTML表格形式布局),

    org.apache.log4j.PatternLayout(可以靈活地指定布局模式),

    org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),

    org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間、線程、類別等等信息)

    2、格式化日志信息

    Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下:

    %m 輸出代碼中指定的消息

    %p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL

    %r 輸出自應(yīng)用啟動到輸出該log信息耗費(fèi)的毫秒數(shù)

    %c 輸出所屬的類目,通常就是所在類的全名

    %t 輸出產(chǎn)生該日志事件的線程名

    %n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”

    %d 輸出日志時間點(diǎn)的日期或時間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921

    %l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。

    3、在代碼中使用Log4j

    我們在需要輸出日志信息的類中做如下的三個工作:

    1、導(dǎo)入所有需的commongs-logging類:

    import org.apache.commons.logging.Log;

    import org.apache.commons.logging.LogFactory;

    2、在自己的類中定義一個org.apache.commons.logging.Log類的私有靜態(tài)類成員:

    private final Log log = LogFactory.getLog(getClass());

    LogFactory.getLog()方法的參數(shù)使用的是當(dāng)前類的class。

    3、使用org.apache.commons.logging.Log類的成員方法輸出日志信息:

    if (log.isDebugEnabled())

    {

    log.debug("111");

    }

    if (log.isInfoEnabled())

    {

    log.info("222");

    }

    if (log.isWarnEnabled())

    {

    log.warn("333");

    }

    if (log.isErrorEnabled())

    {

    log.error("444");

    }

    if (log.isFatalEnabled())

    {

    log.fatal("555")

    }

    posted @ 2008-11-10 15:43 jiafang83 閱讀(148) | 評論 (0)編輯 收藏
    關(guān)于JSP頁面中的pageEncoding和contentType兩種屬性的區(qū)別:

      pageEncoding是jsp文件本身的編碼

      contentType的charset是指服務(wù)器發(fā)送給客戶端時的內(nèi)容編碼

      JSP要經(jīng)過兩次的“編碼”,第一階段會用pageEncoding,第二階段會用utf-8至utf-8,第三階段就是由Tomcat出來的網(wǎng)頁, 用的是contentType。

      第一階段是jsp編譯成.java,它會根據(jù)pageEncoding的設(shè)定讀取jsp,結(jié)果是由指定的編碼方案翻譯成統(tǒng)一的UTF-8 JAVA源碼(即.java),如果pageEncoding設(shè)定錯了,或沒有設(shè)定,出來的就是中文亂碼。

      第二階段是由JAVAC的JAVA源碼至java byteCode的編譯,不論JSP編寫時候用的是什么編碼方案,經(jīng)過這個階段的結(jié)果全部是UTF-8的encoding的java源碼。

      JAVAC用UTF-8的encoding讀取java源碼,編譯成UTF-8 encoding的二進(jìn)制碼(即.class),這是JVM對常數(shù)字串在二進(jìn)制碼(java encoding)內(nèi)表達(dá)的規(guī)范。

      第三階段是Tomcat(或其的application container)載入和執(zhí)行階段二的來的JAVA二進(jìn)制碼,輸出的結(jié)果,也就是在客戶端見到的,這時隱藏在階段一和階段二的參數(shù)contentType就發(fā)揮了功效

      contentType的設(shè)定.

      pageEncoding 和contentType的預(yù)設(shè)都是 ISO8859-1. 而隨便設(shè)定了其中一個, 另一個就跟著一樣了(TOMCAT4.1.27是如此). 但這不是絕對的, 這要看各自JSPC的處理方式. 而pageEncoding不等于contentType, 更有利亞洲區(qū)的文字 CJKV系JSP網(wǎng)頁的開發(fā)和展示, (例pageEncoding=GB2312 不等于 contentType=utf-8)。

      jsp文件不像.java,.java在被編譯器讀入的時候默認(rèn)采用的是操作系統(tǒng)所設(shè)定的locale所對應(yīng)的編碼,比如中國大陸就是GBK,臺灣就是BIG5或者M(jìn)S950。而一般我們不管是在記事本還是在ue中寫代碼,如果沒有經(jīng)過特別轉(zhuǎn)碼的話,寫出來的都是本地編碼格式的內(nèi)容。所以編譯器采用的方法剛好可以讓虛擬機(jī)得到正確的資料。

      但是jsp文件不是這樣,它沒有這個默認(rèn)轉(zhuǎn)碼過程,但是指定了pageEncoding就可以實(shí)現(xiàn)正確轉(zhuǎn)碼了。

      舉個例子:

    <%@ page contentType="text/html;charset=utf-8" %>

      大都會打印出亂碼,因?yàn)檩斎氲?#8220;你好”是gbk的,但是服務(wù)器是否正確抓到“你好”不得而知。

      但是如果更改為

    <%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK"%>

      這樣就服務(wù)器一定會是正確抓到“你好”了。

    posted @ 2008-11-07 17:42 jiafang83 閱讀(1207) | 評論 (1)編輯 收藏

    執(zhí)行某jsp頁面時,彈出如標(biāo)題所示異常,jsp代碼如下:

    <%@ page language="java" contentType="text/html;charset=gbk" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
      </head>
     
      <body>
        This is the result:
        <c:out value="${userInfo}" default="沒有結(jié)果"/>
      </body>
    </html>


    異常的原因是不能識別“${userInfo}”,解決辦法有兩種:
    一、在page指令里,加入isELIgnored="true"屬性,即
    <%@ page language="java" contentType="text/html;charset=gbk"  isELIgnored="true" %>
    二、把<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>變?yōu)椋?br /> <%@ taglib prefix="c" uri=http://java.sun.com/jstl/core_rt  %>
    經(jīng)過改動之后,jsp頁面能正常執(zhí)行了。
    posted @ 2008-11-07 16:48 jiafang83 閱讀(27837) | 評論 (7)編輯 收藏
         摘要: 值傳遞:方法調(diào)用時,實(shí)際參數(shù)把它的值傳遞給對應(yīng)的形式參數(shù),方法執(zhí)行中形式參數(shù)值的改變不影響實(shí)際參 數(shù)的值。
    引用傳遞:也稱為傳地址。方法調(diào)用時,實(shí)際參數(shù)的引用(地址,而不是參數(shù)的值)被傳遞給方法中相對應(yīng)的形式參數(shù),在方法執(zhí)行中,對形式參數(shù)的操作實(shí)際上就是對實(shí)際參數(shù)的操作,方法執(zhí)行中形式參數(shù)值的改變將會影響實(shí)際參數(shù)的值。
    下面舉例說明:
      閱讀全文
    posted @ 2007-10-23 22:23 jiafang83 閱讀(90450) | 評論 (55)編輯 收藏
         摘要: 類變量屬于整個類,一個類可以創(chuàng)建多個對象,但類的每個靜態(tài)變量在內(nèi)存中只有一份拷貝為該類的所有對象共享。類變量(類方法)不用創(chuàng)建對象就可以直接通過類名訪問。下面舉例說明類變量與實(shí)例變量的區(qū)別:
      閱讀全文
    posted @ 2007-10-23 15:46 jiafang83 閱讀(10415) | 評論 (9)編輯 收藏
    僅列出標(biāo)題
    共5頁: 上一頁 1 2 3 4 5 
    主站蜘蛛池模板: 最近中文字幕mv免费高清视频8| 亚洲一级免费视频| 国产亚洲精品AAAA片APP| 国产成人A在线观看视频免费| 99久久婷婷国产综合亚洲| 永久免费视频v片www| 亚洲成在人线aⅴ免费毛片| 国产免费人视频在线观看免费| 羞羞视频在线免费观看| 亚洲乳大丰满中文字幕| 国产精品免费高清在线观看| 亚洲avav天堂av在线不卡| 2021国内精品久久久久精免费| 91亚洲性爱在线视频| 国产婷婷高清在线观看免费| 成全视成人免费观看在线看| 久久精品国产96精品亚洲| 国产高清免费视频| 亚洲成av人无码亚洲成av人| 亚洲网站在线免费观看| 四虎成人免费网站在线| 久久精品成人免费国产片小草| 久久夜色精品国产噜噜亚洲AV| 在线观看人成网站深夜免费| 69式国产真人免费视频 | 日韩在线免费看网站| 国产伦精品一区二区免费| 四虎成人精品国产永久免费无码| 情人伊人久久综合亚洲| 日韩一区二区免费视频| 成人免费福利电影| 午夜网站在线观看免费完整高清观看 | 人人狠狠综合久久亚洲婷婷| 亚洲中文字幕无码一区二区三区| 国产免费毛不卡片| 本免费AV无码专区一区| 精精国产www视频在线观看免费| 久久久久久噜噜精品免费直播| 国产免费久久精品丫丫| 国产真人无码作爱免费视频| 亚洲av永久无码天堂网|