⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 面向 java 开发人员的 ajax ajax 的 java 对象序列化.htm

📁 主要是我最近两月在公司通过百度学习的内容,有AJAX,DWR,JAVA实现文件的上传和下载.主要目的在与告诉大家一个成功程序员(JAVA)是如何学习的,需要学习什么内容.以及学习的态度.
💻 HTM
📖 第 1 页 / 共 5 页
字号:
              <TR>
                <TD class=code-outline><PRE class=displaycode>				
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&lt;Item&gt; iter = 
   items.iterator() ; iter.hasNext() ; ) {
    elItems.addContent(iter.next().toXml());
  }
  elOrder.addContent(elItems);
  return elOrder;
}
</PRE></TD></TR></TBODY></TABLE><BR>
            <P>在这里可以看到用 JDOM 创建元素、使用属性和添加元素内容有多么简单。递归地调用复合 JavaBean 的 
            <CODE>toXml()</CODE> 方法是为了取得它们子图的 <CODE>Element</CODE> 
            表示。例如,<CODE>items</CODE> 元素的内容是通过调用 <CODE>Order</CODE> 聚合的每个 
            <CODE>Item</CODE> 对象上的 <CODE>toXml()</CODE> 得到的。</P>
            <P>一旦所有的 JavaBean 都实现了 <CODE>toXml()</CODE> 方法,那么把任意对象图序列化成 XML 
            文档并返回给 Ajax 客户机就简单了,如清单 2 所示。</P><BR><BR><A name=code2><B>清单 2. 从 
            JDOM 元素生成 XML 响应</B></A><BR>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD class=code-outline><PRE class=displaycode>				
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());
}
</PRE></TD></TR></TBODY></TABLE><BR>
            <P>JDOM 再次把工作变得非常简单。只需要在对象图返回的 XML 元素外面包装一个 
            <CODE>Document</CODE>,然后用 <CODE>XMLOutputter</CODE> 把文档写入 servlet 
            响应即可。清单 3 显示了用这种方式生成的 XML 示例,用 JDOM 
            <CODE>Format.getPrettyFormat()</CODE> 对 <CODE>XMLOutputter</CODE> 
            进行初始化,格式化得非常好。在这个示例中,顾客只做了一个订单,包含两个商品。</P><BR><BR><A 
            name=code3><B>清单 3. 代表顾客的 XML 文档</B></A><BR>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD class=code-outline><PRE class=displaycode>				
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;customer username="jimmy66"&gt;
  &lt;realname&gt;James Hyrax&lt;/realname&gt;
  &lt;orders&gt;
    &lt;order id="o-11123" cost="$349.98"&gt;
      &lt;date&gt;08-26-2005&lt;/date&gt;
      &lt;items&gt;
        &lt;item id="i-55768"&gt;
          &lt;name&gt;Oolong 512MB CF Card&lt;/name&gt;
          &lt;description&gt;512 Megabyte Type 1 CompactFlash card. 
          Manufactured by Oolong Industries&lt;/description&gt;
          &lt;price&gt;$49.99&lt;/price&gt;
        &lt;/item&gt;
        &lt;item id="i-74491"&gt;
          &lt;name&gt;Fujak Superpix72 Camera&lt;/name&gt;
          &lt;description&gt;7.2 Megapixel digital camera featuring six 
          shooting modes and 3x optical zoom. Silver.&lt;/description&gt;
          &lt;price&gt;$299.99&lt;/price&gt;
        &lt;/item&gt;
      &lt;/items&gt;
    &lt;/order&gt;
  &lt;/orders&gt;
