您好,登錄后才能下訂單哦!
本篇內容介紹了“Java對象序列化怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
從 Java 類產生 XML
把 Ajax 響應作為 XML 來傳遞有許多原因:每個支持 Ajax 的瀏覽器都有導航 XML 文檔的方法,也有許多服務器端技術可以處理 XML 數據。
通過制定一個方案,描述要交換的文檔類型,在 Ajax 客戶端和服務器端之間很容易定義合約,而且如果服務器端架構采用面向服務的方式,那么使用 XML 也可以允許非 Ajax 客戶機使用您提供的數據。
我將考慮從 Java 對象產生 XML 數據的三種方法,并討論每種方法的優劣。
自行進行序列化
首先,可以從對象圖以編程的方式生成 XML。這種方式可以簡單到只是在每個 JavaBean 類中實現 toXml() 方法即可。然后就可以選擇合適的 XML API,讓每個 bean 提供表示自己狀態的元素,并遞歸地對自己的成員調用對象圖。
顯然,這種方式無法擴展到大量的類,因為每個類都需要專門編寫自己的 XML 生成代碼。從好的方面來看,這是一個實現起來簡單的方式,沒有額外的配置支出或者更復雜的構建過程支出,任何 JavaBean 圖都可以只用幾個調用就變成 XML 文檔。
我曾把XML標記字符串連接在一起,實現了toXml()方法。上次我就提到過,這是個糟糕的方法,因為它把確保標記配對、實體編碼等工作的負擔放在每個 toXml() 方法的代碼中。
在 Java 平臺上有幾個 XML API 可以替您做這些工作,這樣您就可以把精力集中在 XML 的內容上。清單 1 用 JDOM API 實現了在線商店示例中表示訂單的類中的 toXml()(請參閱 圖 1)。
清單 1. Order 類的 toXml() 的 JDOM 實現
public Element toXml() { Element elOrder = new Element("order"); elOrder.setAttribute("id",id); elOrder.setAttribute ("cost",getFormattedCost()); Element elDate = new Element("date").addContent(date); elOrder.addContent(elDate); Element elItems = new Element("items"); for (Iterator |
在這里可以看到用 JDOM 創建元素、使用屬性和添加元素內容有多么簡單。遞歸地調用復合 JavaBean 的 toXml() 方法是為了取得它們子圖的 Element 表示。例如,items 元素的內容是通過調用 Order 聚合的每個 Item 對象上的 toXml() 得到的。
一旦所有的 JavaBean 都實現了 toXml() 方法,那么把任意對象圖序列化成 XML 文檔并返回給 Ajax 客戶機就簡單了,如清單 2 所示。
清單 2. 從 JDOM 元素生成 XML 響應
public void doGet(HttpServletRequest req, HttpServletResponse res) throws java.io.IOException, ServletException { String custId = req.getParameter("username"); Customer customer = getCustomer(custId); Element responseElem = customer.toXml(); Document responseDoc = new Document(responseElem); res.setContentType("application/xml"); new XMLOutputter().output (responseDoc,res.getWriter()); } |
JDOM 再次把工作變得非常簡單。只需要在對象圖返回的 XML 元素外面包裝一個 Document,然后用 XMLOutputter 把文檔寫入 servlet 響應即可。清單 3 顯示了用這種方式生成的 XML 示例,用 JDOM Format.getPrettyFormat() 對 XMLOutputter進行初始化,格式化得非常好。在這個示例中,顧客只做了一個訂單,包含兩個商品。
“Java對象序列化怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。