摘要:   1<script language="JavaScript" type="text/JavaScript">   2// 日期選擇   3// By Ziyue(http://www.web-v.com/)   4var months&n...  閱讀全文
          posted @ 2009-03-27 17:03 勒緊皮帶向前沖 閱讀(454) | 評論 (0)編輯 收藏
           
           
          2008-12-23 17:09:31 原文地址: http://blog.sina.com.cn/u/4a1347d50100bmv8 [查看原文]

          1。每天11:00點前睡覺,每天7:30點前起床;
          2。每天提醒自己,不要忘記夢想;


          3。有時間多看書,多學習,做一個有文學素養的 人,不要把時間浪費在滑稽怪誕的事情上;

          4。多鍛煉身體,身體垮了什么都沒有了,男人女人要對自己好一點;

          5。努力學習賺錢的本領,錢是一個人活著的根本,是做人的尊嚴;

          6。常回家看看老媽,常給姐姐哥哥電話,親情是最珍貴的感情;

          7。要學會做個傾聽者,要多聽聽別人的感受,從中獲得教訓;

          8。要學會玩,學會有品位的玩;

          9。工作上的煩惱,不要帶回家,解決不了任何問題,帶回來會平添更多煩惱;

          10。做工作的有心人;

          11。學會奉承領導,多擺笑臉,不做惡人,三緘其口,三思而后行;

          12。學會推拖事情,人善被人欺,馬善被人騎;

          13。不和沒素養的人交往,免得受其影響;

          14。不與小氣的人交往,吃虧的總是自己;

          15。對裝B的人要一棒子打死,讓他(她)下次再也牛不起來!

          16。不與已婚人或者已經同居的人談感情,多半是浪費口舌,最后沒什么收獲,反而打擊自己的生活激情;

          17。要尋找與自己有共同價值觀的人,愛自己的人,好好珍惜,好好保護,終了一生;

          18。不要把感情浪費在沒有希望的人身上,看重外在的人永遠都是弱智,只有在傷痕累累時才明白,真正愛她的人原來一直在她身邊關注她,而她卻一直以為幸福很遙遠;

          19。不要過分將就一個人,過分將就不是愛情,是犯賤;

          20。現實一點,愛情在現實面前總是那么蒼白,浪漫的愛情不屬于男人,屬于女人;

          21。做婚姻的有心人,好好準備步入婚姻,好好準備做一個好丈夫好妻子;

          22。做生活的有心人,用心準備營造一個美好的家庭,一個安全溫馨的家庭;

          23。不要老是想做救世主,就算是救世主,也沒必要去拯救世人。可憐之人,必有可恨之處,而且都是猶大;

          24。不要輕易借錢給別人,借錢的人,許多都不想還錢;

          25。要明白讀過很多書的人不一定有很多知識,沒上過學的人卻不一定是文盲;

          26。不要以貌取人,特別是女人,漂亮的也許是個魔鬼,
          丑陋的卻可能是天使,上天總是公平的;

          27。要做回自己,為自己活著;

          28。要會裝扮自己,邋遢不是一個酷的表現,是沒教養的結果;

          29。走自己的路,讓NB說破嘴皮吧;

          30。賺別人的錢,讓貧窮見鬼去吧

          posted @ 2009-03-16 16:17 勒緊皮帶向前沖 閱讀(170) | 評論 (0)編輯 收藏
           

          ConvertUtils,這個工具類的職能是在字符串和指定類型的實例之間進行轉換。

           

           

          目前支持的類型有:

           

           

          • java.lang.BigDecimal

             

          • java.lang.BigInteger

             

          • boolean and java.lang.Boolean

             

          • byte and java.lang.Byte

             

          • char and java.lang.Character

             

          • java.lang.Class

             

          • double and java.lang.Double

             

          • float and java.lang.Float

             

          • int and java.lang.Integer

             

          • long and java.lang.Long

             

          • short and java.lang.Short

             

          • java.lang.String

             

          • java.io.File

             

          • java.net.URL

             

          • java.sql.Date

             

          • java.sql.Time

             

          • java.sql.Timestamp

             

          總體提供兩類功能:

           

           

          1.         將字符串轉換為指定類型;

           

           

          2.         注冊、注銷和查詢類型轉換器;

          convert(java.lang.Object value)

          將任意的實例轉變為String,用法非常簡單。在嘗試的過程中,感覺與調用實例上的toString()方法的效果一樣,不知道是不是在這個方法內僅僅是調用了傳入實例的toString()方法。

          ps:需要讀源代碼才能清楚。

          convert(java.lang.String value, java.lang.Class clazz)

           

          將字符串value轉換為clazz的一個實例;如果失敗的話,就以String的形式返回value

           

           

          convert(java.lang.String[] values, java.lang.Class clazz)

           

          這個方法是對前一方法的加強版,將數組中的每個value都進行轉換,最后以Object返回。(數組也是Object啊)

           

           

          deregister()和deregister(java.lang.Class clazz)

          注銷轉換器,前者將所有的轉換器注銷掉,后者只注銷對應于clazz的轉換器。注銷在這里不是徹底刪除了,而是將轉換器變為默認的轉換器(apache commons提供的)。

          lookup(java.lang.Class clazz)

          獲取指定類型clazz的轉換器.

          register(Converter converter, java.lang.Class clazz)

          為指定類型clazz注冊轉換器converter。如果clazz已經存在一個對應的轉換器,那么converter,將覆蓋原來的轉換器。也就是說,我們可以為String,Double創建自定義的類型轉換器,并在注冊后進行使用。

          ps:apache的類定義明確,描述非常清楚,所以就不貼出例子了。當然這只是到達可以正常使用的階段,如果要進行改造或者創建自己的ConvertUtils,那可能需要更多的時間,因為還要去參考ConvertUtilsBean,這里就不詳述了。

          以下為使用convertUtils的一個DATE類型的例子(該例子來源于尚學堂視屏)
          1.定義converter

           1package com.bjsxt.oa.web;
           2
           3import java.text.ParseException;
           4import java.text.SimpleDateFormat;
           5import java.util.Date;
           6
           7import org.apache.commons.beanutils.Converter;
           8
           9public class UtilDateConverter implements Converter {
          10    
          11    private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
          12
          13    public Object convert(Class type, Object value) {
          14        if (value == null{
          15            return value;
          16        }

          17        if (value instanceof Date) {
          18            return value;
          19        }

          20        if (value instanceof String) {
          21            try {
          22                return format.parse((String)value);
          23            }
           catch (ParseException e) {
          24                e.printStackTrace();
          25            }

          26        }

          27        return null;
          28    }

          29
          30}

          31
          2.使用convertUilts注冊converter
           1package com.bjsxt.oa.web;
           2
           3import java.util.Date;
           4
           5import javax.servlet.ServletException;
           6import javax.servlet.http.HttpServlet;
           7
           8import org.apache.commons.beanutils.ConvertUtils;
           9
          10public class UtilDateConverterInitServlet extends HttpServlet {
          11
          12    @Override
          13    public void init() throws ServletException {
          14         ConvertUtils.register(new UtilDateConverter(), Date.class);
          15    }

          16
          17}

          18
          3.在web.xml中配置servlet
          1 <servlet>
          2    <servlet-name>utilDateConverter</servlet-name>
          3    <servlet-class>com.bjsxt.oa.web.UtilDateConverterInitServlet</servlet-class>
          4    <load-on-startup>3</load-on-startup>
          5  </servlet>  
          posted @ 2009-03-04 10:36 勒緊皮帶向前沖 閱讀(2914) | 評論 (0)編輯 收藏
           
          org.apache.commons.beanutils.BeanUtils
           
          一、簡介:

          BeanUtils提供對 Java反射和自省API的包裝。其主要目的是利用反射機制對JavaBean的屬性進行處理。我們知道,一個JavaBean通常包含了大量的屬性,很 多情況下,對JavaBean的處理導致大量get/set代碼堆積,增加了代碼長度和閱讀代碼的難度。

          二、用法:

          BeanUtils是這個包里比較常用的一個工具類,這里只介紹它的copyProperties()方法。該方法定義如下:

          public static void copyProperties(java.lang.Object dest,java.lang.Object orig)
              throws java.lang.IllegalAccessException,
                     java.lang.reflect.InvocationTargetException


          如 果你有兩個具有很多相同屬性的JavaBean,一個很常見的情況就是Struts里的PO對象(持久對象)和對應的ActionForm,例如 Teacher和TeacherForm。我們一般會在Action里從ActionForm構造一個PO對象,傳統的方式是使用類似下面的語句對屬性逐 個賦值:

          //得到TeacherForm
          TeacherForm teacherForm=(TeacherForm)form;
          //構造Teacher對象
          Teacher teacher=new Teacher();
          //賦值
          teacher.setName(teacherForm.getName());
          teacher.setAge(teacherForm.getAge());
          teacher.setGender(teacherForm.getGender());
          teacher.setMajor(teacherForm.getMajor());
          teacher.setDepartment(teacherForm.getDepartment());

          //持久化Teacher對象到數據庫
          HibernateDAO=;
          HibernateDAO.save(teacher);

          而使用BeanUtils后,代碼就大大改觀了,如下所示:
          //得到TeacherForm
          TeacherForm teacherForm=(TeacherForm)form;
          //構造Teacher對象
          Teacher teacher=new Teacher();
          //賦值
          BeanUtils.copyProperties(teacher,teacherForm);
          //持久化Teacher對象到數據庫
          HibernateDAO=;
          HibernateDAO.save(teacher);


          如 果Teacher和TeacherForm間存在名稱不相同的屬性,則BeanUtils不對這些屬性進行處理,需要程序員手動處理。例如 Teacher包含modifyDate(該屬性記錄最后修改日期,不需要用戶在界面中輸入)屬性而TeacherForm無此屬性,那么在上面代碼的 copyProperties()后還要加上一句:

          teacher.setModifyDate(new Date());


          怎 么樣,很方便吧!除BeanUtils外還有一個名為PropertyUtils的工具類,它也提供copyProperties()方法,作用與 BeanUtils的同名方法十分相似,主要的區別在于后者提供類型轉換功能,即發現兩個JavaBean的同名屬性為不同類型時,在支持的數據類型范圍 內進行轉換,而前者不支持這個功能,但是速度會更快一些。BeanUtils支持的轉換類型如下:

                * java.lang.BigDecimal
                * java.lang.BigInteger
                * boolean and java.lang.Boolean
                * byte and java.lang.Byte
                * char and java.lang.Character
                * java.lang.Class
                * double and java.lang.Double
                * float and java.lang.Float
                * int and java.lang.Integer
                * long and java.lang.Long
                * short and java.lang.Short
                * java.lang.String
                * java.sql.Date
                * java.sql.Time
                * java.sql.Timestamp


          這里要注意一點,java.util.Date是不被支持的,而它的子類java.sql.Date是被支持的。因此如果對象包含時間類型的屬性,且希望被轉換的時候,一定要使用java.sql.Date類型。否則在轉換時會提示argument mistype異常。

          三、優缺點:

          Apache Jakarta Commons項目非常有用。我曾在許多不同的項目上或直接或間接地使用各種流行的commons組件。其中的一個強大的組件就是BeanUtils。我 將說明如何使用BeanUtils將local實體bean轉換為對應的value 對象:


          BeanUtils.copyProperties(aValue, aLocal)


          上 面的代碼從aLocal對象復制屬性到aValue對象。它相當簡單!它不管local(或對應的value)對象有多少個屬性,只管進行復制。我們假設 local對象有100個屬性。上面的代碼使我們可以無需鍵入至少100行的冗長、容易出錯和反復的get和set方法調用。這太棒了!太強大了!太有用 了!

          現在,還有一個壞消息:使用BeanUtils的成本驚人地昂貴!我做了一個簡單的測試,BeanUtils所花費的時間要超過取數 據、將其復制到對應的 value對象(通過手動調用get和set方法),以及通過串行化將其返回到遠程的客戶機的時間總和。所以要小心使用這種威力!
          該文章的原文地址為:http://lifejava.spaces.live.com/Blog/cns!A666C33543221640!158.entry
          posted @ 2009-03-04 09:53 勒緊皮帶向前沖 閱讀(2887) | 評論 (0)編輯 收藏
           
          (1)用文本編輯器打開<Tomcat主目錄>/conf目錄下的Server.xml文件,使用“查找”菜單查找內容為“</Host>”的行,緊接該行下面增加一對<Host></Host>標簽。參照前面的<Host>標簽的屬性設置情況,設置新增的<Host>標簽的屬性,并在它里面嵌套一個設置該WEB站點根目錄的<Context>元素,最終的內容如下:
          <Host name="www.xydesign.cn" debug="0" appBase="d:\site1">
          <Context path="" docBase="." debug="0"/>
          </Host>
          這樣,將創建一個新的WEB站點。上面的<Context>元素的docBase屬性值被設置為一個點(.),即表示使用<Host>元素的appBase屬性中所設置的路徑作為這個<Context>所映射的目錄。

              (2)在上面新增的<Host></Host>標簽對下面再增加一對<Host></Host>標簽,并將它設置為如下形式:
          <Host name="www.xydesign.net.cn" debug="0" appBase="d:\site2">
          <Context path="" docBase="." debug="0"/>
          </Host>
          這又創建了一個新的WEB站點,該站點的主機名稱為www.xydesign.net.cn,根目錄對應的本地文件系統目錄為d:\site2。

              (3)在d:盤下創建名稱為site1和site2兩個目錄,并在這兩個目錄中分別創建一個名為test.html的文件,在d:\site1\test.html文件中寫入如下一行內容:
          這是d:\site1目錄中的test.html文件
          在d:\site2\test.html文件中寫入如下一行內容:
          這是d:\site2目錄中的test.html文件

              (4)用記事本程序打開c:\winnt\System32\Drivers\Etc\Hosts文件,可以看到有如下一行內容:
          127.0.0.1       localhost
          緊接這行文本的下面,用它復制出兩行文本,并將這兩行文本中的localhost分別修改成www.xydesign.cn和www.xydesign.net.cn,這樣,就使用Hosts文件為當前計算機設置了多個主機名。如果要用www.xydesign.cn和www.xydesign.net.cn這個兩主機名訪問其他計算機上的WEB站點,則應將127.0.0.1修改成其他計算機的實際IP地址。保存Hosts文件后,Hosts文件的內容如下:
          127.0.0.1                  localhost
          202.104.125.154       www.xydesign.cn
          202.104.125.154       www.xydesign.net.cn

          其中202.104.125.154為您服務器的固定IP地址。

          在命令行窗口中執行“ping www.xydesign.cn”和“ping www.xydesign.net.cn”命令,查看該主機名是否被正確解析到了相應的IP地址上。建立site1和site2與計算機IP地址的映射后,在IE瀏覽器地址欄中輸入http://localhost:8080/test.html、http://www.xydesign.cn:8080/test.html和http://www.xydesign.net.cn:8080/test.html,可以看到瀏覽器將顯示出各自站點中的test.html網頁文件的內容。
          如需不要后面的8080端口號,可直接把tomcat端口號設置為80即可。

             (5)設置域名www.xydesign.cn    www.xydesign.net.cn 的解析IP地址都為202.104.125.154(即您服務器的IP地址)。

          可見,使用主機名的方式在同一臺WEB服務器上創建多個虛擬主機后,在WEB瀏覽器中使用主機名訪問Web服務器時,Web服務器將選擇與該主機名關聯的WEB站點進行響應。通過這種方式,多個WEB站點可以共享同一個IP地址和相同的端口號,唯一不足的就是WEB瀏覽不能通過IP地址去訪問這些WEB站點。基于主機名的虛擬主機是目前Internet上的大多數虛擬主機業務提供商所通常采用的方式。只要找出幾個小型公司或個人的網站,如果在WEB瀏覽器地址欄中輸入“http://主機名”可以訪問到該WEB站點,接著在命令行窗口中執行“ping 主機名”,查看到該域名對應的IP地址,然后在WEB瀏覽器地址欄中輸入“http://IP地址”時,卻無法訪問這個WEB站點了,那么,這個WEB站點就是一個基于主機名的虛擬主機,它與其他一些WEB站點共享一臺WEB服務器,而不是自己獨享一臺WEB服務器。
          注意:當使用安全套接字層 (SSL) 時,不能使用主機頭字段來實現虛擬主機,這是因為使用SSL的HTTP請求有加密保護。主機頭字段是加密內容的一部分,不能被解釋和路由到正確的站點。

          posted @ 2009-02-10 13:25 勒緊皮帶向前沖 閱讀(506) | 評論 (0)編輯 收藏
           


          專注移動通信,嵌入式,IC設計,硬件研發,手機研發等當今最熱門的技術領域的討論與資料共享
          52RD研發論壇 - http://www.52rd.com/bbs

          本文來自:我愛研發網(52RD.com) 詳細出處:http://www.52rd.com/bbs/Detail_RD.BBS_131240_17_1_1.html

          posted @ 2009-02-07 09:41 勒緊皮帶向前沖 閱讀(412) | 評論 (0)編輯 收藏
           

          什么是ThreadLocal?

          顧名思義它是local variable(線程局部變量)。它的功用非常簡單,就是為每一個使用該變量的線程都提供一個變量值的副本,是每一個線程都可以獨立地改變自己的副本,而不會和其它線程的副本沖突。從線程的角度看,就好像每一個線程都完全擁有該變量。

          使用場景

          1. To keep state with a thread (user-id, transaction-id, logging-id)
          2. To cache objects which you need frequently

          ThreadLocal類

          它 主要由四個方法組成initialValue(),get(),set(T),remove(),其中值得注意的是initialValue(),該方法 是一個protected的方法,顯然是為了子類重寫而特意實現的。該方法返回當前線程在該線程局部變量的初始值,這個方法是一個延遲調用方法,在一個線 程第1次調用get()或者set(Object)時才執行,并且僅執行1次。ThreadLocal中的確實實現直接返回一個null:

          ThreadLocal的原理

          ThreadLocal是如何做到為每一個線程維護變量的副本的呢?其實實現的思路很簡單,在ThreadLocal類中有一個Map,用于存儲每一個線程的變量的副本。比如下面的示例實現:

          public class ThreadLocal
          {
          private Map values = Collections.synchronizedMap(new HashMap());
          public Object get()
          {
          Thread curThread = Thread.currentThread();
          Object o = values.get(curThread);
          if (o == null && !values.containsKey(curThread))
          {
          o = initialValue();
          values.put(curThread, o);
          }
          return o;
          }

           public void set(Object newValue)
          {
          values.put(Thread.currentThread(), newValue);
          }

           public Object initialValue()
          {
          return null;
          }
          }

          ThreadLocal 的使用

          使用方法一:

          Hibernate的文檔時看到了關于使ThreadLocal管理多線程訪問的部分。具體代碼如下

          1.  public static final ThreadLocal session = new ThreadLocal();
          2.  public static Session currentSession() {
          3.      Session s = (Session)session.get();
          4.      //open a new session,if this session has none
          5.   if(s == null){
          6.      s = sessionFactory.openSession();
          7.      session.set(s);
          8.   }
                return s;
          9. }

          我們逐行分析
          1。 初始化一個ThreadLocal對象,ThreadLocal有三個成員方法 get()、set()、initialvalue()。
              如果不初始化initialvalue,則initialvalue返回null。
          3。 session的get根據當前線程返回其對應的線程內部變量,也就是我們需要的net.sf.hibernate.Session(相當于對應每個數據 庫連接).多線程情況下共享數據庫鏈接是不安全的。ThreadLocal保證了每個線程都有自己的s(數據庫連接)。
          5。如果是該線程初次訪問,自然,s(數據庫連接)會是null,接著創建一個Session,具體就是行6。
          6。創建一個數據庫連接實例 s
          7。保存該數據庫連接s到ThreadLocal中。
          8。如果當前線程已經訪問過數據庫了,則從session中get()就可以獲取該線程上次獲取過的連接實例



          以上轉自 橄欖樹  http://hi.baidu.com/mojiedao/blog/item/0ceeab99e7a0ad086f068c09.html

          posted @ 2009-01-12 10:23 勒緊皮帶向前沖 閱讀(180) | 評論 (0)編輯 收藏
           

          java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
           at org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:86)
           at org.springframework.web.struts.DelegatingActionUtils.findRequiredWebApplicationContext(DelegatingActionUtils.java:148)
           at org.springframework.web.struts.DelegatingActionProxy.getWebApplicationContext(DelegatingActionProxy.java:146)
           at org.springframework.web.struts.DelegatingActionProxy.getDelegateAction(DelegatingActionProxy.java:125)
           at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:109)
           at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
           at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
           at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
           at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
           at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
           at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
           at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
           at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
           at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
           at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
           at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
           at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
           at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
           at java.lang.Thread.run(Unknown Source)

          該錯誤表明你在web.xml中沒配置spring環境
          posted @ 2009-01-04 15:21 勒緊皮帶向前沖 閱讀(265) | 評論 (0)編輯 收藏
           
          1、拷貝pager-taglib.jar包
          2、在JSP頁面中使用taglib指令引入pager-taglib標簽庫
          3、使用pager-taglib標簽庫進行分頁處理

          pg:pager【這個標簽用來設置分頁的總體參數】重要參數說明:
              url:分頁的鏈接根地址,pager標簽會在這個鏈接的基礎上附加分頁參數
              items:總記錄數,pager標簽正是根據這個值來計算分頁參數的
              maxPageItems:每頁顯示的行數,默認為10
              maxIndexPages:在循環輸出頁碼的時候,最大輸出多少個頁碼,默認是10
              
          pg:first【第一頁的標簽】重要參數說明:
              export變量的意義:
              pageUrl - 分頁鏈接URL地址(最重要的export參數)
              pageNumber - 頁碼
              firstItem - 首頁第一行的索引值
              lastItem - 首頁最后一行的索引值
              
          pg:pre【上一頁標簽】重要參數說明:
              export變量的意義:
              pageUrl - 分頁鏈接URL地址(最重要的export參數)
              pageNumber - 頁碼
              firstItem - 前頁第一行的索引值
              lastItem - 前頁最后一行的索引值

          pg:next【下一頁標簽】重要參數說明:
              export變量的意義:
              pageUrl - 分頁鏈接URL地址(最重要的export參數)
              pageNumber - 頁碼
              firstItem - 下頁第一行的索引值
              lastItem - 下頁最后一行的索引值
              
          pg:last重要參數說明:
              export變量的意義:
              pageUrl - 分頁鏈接URL地址(最重要的export參數)
              pageNumber - 頁碼
              firstItem - 尾頁第一行的索引值
              lastItem - 尾頁最后一行的索引值
              
          pg:pages【這個標簽用來循環輸出頁碼信息】重要參數說明:
              export變量的意義:
              pageUrl - 分頁鏈接URL地址(最重要的export參數)
              pageNumber - 頁碼
              firstItem - pageNumber這個頁碼指定的那一頁的第一行的索引值
              lastItem - pageNumber這個頁碼指定的那一頁的最后一行的索引值


          pager-taglib-2.0下載
          http://www.aygfsteel.com/Files/wx886104/pager-taglib-2.0.rar
          posted @ 2008-12-29 16:45 勒緊皮帶向前沖 閱讀(359) | 評論 (0)編輯 收藏
           

          Log日志:主要用于記錄程序運行的情況,以便于程序在部署之后的排錯調試等等!也有利于將這些信息進行持久化(如果不將日志信息保存到文件或數據庫,則信息便會丟失)

          Java Logging API

          需JDK1.4版本以上才能支持。

          java.util.logging.* 包是JDK的日志記錄API。

          基本概念

          logger  用來記錄日志的對象

          log level  日志等級:從FINEST到SEVERE級別

          請參考JDK文檔

          handler  日志輸出處理器,即用來將格式化后的日志信息輸出,J2SE提供了下面的處理器

          StreamHandler  將信息輸出到一個OutputStream對象

          ConsoleHandler  將信息輸出到控制臺

          FileHandler  將信息輸出到文件

          還有Socket處理器和內存處理器等

          Formater  用來對日志信息進行格式化

          SimpleFormater  簡單的格式化輸出

          XmlFormater  Xml格式化輸出

          logManager  日志管理器,它包含有那些被命名的logger,以及從配置文件中讀取來的一些控制信息

          Log4j

          基本概念

          Log4j比JDK Logging更加成熟。Log4j是事實上 日志記錄標準。

          三大概念:logger/appender/layout

          logger  使用這個對象來進行輸出

          appender  使用這個對象來定義輸出到哪里去

          layout  使用這個對象來定義輸出的格式

          log4j的級別(level)

          DEBUG < INFO < WARN < ERROR < FATAL

          基本配置與使用

          只需要將log4j.jar包放到類路徑中,并且保證在類路徑根目錄下有一個log4j.properties文件即可。Log4j.properties文件是對log4j的配置。 

          在log4j.properties中,可以配置logger/appender/layout/level等內容。

          了解如何配置logger

          log4j.rootLogger = [級別],[使用哪個appender]

          log4j.logger.[logger的名稱]=[級別],[使用哪個appender]

          了解如何配置appender

          Log4j.appender.[appender的名稱]=[appender類名]

          Log4j.appender.[appender的名稱].[appender的屬性名]=[appender的屬性值]

          如:對于ConsoleAppender來說,可以配置它的target屬性為System.out,而對于FileAppender來說,可以配置它的File屬性為一個文件名

          了解如何配置layout

          Log4j.appender.[appender的名稱].layout=[layout類名]

          Log4j.appender.[appender的名稱].layout.[layout的屬性名]=[layout的屬性值]

          最常見的是PatternLayout

          Log4J采用類似C語言中的printf函數的打印格式格式化日志信息,打印參數見表1如下:
          %m 輸出代碼中指定的消息
          %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
          %r 輸出自應用啟動到輸出該log信息耗費的毫秒數
          %c 輸出所屬的類目,通常就是所在類的全名
          %t 輸出產生該日志事件的線程名
          %n 輸出一個回車換行符,Windows平臺為“"r"n”,Unix平臺為“"n”
          %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
          %l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)

          Commons log

          通用Log處理,它是一個接口抽象,底層的實現可以自動替換:

          如果當前存在log4j,則使用log4j來實現

          否則,使用JDK LOG來實現

          否則,使用其自身的簡單實現

          posted @ 2008-12-29 11:29 勒緊皮帶向前沖 閱讀(154) | 評論 (0)編輯 收藏
          僅列出標題
          共14頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 Last 
           
          主站蜘蛛池模板: 南木林县| 孝感市| 华坪县| 阳泉市| 平湖市| 康马县| 伊吾县| 五大连池市| 元朗区| 辽宁省| 石阡县| 文成县| 磐石市| 五台县| 壶关县| 呼和浩特市| 宝丰县| 丰镇市| 会同县| 和龙市| 昌黎县| 申扎县| 郑州市| 阿克| 龙岩市| 大厂| 登封市| 白玉县| 凌海市| 如东县| 邓州市| 南安市| 通江县| 年辖:市辖区| 德兴市| 云霄县| 祁门县| 准格尔旗| 仁化县| 岳西县| 台东市|