一、首先Java的基礎、面向對象的基礎和設計模式的基礎知識是必不可少的。

          關于設計模式我覺得不用學太多,但以下三個模式是學習Spring必不可少的:factory模式(包括簡單工廠和抽象工廠), Strategy模式,Template method模式。如果不掌握這些你就根本沒法領悟Spring的精髓,只能依樣畫葫蘆地照搬,這是很可怕的事。

          我這里強烈建議的書可能讓人有點意外,那就是Expert one on one J2EE design and development的第四章,這一章不僅僅是Spring初學者,而是任何搞Java開發的人必讀的一章。經典!

          二、接下可以看一些Spring的入門書籍

          其實我自己沒怎么看過這方面的書,我當時只看過Spring的reference,不過現在這方面的書好象多的是,而Spring reference看起來還是有些吃力的。JavaEye上很多人建議夏昕的Spring開發指南,據說入門很容易。另外的入門書應該是Spring live或Spring in action。我大概掃了一下,Spring live是一本只講怎么做而不講為什么的書,我不太喜歡(偶爾參考一下倒不錯),不過有些人特別喜歡這樣的書,看自己的個人愛好吧。

          三、研究幾個用Spring做的開源項目

          理論還是要與實際結合,所以看完書后是要看實際的項目的。很多人喜歡appfuse,我覺得appfuse花的東西太多,真正實質性的內容又太少。我更 喜歡Spring自帶的jpetstore,這是一個非常完整的例子,看完后Spring的基本用法應該都能掌握。

          四、開始做實際的項目

          在上述這些都完備以后,我覺得應該要去實際項目中鍛煉了。當然并不是每人都有這樣的機會的,這時只能自己做個玩具項目啦。項目的鍛煉是非常關鍵的,其實每個人都清楚,我就不重復了。

          五、繼續深入學習

          經過項目的錘煉,對Spring的用法和原理有了一定的了解的時候,才有可能真正掌握Spring的精髓。這時要讀的書才是Rod Johnson的三本經典名著,分別是:

          Expert one on one J2ee design and development

          Expert one on one J2ee without EJB

          Professional Java Development with SpringFramework

          前兩本書的經典程度我就不說了,只有讀了它們,才能真正了解Spring的設計意圖,掌握Spring的精髓。

          第三本書是我強烈不建議初學者讀的書。里面的東西深入而全,但是原理講解得又不夠深,很容易讓初學者犯迷糊。但是卻是Spring的高級用戶必讀的一本書(還有一本pro Spring據說也不錯,不過我沒讀過)。我過幾天會寫一下這本書的書評。

          當然這個階段與第四階段是交錯的,邊讀書邊做項目學到的東西才會更多的。

          六、分析源代碼,擴展Spring

          有人認為沒有必要分析Spring的源代碼,因為這是很累人又不計好的事。但是要想成為Spring的高級用戶,這是必經的階段。在學習的過 程中,我們學到的不僅是Spring,更重要的是他的設計思想。不管怎樣,看牛人的源代碼是絕對有好處的。不過這是一個很累人的過程,要有思考準備哦

          posted @ 2008-11-03 18:09 caihaibo 閱讀(187) | 評論 (0)編輯 收藏
          Cookie的目的就是為用戶帶來方便,為網站帶來增值。雖然有著許多誤傳,事實上Cookie并不會造成嚴重的安全威脅。Cookie永遠不會以任何方 式執行,因此也不會帶來病毒或攻擊你的系統。另外,由于瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個 Cookie的大小限制為4   KB,因此Cookie不會塞滿你的硬盤,更不會被用作“拒絕服務”攻擊手段。
          posted @ 2008-10-31 16:03 caihaibo 閱讀(263) | 評論 (0)編輯 收藏

          注:本文轉載自 IBM developerworks,作者廖雪峰。版權歸原作者所有。

          JSON 即 JavaScript Object Natation,它是一種輕量級的數據交換格式,非常適合于服務器與 JavaScript 的交互。本文將快速講解 JSON 格式,并通過代碼示例演示如何分別在客戶端和服務器端進行 JSON 格式數據的處理。

          盡管有許多宣傳關于 XML 如何擁有跨平臺,跨語言的優勢,然而,除非應用于 Web Services,否則,在普通的 Web 應用中,開發者經常為 XML 的解析傷透了腦筋,無論是服務器端生成或處理 XML,還是客戶端用 JavaScript 解析 XML,都常常導致復雜的代碼,極低的開發效率。實際上,對于大多數 Web 應用來說,他們根本不需要復雜的 XML 來傳輸數據,XML 的擴展性很少具有優勢,許多 AJAX 應用甚至直接返回 HTML 片段來構建動態 Web 頁面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系統的復雜性,但同時缺少了一定的靈活性。

          現在, JSON 為 Web 應用開發者提供了另一種數據交換格式。讓我們來看看 JSON 到底是什么,同 XML 或 HTML 片段相比,JSON 提供了更好的簡單性和靈活性。

          和 XML 一樣,JSON 也是基于純文本的數據格式。由于 JSON 天生是為 JavaScript 準備的,因此,JSON 的數據格式非常簡單,您可以用 JSON 傳輸一個簡單的 String,Number,Boolean,也可以傳輸一個數組,或者一個復雜的 Object 對象。

          String,Number 和 Boolean 用 JSON 表示非常簡單。例如,用 JSON 表示一個簡單的 String “ abc ”,其格式為:

          "abc"

          除了字符 ",",/ 和一些控制符("b,"f,"n"r,"t)需要編碼外,其他 Unicode 字符可以直接輸出。下圖是一個 String 的完整表示結構:

           圖 1. String 的完整表示結構  
          一個 Number 可以根據整型或浮點數表示如下:

           圖 2. Number 的表示結構  
          這與絕大多數編程語言的表示方法一致,例如:

          12345(整數)
          -3.9e10(浮點數)

          Boolean 類型表示為 true 或 false 。此外,JavaScript 中的 null 被表示為 null,注意,truefalse 和 null 都沒有雙引號,否則將被視為一個 String 。

          JSON 還可以表示一個數組對象,使用 [] 包含所有元素,每個元素用逗號分隔,元素可以是任意的 Value,例如,以下數組包含了一個 String,Number,Boolean 和一個 null:

          ["abc",12345,false,null]

          Object 對象在 JSON 中是用 {} 包含一系列無序的 Key-Value 鍵值對表示的,實際上此處的 Object 相當于 Java 中的 Map<String, Object>,而不是 Java 的 Class 。注意 Key 只能用 String 表示。

          例如,一個 Address 對象包含如下 Key-Value:

          city:Beijing
          street:Chaoyang Road
          postcode:100025(整數)

          用 JSON 表示如下:

          {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

          其中 Value 也可以是另一個 Object 或者數組,因此,復雜的 Object 可以嵌套表示,例如,一個 Person 對象包含 name 和 address 對象,可以表示如下:

          {"name":"Michael","address":
          {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
          }

          上面介紹了如何用 JSON 表示數據,接下來,我們還要解決如何在服務器端生成 JSON 格式的數據以便發送到客戶端,以及客戶端如何使用 JavaScript 處理 JSON 格式的數據。

          我們先討論如何在 Web 頁面中用 JavaScript 處理 JSON 數據。我們通過一個簡單的 JavaScript 方法就能看到客戶端如何將 JSON 數據表示給用戶:

          function handleJson() {
          var j={"name":"Michael","address":
          {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
          };
          document.write(j.name);
          document.write(j.address.city);
          }

          假定服務器返回的 JSON 數據是上文的:

          {"name":"Michael","address":
          {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
          }

          只需將其賦值給一個 JavaScript 變量,就可以立刻使用該變量并更新頁面中的信息了,相比 XML 需要從 DOM 中讀取各種節點而言,JSON 的使用非常容易。我們需要做的僅僅是發送一個 Ajax 請求,然后將服務器返回的 JSON 數據賦值給一個變量即可。有許多 Ajax 框架早已包含了處理 JSON 數據的能力,例如 Prototype(一個流行的 JavaScript 庫:http://prototypejs.org)提供了 evalJSON()方法,能直接將服務器返回的 JSON 文本變成一個 JavaScript 變量:

          new Ajax.Request("http://url", {
          method: "get",
          onSuccess: function(transport) {
          var json = transport.responseText.evalJSON();
          // TODO: document.write(json.xxx);
          }
          });

          下面我們討論如何在服務器端輸出 JSON 格式的數據。以 Java 為例,我們將演示將一個 Java 對象編碼為 JSON 格式的文本。

          將 String 對象編碼為 JSON 格式時,只需處理好特殊字符即可。另外,必須用 (") 而非 (') 表示字符串:

           static String string2Json(String s) {
          StringBuilder sb = new StringBuilder(s.length()+20);
          sb.append('""');
          for (int i=0; i<s.length(); i++) {
          char c = s.charAt(i);
          switch (c) {
          case '""':
          sb.append("""""");
          break;
          case '""':
          sb.append("""""");
          break;
          case '/':
          sb.append("""/");
          break;
          case '"b':
          sb.append("""b");
          break;
          case '"f':
          sb.append("""f");
          break;
          case '"n':
          sb.append("""n");
          break;
          case '"r':
          sb.append("""r");
          break;
          case '"t':
          sb.append("""t");
          break;
          default:
          sb.append(c);
          }
          }
          sb.append('""');
          return sb.toString();
          }

          將 Number 表示為 JSON 就容易得多,利用 Java 的多態,我們可以處理 Integer,Long,Float 等多種 Number 格式:

           static String number2Json(Number number) {
          return number.toString();
          }

          Boolean 類型也可以直接通過 toString() 方法得到 JSON 的表示:

           static String boolean2Json(Boolean bool) {
          return bool.toString();
          }

          要將數組編碼為 JSON 格式,可以通過循環將每一個元素編碼出來:

           static String array2Json(Object[] array) {
          if (array.length==0)
          return "[]";
          StringBuilder sb = new StringBuilder(array.length << 4);
          sb.append('[');
          for (Object o : array) {
          sb.append(toJson(o));
          sb.append(',');
          }
          // 將最后添加的 ',' 變為 ']':
          sb.setCharAt(sb.length()-1, ']');
          return sb.toString();
          }

          最后,我們需要將 Map<String, Object> 編碼為 JSON 格式,因為 JavaScript 的 Object 實際上對應的是 Java 的 Map<String, Object> 。該方法如下:

           static String map2Json(Map<String, Object> map) {
          if (map.isEmpty())
          return "{}";
          StringBuilder sb = new StringBuilder(map.size() << 4);
          sb.append('{');
          Set<String> keys = map.keySet();
          for (String key : keys) {
          Object value = map.get(key);
          sb.append('""');
          sb.append(key);
          sb.append('""');
          sb.append(':');
          sb.append(toJson(value));
          sb.append(',');
          }
          // 將最后的 ',' 變為 '}':
          sb.setCharAt(sb.length()-1, '}');
          return sb.toString();
          }

          為了統一處理任意的 Java 對象,我們編寫一個入口方法 toJson(Object),能夠將任意的 Java 對象編碼為 JSON 格式:

           public static String toJson(Object o) {
          if (o==null)
          return "null";
          if (o instanceof String)
          return string2Json((String)o);
          if (o instanceof Boolean)
          return boolean2Json((Boolean)o);
          if (o instanceof Number)
          return number2Json((Number)o);
          if (o instanceof Map)
          return map2Json((Map<String, Object>)o);
          if (o instanceof Object[])
          return array2Json((Object[])o);
          throw new RuntimeException("Unsupported type: " + o.getClass().getName());
          }

          我們并未對 Java 對象作嚴格的檢查。不被支持的對象(例如 List)將直接拋出 RuntimeException 。此外,為了保證輸出的 JSON 是有效的,Map<String, Object> 對象的 Key 也不能包含特殊字符。細心的讀者可能還會發現循環引用的對象會引發無限遞歸,例如,精心構造一個循環引用的 Map,就可以檢測到 StackOverflowException

           @Test(expected=StackOverflowError.class)
          public void testRecurrsiveMap2Json() {
          Map<String, Object> map = new HashMap<String, Object>();
          map.put("key", map);
          JsonUtil.map2Json(map);
          }

          好在服務器處理的 JSON 數據最終都應該轉化為簡單的 JavaScript 對象,因此,遞歸引用的可能性很小。

          最后,通過 Servlet 或 MVC 框架輸出 JSON 時,需要設置正確的 MIME 類型(application/json)和字符編碼。假定服務器使用 UTF-8 編碼,則可以使用以下代碼輸出編碼后的 JSON 文本:

           response.setContentType("application/json;charset=UTF-8");
          response.setCharacterEncoding("UTF-8");
          PrintWriter pw = response.getWriter();
          pw.write(JsonUtil.toJson(obj));

          注:本文轉載自 IBM developerworks,作者廖雪峰。版權歸原作者所有。

          JSON 即 JavaScript Object Natation,它是一種輕量級的數據交換格式,非常適合于服務器與 JavaScript 的交互。本文將快速講解 JSON 格式,并通過代碼示例演示如何分別在客戶端和服務器端進行 JSON 格式數據的處理。

          盡管有許多宣傳關于 XML 如何擁有跨平臺,跨語言的優勢,然而,除非應用于 Web Services,否則,在普通的 Web 應用中,開發者經常為 XML 的解析傷透了腦筋,無論是服務器端生成或處理 XML,還是客戶端用 JavaScript 解析 XML,都常常導致復雜的代碼,極低的開發效率。實際上,對于大多數 Web 應用來說,他們根本不需要復雜的 XML 來傳輸數據,XML 的擴展性很少具有優勢,許多 AJAX 應用甚至直接返回 HTML 片段來構建動態 Web 頁面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系統的復雜性,但同時缺少了一定的靈活性。

          現在, JSON 為 Web 應用開發者提供了另一種數據交換格式。讓我們來看看 JSON 到底是什么,同 XML 或 HTML 片段相比,JSON 提供了更好的簡單性和靈活性。

          和 XML 一樣,JSON 也是基于純文本的數據格式。由于 JSON 天生是為 JavaScript 準備的,因此,JSON 的數據格式非常簡單,您可以用 JSON 傳輸一個簡單的 String,Number,Boolean,也可以傳輸一個數組,或者一個復雜的 Object 對象。

          String,Number 和 Boolean 用 JSON 表示非常簡單。例如,用 JSON 表示一個簡單的 String “ abc ”,其格式為:

          "abc"

          除了字符 ",",/ 和一些控制符("b,"f,"n"r"t)需要編碼外,其他 Unicode 字符可以直接輸出。下圖是一個 String 的完整表示結構:

           圖 1. String 的完整表示結構  
          一個 Number 可以根據整型或浮點數表示如下:

           圖 2. Number 的表示結構  
          這與絕大多數編程語言的表示方法一致,例如:

          12345(整數) -3.9e10(浮點數)

          Boolean 類型表示為 true 或 false 。此外,JavaScript 中的 null 被表示為 null,注意,truefalse 和 null 都沒有雙引號,否則將被視為一個 String 。

          JSON 還可以表示一個數組對象,使用 [] 包含所有元素,每個元素用逗號分隔,元素可以是任意的 Value,例如,以下數組包含了一個 String,Number,Boolean 和一個 null:

          ["abc",12345,false,null]

          Object 對象在 JSON 中是用 {} 包含一系列無序的 Key-Value 鍵值對表示的,實際上此處的 Object 相當于 Java 中的 Map<String, Object>,而不是 Java 的 Class 。注意 Key 只能用 String 表示。

          例如,一個 Address 對象包含如下 Key-Value:

          city:Beijing street:Chaoyang Road postcode:100025(整數)

          用 JSON 表示如下:

          {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

          其中 Value 也可以是另一個 Object 或者數組,因此,復雜的 Object 可以嵌套表示,例如,一個 Person 對象包含 name 和 address 對象,可以表示如下:

          {"name":"Michael","address": {"city":"Beijing","street":" Chaoyang Road ","postcode":100025} }

          上面介紹了如何用 JSON 表示數據,接下來,我們還要解決如何在服務器端生成 JSON 格式的數據以便發送到客戶端,以及客戶端如何使用 JavaScript 處理 JSON 格式的數據。

          我們先討論如何在 Web 頁面中用 JavaScript 處理 JSON 數據。我們通過一個簡單的 JavaScript 方法就能看到客戶端如何將 JSON 數據表示給用戶:

          function handleJson() { var j={"name":"Michael","address": {"city":"Beijing","street":" Chaoyang Road ","postcode":100025} }; document.write(j.name); document.write(j.address.city); }

          假定服務器返回的 JSON 數據是上文的:

          {"name":"Michael","address": {"city":"Beijing","street":" Chaoyang Road ","postcode":100025} }

          只需將其賦值給一個 JavaScript 變量,就可以立刻使用該變量并更新頁面中的信息了,相比 XML 需要從 DOM 中讀取各種節點而言,JSON 的使用非常容易。我們需要做的僅僅是發送一個 Ajax 請求,然后將服務器返回的 JSON 數據賦值給一個變量即可。有許多 Ajax 框架早已包含了處理 JSON 數據的能力,例如 Prototype(一個流行的 JavaScript 庫:http://prototypejs.org)提供了 evalJSON()方法,能直接將服務器返回的 JSON 文本變成一個 JavaScript 變量:

          new Ajax.Request("http://url", { method: "get", onSuccess: function(transport) { var json = transport.responseText.evalJSON(); // TODO: document.write(json.xxx); } });

          下面我們討論如何在服務器端輸出 JSON 格式的數據。以 Java 為例,我們將演示將一個 Java 對象編碼為 JSON 格式的文本。

          將 String 對象編碼為 JSON 格式時,只需處理好特殊字符即可。另外,必須用 (") 而非 (') 表示字符串:

          static String string2Json(String s) { StringBuilder sb = new StringBuilder(s.length()+20); sb.append('""'); for (int i=0; i<s.length(); i++) { char c = s.charAt(i); switch (c) { case '""': sb.append(""""""); break; case '""': sb.append(""""""); break; case '/': sb.append("""/"); break; case '"b': sb.append("""b"); break; case '"f': sb.append("""f"); break; case '"n': sb.append("""n"); break; case '"r': sb.append("""r"); break; case '"t': sb.append("""t"); break; default: sb.append(c); } } sb.append('""'); return sb.toString(); }

          將 Number 表示為 JSON 就容易得多,利用 Java 的多態,我們可以處理 Integer,Long,Float 等多種 Number 格式:

          static String number2Json(Number number) { return number.toString(); }

          Boolean 類型也可以直接通過 toString() 方法得到 JSON 的表示:

          static String boolean2Json(Boolean bool) { return bool.toString(); }

          要將數組編碼為 JSON 格式,可以通過循環將每一個元素編碼出來:

          static String array2Json(Object[] array) { if (array.length==0) return "[]"; StringBuilder sb = new StringBuilder(array.length << 4); sb.append('['); for (Object o : array) { sb.append(toJson(o)); sb.append(','); } // 將最后添加的 ',' 變為 ']': sb.setCharAt(sb.length()-1, ']'); return sb.toString(); }

          最后,我們需要將 Map<String, Object> 編碼為 JSON 格式,因為 JavaScript 的 Object 實際上對應的是 Java 的 Map<String, Object> 。該方法如下:

          static String map2Json(Map<String, Object> map) { if (map.isEmpty()) return "{}"; StringBuilder sb = new StringBuilder(map.size() << 4); sb.append('{'); Set<String> keys = map.keySet(); for (String key : keys) { Object value = map.get(key); sb.append('""'); sb.append(key); sb.append('""'); sb.append(':'); sb.append(toJson(value)); sb.append(','); } // 將最后的 ',' 變為 '}': sb.setCharAt(sb.length()-1, '}'); return sb.toString(); }

          為了統一處理任意的 Java 對象,我們編寫一個入口方法 toJson(Object),能夠將任意的 Java 對象編碼為 JSON 格式:

          public static String toJson(Object o) { if (o==null) return "null"; if (o instanceof String) return string2Json((String)o); if (o instanceof Boolean) return boolean2Json((Boolean)o); if (o instanceof Number) return number2Json((Number)o); if (o instanceof Map) return map2Json((Map<String, Object>)o); if (o instanceof Object[]) return array2Json((Object[])o); throw new RuntimeException("Unsupported type: " + o.getClass().getName()); }

          我們并未對 Java 對象作嚴格的檢查。不被支持的對象(例如 List)將直接拋出 RuntimeException 。此外,為了保證輸出的 JSON 是有效的,Map<String, Object> 對象的 Key 也不能包含特殊字符。細心的讀者可能還會發現循環引用的對象會引發無限遞歸,例如,精心構造一個循環引用的 Map,就可以檢測到 StackOverflowException

          @Test(expected=StackOverflowError.class) public void testRecurrsiveMap2Json() { Map<String, Object> map = new HashMap<String, Object>(); map.put("key", map); JsonUtil.map2Json(map); }

          好在服務器處理的 JSON 數據最終都應該轉化為簡單的 JavaScript 對象,因此,遞歸引用的可能性很小。

          最后,通過 Servlet 或 MVC 框架輸出 JSON 時,需要設置正確的 MIME 類型(application/json)和字符編碼。假定服務器使用 UTF-8 編碼,則可以使用以下代碼輸出編碼后的 JSON 文本:

          response.setContentType("application/json;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); PrintWriter pw = response.getWriter(); pw.write(JsonUtil.toJson(obj)); pw.flush();

          JSON 已經是 JavaScript 標準的一部分。目前,主流的瀏覽器對 JSON 支持都非常完善。應用 JSON,我們可以從 XML 的解析中擺脫出來,對那些應用 Ajax 的 Web 2.0 網站來說,JSON 確實是目前最靈活的輕量級方案。

           pw.flush();

          JSON 已經是 JavaScript 標準的一部分。目前,主流的瀏覽器對 JSON 支持都非常完善。應用 JSON,我們可以從 XML 的解析中擺脫出來,對那些應用 Ajax 的 Web 2.0 網站來說,JSON 確實是目前最靈活的輕量級方案。

          posted @ 2008-10-31 12:10 caihaibo 閱讀(211) | 評論 (0)編輯 收藏
          相關的bean如下
          TVO.java代碼如下
          Java代碼 復制代碼
          1. package demo;  
          2.   
          3. import java.util.*;  
          4.   
          5. import com.easylotto.lottobar.bean.BaseEntity;  
          6. import com.easylotto.lottobar.bean.ReqCommandVO;  
          7.   
          8. public class TVO extends BaseEntity{  
          9.     private String tname;  
          10.     private List<Person> rcvoList;  
          11.     private Map map;  
          12.       
          13.     public List<Person> getRcvoList() {  
          14.         return rcvoList;  
          15.     }  
          16.   
          17.     public void setRcvoList(List<Person> rcvoList) {  
          18.         this.rcvoList = rcvoList;  
          19.     }  
          20.   
          21.     public String getTname() {  
          22.         return tname;  
          23.     }  
          24.   
          25.     public void setTname(String tname) {  
          26.         this.tname = tname;  
          27.     }  
          28.       
          29.   
          30.     public Map getMap() {  
          31.         return map;  
          32.     }  
          33.   
          34.     public void setMap(Map map) {  
          35.         this.map = map;  
          36.     }  
          37.   
          38.     /** 
          39.      * @param args 
          40.      */  
          41.     public static void main(String[] args) {  
          42.         // TODO Auto-generated method stub  
          43.   
          44.     }  
          45.   
          46. }  

          Person.java如下
          Java代碼 復制代碼
          1. package demo;  
          2.   
          3. public class Person {  
          4.     private String name;  
          5.     private String age;  
          6.       
          7.     public Person(String name,String age){  
          8.         this.name=name;  
          9.         this.age=age;  
          10.     }  
          11.     public String getAge() {  
          12.         return age;  
          13.     }  
          14.     public void setAge(String age) {  
          15.         this.age = age;  
          16.     }  
          17.     public String getName() {  
          18.         return name;  
          19.     }  
          20.     public void setName(String name) {  
          21.         this.name = name;  
          22.     }  
          23.       
          24. }  


          測試類如下:
          Java代碼 復制代碼
          1. package demo;  
          2.   
          3. import net.sf.json.*;  
          4. import java.util.*;  
          5.   
          6. import com.easylotto.lottobar.bean.ReqCommandVO;  
          7. import com.easylotto.lottobar.bean.SocketCommandEntity;  
          8.   
          9. /** 
          10.  * Json使用測試類 
          11.  * @author peidw  
          12.  * 
          13.  */  
          14. public class JsonDemo {  
          15.       
          16.     public String JsonStr2Object(){  
          17.         String str="{'map':{'a2':'A2','a1':'A1'},'rcvoList':[{'age':'20','name':'小裴'},{'age':'58','name':'小龐'}],'tname':'xxname'}";  
          18.         JSONObject jo=JSONObject.fromObject(str);  
          19.         TVO sce=null;  
          20.         if(jo!=null){  
          21.             sce=(TVO)jo.toBean(jo, TVO.class);  
          22.             List alist=sce.getRcvoList();  
          23.             System.out.println(alist.size());  
          24.             Person rcvo=null;  
          25.             for(int i=0;i<alist.size();i++){  
          26.                 rcvo=(Person)alist.get(i);  
          27.                 System.out.print(rcvo.getName()+"-"+rcvo.getAge());  
          28.             }  
          29.         }  
          30.   
          31.   
          32.         return "測試";  
          33.     }  
          34.       
          35.     public void Object2JsonStr(){  
          36.   
          37.         TVO tvo=new TVO();  
          38.         tvo.setTname("xxname");  
          39.         List <Person>a=new ArrayList();  
          40.         a.add(new Person("小裴","20"));  
          41.         a.add(new Person("小龐","58"));  
          42.         tvo.setRcvoList(a);  
          43.         Map map=new HashMap();  
          44.         map.put("a1", "A1");  
          45.         map.put("a2", "A2");  
          46.         tvo.setMap(map);  
          47.         JSONObject jo=JSONObject.fromObject(tvo);  
          48.         System.out.println(jo);  
          49.     }  
          50.       
          51.     public static void main(String[] args){  
          52.         JsonDemo jd=new JsonDemo();  
          53.         jd.JsonStr2Object();  
          54.         //jd.Object2JsonStr();  
          55.     }  
          56. }  


          出現的異常如下
          2
          Exception in thread "main" java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean
          at demo.JsonDemo.JsonStr2Object(JsonDemo.java:26)
          at demo.JsonDemo.main(JsonDemo.java:53)
          使用的是json-lib-2.2.1-jdk15.jar包,請問這是怎么回事,怎么解決?


          這個問題有兩個地方值得考慮:
          1、一個就是json-lib好像是使用反射實現的,那你的Person類如果沒有無參數的構造方法的話,很危險;
          2、在你的轉化的代碼上并沒有告訴程序把rcvoList里的數據為何種類型

          為此正確的做法是,為Person添加無參數的構造方法,同時修改代碼為:

          if(jo!=null){ 
                       Map<String, Class> m = new HashMap<String, Class>();
                       m.put("rcvoList", Person.class);
                       sce=(TVO)JSONObject.toBean(jo, TVO.class, m);

          這樣應該就OK了…………
          posted @ 2008-10-31 11:36 caihaibo 閱讀(1649) | 評論 (2)編輯 收藏

          有人說,創業是孤獨的,是寂寞的,你只能獨自前行;而我說:朋友,一切都不象你說的那樣!有許多與你同路的朋友,何不一起搭個手,做個伴.讓我們一起分享創業路上的喜悅和艱難!

              這是我的創業失敗總結,我想告戒自己,同時也告訴世人:做多錯多,成功只是你看得見的那冰山一角。多少億萬富翁的過去都成為了傳奇,我卻想留給人們他真實的一面,失敗的一面。如果有后來人創業,我有些經驗可以共享:

              1、以你現有的經驗、能力、資源、資金等,考慮你是要做名商人還是法人,小商人只須自己有能力,法人則要依靠運營系統。如有可能,最好做到在外是商人,在內是法人。

              2、無論你是做商人還是法人,首先要進入相對朝陽的產業。須記?。?0%的企業死在了行業選擇的決策性失誤里,剩余90%的企業,則死在了她一直建不起來的企業系統里。

              3、應考慮你所長,進入你熟悉的領域,不要全力投入你不熟悉的領域。如果實在要做,應做好充足的資金準備,充分的勤奮準備,以及相應的得力人手。否則,及早退出。

              4、進入一個市場,最重要的是要考慮你想解決什么問題,有多大空間,對手怎樣,你應在何時用何種方式來解決;如果資金不多,趕緊找盈利的現金點和小模式,不可戀戰。

              5、用較長的時間來尋找適合的股東,不可僥幸;所謂成也蕭何敗也蕭何,一個人做的風險遠小于與不適合的股東合伙;且做為創業的掌盤者,應寬容、積極、善待你的股東。

              6、公司開始運營,你當身先士卒;有20人時,根據2/8定律,應有4名骨干,你居中協調;有10來名骨干時,帥、將、兵應培養上,同時你自己退后,繼續扶持、嚴管。

              7、管理就是獎和懲,再加企業文化的潤滑。管理沒有捷徑,你投入得越多,你的根基就越深,同時系統枝繁葉茂。領導者要建機制,管理者則首要的是管目標,其次是管人。

              8、領導者是開局者,管理者是服從者。領導者要能聽懂人言,善于納諫,但要一個人拿主意,因為風險都是你的。決策既定,則要說服溝通后貫徹執行,不可朝令夕止。

              9、領導者最重要的四個素質——洞察力:否則難以判斷對人和事;全局能力:否則難以平衡人和事;用人能力:否則你累死也做不完;影響力:經常被別人影響就不是領導。

              10、企業家的四要素——夢想:有夢想才有方向和目標;激情——激情是行動力是影響力;冒險——凡事走在前,成功概率越大競爭越激烈;責任——責任使你自律和堅韌。

              11、對于小企業融資,壓上游和下游資金是上上策;降價成交、用預期換現、出租房屋是上策;找銀行和機構貸款是中策;私人借款、內部集資是下策;信用卡透支、典當是下下策。

          posted @ 2008-10-30 17:19 caihaibo| 編輯 收藏

          /*
           * 寫cookie
          */
          Cookie namecookie = new Cookie("name",name);
          Cookie passwordcookie = new Cookie("password",password);
          Cookie optioncookie = new Cookie("option","1");

          //生命周期    
          namecookie.setMaxAge(60*60*24*365);
          passwordcookie.setMaxAge(60*60*24*365);
          optioncookie.setMaxAge(60*60*24*365);
              
          response.addCookie(namecookie);
          response.addCookie(passwordcookie); 
          response.addCookie(optioncookie); 

          /*
           * 讀cookie
          */
          Cookie[] cookies = request.getCookies();
          if(cookies!=null)
          {
              String name = "";
              String password = "";
              String option = "";
              for (int i = 0; i < cookies.length; i++)
              {
                 Cookie c = cookies[i];     
                 if(c.getName().equalsIgnoreCase("name"))
                 {
                    name = c.getValue();
                  }
                  else if(c.getName().equalsIgnoreCase("password"))
                  {
                     password = c.getValue();
                  }
                  else if(c.getName().equalsIgnoreCase("option"))
                  {
                     option = c.getValue();
                  }     
              } 
            }

          posted @ 2008-10-30 14:13 caihaibo 閱讀(275) | 評論 (0)編輯 收藏
          Firefox 中文瀏覽字體設置(附圖)
          上傳時間:2007-9-21 10:15
          相信此問題有不少 FF 中國用戶會遇到,包括“軟件界面”及“瀏覽頁面”的字體。許多中國網民不接受 FF,和這一因素有莫大關系。很多時候,并非軟件的問題,而是使用者自身的操作問題。微軟操作系統集成了 IE,在這種情況下,FF 如果沒有強大的優勢,不可能在短短數年內與 IE 勢均力敵,不可能成就目前的佳績。Netscape 就是最好的反面說明。

          以下是我作的字體設置附圖。

          posted @ 2008-10-29 16:12 caihaibo 閱讀(465) | 評論 (0)編輯 收藏

          Tutorial:Playing With Ext The Easy Way (玩EXT簡單方法)--firebug下調試ext

          周五, 12/21/2007 - 02:45 — ppkosd
          67
          vote

          蹣跚學步

          第一步 - 入門

          想必您已經聽說過 Ext、瀏覽了在線演示,并且嘗試閱讀API文檔。不過,面對復雜的API文檔,您卻不如何下手?!

          第二步 - 起步

          通覽過API文檔,并且找到了所要立刻嘗試的功能,面對混雜的網頁源代碼,如何開始一個簡單的測試頁面?那么……

          不論您的目標是什么,您都可以依照本文快速的開始使用Ext。不,不用搭建服務器,您所需要的僅僅是Firefox瀏覽器和Firebug調試插件。如果還沒有安裝,那么現在就是一個好機會。

          firebug使用教程

          牛刀小試

          • 打開Ext API文檔,您已經上路!
          • 單擊 F12 打開 Firebug 控制臺。
          • 如果您的 firebug 控制臺處于單行模式(以 '>>>' 開頭),那么請單擊右下角的紅色上箭頭以開啟多行編輯模式。
          • 輸入以下代碼,并敲擊 Ctrl-Enter 來運行:
          Ext.get(document.body).update('<div id="test"></div>');

          上邊這行代碼的作用是將當前DOM body元素用一個ID為test的div元素替換。剛才那些API文檔已經被刪除,但 Ext 代碼依舊生效,并且隨時為您效勞。

          現在,我們假設您希望簡單的添加一個面板元素(Panel),但對Ext.Panel的API冗繁的說明無能為力。那么試著將這些代碼添加到 firebug 的控制臺中:

          Ext.get(document.body).update('<div id="test"></div>');
          new Ext.Panel({ renderTo: 'test',
          width: '200px',
          title: 'My Title',
          html: 'My HTML content' });

          再次敲擊 Ctrl-Enter 。嗨!您的面板元素已經誕生。

          很好,不過如果修改一些選項呢?用下邊的代碼替換剛才的那些代碼:

          Ext.get(document.body).update('<div id="test"></div>');
          new Ext.Panel({ renderTo: 'test',
          width: '200px',
          title: 'My Title',
          html: 'My HTML content',
          collapsible: true });

          敲擊 Ctrl-Enter 。怎么樣,一個可以伸縮的面板就配置好了。(注意面板右上角的小圖標)

          每次敲擊 Ctrl-Enter ,第一行代碼都會移除現有的內容,這樣您就可以有一個干凈的調試環境。這是一個簡單的小技巧,十分方便您嘗試各種配置選項。

          您可以為update()函數添加所需要的 HTML 代碼,無論多少。然后編寫或多或少的 Javascript 來探索 Ext API。

          還等什么?現在就去親自實踐 Ext Api 吧。

          posted @ 2008-07-17 15:18 caihaibo 閱讀(111) | 評論 (0)編輯 收藏
          要使用Oracle還需要做一些前期工作.

          使用Oracle用戶
          # su - oracle

          創建表空間 -> 創建新用戶 -> 用戶授權

          一 創建表空間
          SQL> CREATE TABLESPACE test01
          DATAFILE '/data/oracle/oradata/db/test01.dbf' SIZE 1024M UNIFORM SIZE 128k;

          1) DATAFILE: 表空間數據文件存放路徑
          2) SIZE: 起初設置為1G就可以
          3) UNIFORM: 指定區尺寸為128k,如不指定,區尺寸默認為64k
          4) 空間名稱 test01 與 數據文件名稱 test01.dbf 不要求相同,可隨意命名.

          二 創建新用戶
          SQL> CREATE USER test IDENTIFIED BY 123456 DEFAULT TABLESPACE test01;

          1) 創建用戶同時分配表空間

          三 用戶授權
          1)用戶角色授權
          SQL> CRANT DBA TO test;

          a) 我這里將DBA角色賦給新用戶test,test將擁有DBA的所有操作權限.

          2)直接授權
          多用戶
          SQL> CRANT SELECT,INSERT,UPDATE,DELETE,ON USERS TO test,test1;

          下面我們可以使用兩種方式登錄Oracle db
          一 SQLPLUS
          1)本地登錄
          SQL> sqlplus test/123456

          2)遠程登錄
          假設db在另一臺服務器
          SQL> sqlplus test/123456@db

          二 PLSQL Developer
          上篇中也有講述,輸入賬號口令就可以了.


          下面說些和上面相關,且工作中會需要用到的.
          一 刪除用戶
          SQL> DROP USER test CASCADE;

          二 刪除表空間
          SQL> DROP TABLESPACE test01 INCLUDING CONTENTS AND DATAFILES;

          1) 刪除表空間內容和數據文件.
          2) 一般無效表空間占用磁盤空間,所以這個應該很常用.
          posted @ 2008-06-14 15:49 caihaibo 閱讀(179) | 評論 (0)編輯 收藏

          一、單節點元素操作

            對節點元素的操作是ExtJS的核心內容,大部分的Java操作都需要獲取頁面上某個節點元素,傳統的Java方法,是通過ID來獲得DOM節點的,例如我們的頁面上有一個id值為content的DIV節點,我們想獲得這個節點元素,用以下代碼來獲得:

          var content = getElementById('content');

            而在ExtJS中,類似prototype中的$()方法,ExtJS擁有Ext.get()方法,可以使用

          var content = Ext.get('content')

            看起來這并沒有太大的優勢,但是通過Ext.get返回的節點元素,將自動擁有快捷的、統一的、跨瀏覽器的接口,直接支持Cache,使多次訪問同一節點元素的時候更加高效,并且直接使元素支持一些常用特效,例如:高亮,拖拽等。

            例如以下的HTML代碼與js代碼:

          <body id="content">
          hi
          </body>
          Ext.onReady(() {
          Ext.get('content').highlight();
          });

            當頁面加載完畢之后,他將使整個頁面刷下變黃,然后又褪掉了。

          二、多節點元素操作

            ExtJS還支持一種使用Ext.select方法的多節點元素的操作,他將返回多個節點元素,與Ext.get方法一樣,Ext.select方法返回的節點元素同樣擁有那些Ext.get返回的節點元素所擁有的那些特性。

            例如這樣的HTML與js代碼:

          <body id="content">
          <p>
          段落1
          </p>
          <div>
          字符2
          </div>
          <p>
          段落3
          </p>
          </body>
          Ext.onReady(() {
          Ext.select('p').highlight();
          });

            當頁面加載完畢之后,只有段落1和段落3變黃,然后又褪掉了。

          posted @ 2008-06-12 17:55 caihaibo 閱讀(724) | 評論 (0)編輯 收藏
          僅列出標題
          共8頁: 上一頁 1 2 3 4 5 6 7 8 下一頁 
          主站蜘蛛池模板: 宿松县| 四川省| 池州市| 金塔县| 兴业县| 东台市| 沐川县| 科技| 双城市| 五河县| 定日县| 宁城县| 长治市| 沛县| 开原市| 海伦市| 敖汉旗| 景泰县| 乃东县| 合水县| 潼南县| 娄底市| 阿拉善盟| 读书| 丹棱县| 舒兰市| 筠连县| 乡宁县| 仪陇县| 张家口市| 色达县| 额尔古纳市| 上犹县| 理塘县| 平凉市| 香港 | 德格县| 贵阳市| 秦皇岛市| 望谟县| 锦屏县|