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。賺別人的錢,讓貧窮見鬼去吧
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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31


2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18


2

3

4

5

一、簡介:
BeanUtils提供對 Java反射和自省API的包裝。其主要目的是利用反射機制對JavaBean的屬性進行處理。我們知道,一個JavaBean通常包含了大量的屬性,很 多情況下,對JavaBean的處理導致大量get/set代碼堆積,增加了代碼長度和閱讀代碼的難度。 二、用法: BeanUtils是這個包里比較常用的一個工具類,這里只介紹它的copyProperties()方法。該方法定義如下:
如 果你有兩個具有很多相同屬性的JavaBean,一個很常見的情況就是Struts里的PO對象(持久對象)和對應的ActionForm,例如 Teacher和TeacherForm。我們一般會在Action里從ActionForm構造一個PO對象,傳統的方式是使用類似下面的語句對屬性逐 個賦值:
如 果Teacher和TeacherForm間存在名稱不相同的屬性,則BeanUtils不對這些屬性進行處理,需要程序員手動處理。例如 Teacher包含modifyDate(該屬性記錄最后修改日期,不需要用戶在界面中輸入)屬性而TeacherForm無此屬性,那么在上面代碼的 copyProperties()后還要加上一句:
怎 么樣,很方便吧!除BeanUtils外還有一個名為PropertyUtils的工具類,它也提供copyProperties()方法,作用與 BeanUtils的同名方法十分相似,主要的區別在于后者提供類型轉換功能,即發現兩個JavaBean的同名屬性為不同類型時,在支持的數據類型范圍 內進行轉換,而前者不支持這個功能,但是速度會更快一些。BeanUtils支持的轉換類型如下:
這里要注意一點,java.util.Date是不被支持的,而它的子類java.sql.Date是被支持的。因此如果對象包含時間類型的屬性,且希望被轉換的時候,一定要使用java.sql.Date類型。否則在轉換時會提示argument mistype異常。 三、優缺點: Apache Jakarta Commons項目非常有用。我曾在許多不同的項目上或直接或間接地使用各種流行的commons組件。其中的一個強大的組件就是BeanUtils。我 將說明如何使用BeanUtils將local實體bean轉換為對應的value 對象:
上 面的代碼從aLocal對象復制屬性到aValue對象。它相當簡單!它不管local(或對應的value)對象有多少個屬性,只管進行復制。我們假設 local對象有100個屬性。上面的代碼使我們可以無需鍵入至少100行的冗長、容易出錯和反復的get和set方法調用。這太棒了!太強大了!太有用 了! 現在,還有一個壞消息:使用BeanUtils的成本驚人地昂貴!我做了一個簡單的測試,BeanUtils所花費的時間要超過取數 據、將其復制到對應的 value對象(通過手動調用get和set方法),以及通過串行化將其返回到遠程的客戶機的時間總和。所以要小心使用這種威力! ![]() ![]() 該文章的原文地址為:http://lifejava.spaces.live.com/Blog/cns!A666C33543221640!158.entry |
<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請求有加密保護。主機頭字段是加密內容的一部分,不能被解釋和路由到正確的站點。
專注移動通信,嵌入式,IC設計,硬件研發,手機研發等當今最熱門的技術領域的討論與資料共享
52RD研發論壇 - http://www.52rd.com/bbs
本文來自:我愛研發網(52RD.com) 詳細出處:http://www.52rd.com/bbs/Detail_RD.BBS_131240_17_1_1.html
什么是ThreadLocal?
顧名思義它是local variable(線程局部變量)。它的功用非常簡單,就是為每一個使用該變量的線程都提供一個變量值的副本,是每一個線程都可以獨立地改變自己的副本,而不會和其它線程的副本沖突。從線程的角度看,就好像每一個線程都完全擁有該變量。
使用場景
- To keep state with a thread (user-id, transaction-id, logging-id)
- 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
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環境
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
Log日志:主要用于記錄程序運行的情況,以便于程序在部署之后的排錯調試等等!也有利于將這些信息進行持久化(如果不將日志信息保存到文件或數據庫,則信息便會丟失)
Java Logging API
需JDK1.4版本以上才能支持。
java.util.logging.* 包是JDK的日志記錄API。
基本概念
l logger – 用來記錄日志的對象
l log level – 日志等級:從FINEST到SEVERE級別
n 請參考JDK文檔
l handler – 日志輸出處理器,即用來將格式化后的日志信息輸出,J2SE提供了下面的處理器
n StreamHandler – 將信息輸出到一個OutputStream對象
n ConsoleHandler – 將信息輸出到控制臺
n FileHandler – 將信息輸出到文件
n 還有Socket處理器和內存處理器等
l Formater – 用來對日志信息進行格式化
n SimpleFormater – 簡單的格式化輸出
n XmlFormater – Xml格式化輸出
l logManager – 日志管理器,它包含有那些被命名的logger,以及從配置文件中讀取來的一些控制信息
Log4j
基本概念
Log4j比JDK Logging更加成熟。Log4j是事實上 日志記錄標準。
三大概念:logger/appender/layout
l logger – 使用這個對象來進行輸出
l appender – 使用這個對象來定義輸出到哪里去
l layout – 使用這個對象來定義輸出的格式
log4j的級別(level)
DEBUG < INFO < WARN < ERROR < FATAL
基本配置與使用
只需要將log4j.jar包放到類路徑中,并且保證在類路徑根目錄下有一個log4j.properties文件即可。Log4j.properties文件是對log4j的配置。
在log4j.properties中,可以配置logger/appender/layout/level等內容。
l 了解如何配置logger
n log4j.rootLogger = [級別],[使用哪個appender]
n log4j.logger.[logger的名稱]=[級別],[使用哪個appender]
l 了解如何配置appender
n Log4j.appender.[appender的名稱]=[appender類名]
n Log4j.appender.[appender的名稱].[appender的屬性名]=[appender的屬性值]
u 如:對于ConsoleAppender來說,可以配置它的target屬性為System.out,而對于FileAppender來說,可以配置它的File屬性為一個文件名
l 了解如何配置layout
n Log4j.appender.[appender的名稱].layout=[layout類名]
n Log4j.appender.[appender的名稱].layout.[layout的屬性名]=[layout的屬性值]
n 最常見的是PatternLayout
u 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來實現
否則,使用其自身的簡單實現