&lt;/customer&gt;
</PRE></TD></TR></TBODY></TABLE><BR>
            <P><A name=N1011E><SPAN class=smalltitle>自行序列化的不足</SPAN></A></P>
            <P>有趣的是,清单 3 中的代码展示了让 JavaBean 把自己序列化为 XML 
            的一个主要不足。假设要用这个文档表示顾客的订单历史视图。在这种情况下,不太可能要显示每个历史订单中每个商品的完整说明,或者告诉顾客他或她自己的姓名。但是如果应用程序有一个 
            <CODE>ProductSearch</CODE> 类,它就是以 <CODE>Item</CODE> bean 
            列表的形式返回搜索结果,那么在 <CODE>Item</CODE> 的 XML 
            表示中包含说明可能会有帮助。而且,<CODE>Item</CODE> 
            类上代表当前库存水平的额外字段,在产品搜索视图中可能就是需要显示的有用信息。但是,不管当前的库存水平是否与当前情况相关(比如对顾客的订单历史来说),这个字段都会从包含 
            <CODE>Item</CODE> 的任何对象图中序列化出来。</P>
            <P>从设计的角度来看,这是数据模型与视图生成耦合的经典问题。每个 bean 只能用一种途径序列化自己,一成不变的方式意味着 Ajax 
            交互最终要交换它们不需要交换的数据,因此造成客户端代码要从文档中找到需要的信息更加困难,而且也会增加带宽消耗和客户端的 XML 
            解析时间。这种耦合的另一个后果就是 XML 的语法不能脱离 Java 类独立变化。例如,对顾客文档的方案做修改,可能会影响多个 Java 
            类,造成它们也不得不做修改和重新编译。</P>
            <P>我稍后会解决这些问题,但是首先来看一个对自行序列化方式的可伸缩性问题的解决方案:XML 绑定框架。</P><BR>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD><IMG height=1 alt="" 
                  src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/blue_rule.gif" 
                  width="100%"><BR><IMG height=6 alt="" 
                  src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif" width=8 
                  border=0></TD></TR></TBODY></TABLE>
            <TABLE class=no-print cellSpacing=0 cellPadding=0 align=right>
              <TBODY>
              <TR align=right>
                <TD><IMG height=4 alt="" 
                  src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif" 
                  width="100%"><BR>
                  <TABLE cellSpacing=0 cellPadding=0 border=0>
                    <TBODY>
                    <TR>
                      <TD vAlign=center><IMG height=16 alt="" 
                        src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/u_bold.gif" 
                        width=16 border=0><BR></TD>
                      <TD vAlign=top align=right><A class=fbox 
                        href="http://www.ibm.com/developerworks/cn/java/j-ajax2/#main"><B>回页首</B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR>
            <P><A name=N10141><SPAN class=atitle>XML 绑定框架</SPAN></A></P>
            <P>近些年来,已经开发了多个 Java API 来简化 XML 文档到 Java 对象图的绑定过程。多数都提供了 XML 
            编排和拆解;也就是说,它们可以在 Java 对象图和 XML 之间执行双向会话。这些框架封装了 XML 
            处理的全部工作,这意味着应用程序代码只需要处理普通的 Java 
            类。它们还希望提供有用的辅助功能,例如文档验证。笼统来说,这些框架采用了两种不同的方式:代码生成和对象到 XML 
            映射。我将分别解释这两种方式。</P>
            <P><A name=N1014A><SPAN class=smalltitle>代码生成方式</SPAN></A></P>
            <P>使用代码生成的框架包括 XMLBeans、JAXB、Zeus 和 JBind。Castor 
            也能使用这项技术。这类框架的起点是描述文档数据类型的 XML 方案。使用框架提供的工具,就可以生成代表这些方案定义类型的 Java 
            类。最后,用这些生成的类编写应用程序,表示自己的模型数据,并通过框架提供的一些辅助机制把数据序列化成 XML。</P>
            <P>如果应用程序要使用大型 XML 语法,那么代码生成方式是个很好的方法。在数十个类上编写定制 XML 
            序列化代码的可伸缩性问题由此消除。另一方面,也不再需要定义自己的 JavaBean。框架生成的 Java 类通常非常符合 XML 
            的结构,所以对它们进行编码很难。而且,生成的类变成哑数据容器,因为一般不能向它们添加行为。一般来说,在应用程序代码中要做些妥协,才能很好地处理方案生成的类型。另一个缺陷是如果修改方案,会造成生成的类也要修改,所以也就会对围绕它们编写的代码带来相应的影响。</P>
            <P>这种类型的 XML 绑定框架在数据拆解时最有用(例如,使用 XML 文档并把它们转化成 Java 
            对象)。除非拥有大型数据模型而且有可能从生成的类中获益,否则基于代码生成的框架对于 Ajax 应用程序来说可能有很大的杀伤力。</P>
            <P><A name=N10159><SPAN class=smalltitle>映射方式</SPAN></A></P>
            <P>采用映射方式的框架包括 Castor 和 Apache Commons 
            Betwixt。映射通常是比代码生成更灵活和更轻量的解决方案。首先,可以像通常一样编写 
            JavaBean,包括任何行为以及任何自己喜欢的方便的方法。然后,在运行时,调用框架中基于内省的编排器,并根据对象成员的类型、名称和值生成 
            XML 文档。通过定义类的映射文件,可以覆盖默认的绑定策略,并就类在 XML 中的表示方式对编排器提出建议。</P>
            <P>这种方法是在可伸缩性与灵活性之间的良好折中。可以按照自己喜欢的方式编写 Java 类,编排器负责处理 
            XML。虽然映射定义文件编写起来简单,可伸缩性也足够好,但是映射规则最多只能改变标准的绑定行为,而且在对象结构和它们的 XML 
            表示之间总要残留一些耦合。最终,可能不得不在 Java 表示或 XML 格式之间任选一个做些折中,才能让映射方法起作用。</P>
            <P><A name=N10165><SPAN class=smalltitle>数据绑定总结</SPAN></A></P>
            <P>Dennis Sosnoski 就 XML 数据绑定 API 
            的主题,在代码生成和代码映射两个方面写了深入的文章。如果想进一步研究这个领域,我推荐他在 Castor 
            和代码生成框架方面的精彩文章(请参阅 <A 
            href="http://www.ibm.com/developerworks/cn/java/j-ajax2/#resources">参考资料</A> 
            中的链接)。</P>
            <P>总之,代码生成方式损失了过多的灵活性和方便性,对于典型的 Ajax 
            应用程序用处不大。另一方面,基于映射的框架可能工作得很好,但是要恰到好处地调整它们的映射策略,以便从对象生成需要的 XML。</P>
            <P>所有的 XML 绑定 API 都具有手工序列化技术的一个主要不足:模型和视图的耦合。被限制为一个类型一个 XML 
            表示,就意味着在网络上总要有冗余数据传输。更严重的问题是,在情况要求客户端代码使用专门视图时,客户端代码却无法得到它,所以可能要费力地处理给定对象图的一成不变的视图。</P>
            <P>在传统的 Web 应用程序开发中,采用页面模板系统把视图生成与控制器逻辑和模型数据干净地分离。这种方法在 Ajax 
            场景中也会有帮助。</P><BR>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD><IMG height=1 alt="" 
                  src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/blue_rule.gif" 
                  width="100%"><BR><IMG height=6 alt="" 
                  src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif" width=8 
                  border=0></TD></TR></TBODY></TABLE>
            <TABLE class=no-print cellSpacing=0 cellPadding=0 align=right>
              <TBODY>
              <TR align=right>
                <TD><IMG height=4 alt="" 
                  src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/c.gif" 
                  width="100%"><BR>
                  <TABLE cellSpacing=0 cellPadding=0 border=0>
                    <TBODY>
                    <TR>
                      <TD vAlign=center><IMG height=16 alt="" 
                        src="面向 Java 开发人员的 Ajax Ajax 的 Java 对象序列化.files/u_bold.gif" 
                        width=16 border=0><BR></TD>
                      <TD vAlign=top align=right><A class=fbox 
                        href="http://www.ibm.com/developerworks/cn/java/j-ajax2/#main"><B>回页首</B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR>
            <P><A name=N1017B><SPAN class=atitle>页面模板系统</SPAN></A></P>
            <P>任何通用目的的页面模板技术都可以用来生成 XML,从而使 Ajax 应用程序根据自己的数据模型生成任何 XML 
            响应文档。额外收获是:模板可以用简单的、表现力强的标记语言编写,而不是用一行行的 Java 代码编写。清单 5 是一个 JSP 
            页面,采用了 <CODE>Customer</CODE> bean 并表示出定制的 XML 
            视图,适合客户端代码生成订单历史组件。</P><BR><BR><A name=code4><B>清单 4. 生成订单历史文档的 
            JSP</B></A><BR>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD class=code-outline><PRE class=displaycode>				
&lt;?xml version="1.0"?&gt;
&lt;%@ page contentType="application/xml" %&gt;
&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %&gt;
&lt;c:set var="cust" value="${requestScope.customer}"/&gt;
&lt;orderhistory username="${cust.username}"&gt;
&lt;c:forEach var="order" items="${cust.orders}"&gt;
  &lt;order id="${order.id}" cost="${order.formattedCost}"&gt;
    &lt;date&gt;${order.date}&lt;/date&gt;
    &lt;items&gt;
    &lt;c:forEach var="item" items="${order.items}"&gt;
      &lt;item id="${item.id}"&gt;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -