<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>dudo的博客</title>
    <description>简单就是美</description>
    <link>http://dudo.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>新一代的Web表现层开发方法(欢迎讨论)</title>
        <author>dudo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dudo.javaeye.com">dudo</a>&nbsp;
          链接：<a href="http://dudo.javaeye.com/blog/47747" style="color:red;">http://dudo.javaeye.com/blog/47747</a>&nbsp;
          发表时间: 2007年01月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="宋体">
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp; 目前基于</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">web</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发框架数不胜数，而且其核心的功能都集中在</span><span lang="EN-US"><font face="Times New Roman">web</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表现层的开发上，在这里我不打算对这些框架进行详细的分析和评论</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因为针对这些框架的评论文章已经很多了</span><span lang="EN-US"><font face="Times New Roman">)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，而是从另外一个角度提出一个新的</span><span lang="EN-US"><font face="Times New Roman">Web</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表现层开发方法。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作</span><span lang="EN-US"><font face="Times New Roman">Web</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发的大都有这样的体会，页面与逻辑总是纠缠不清，没有一个清楚地界限。有一些开发方法虽然可以将程序逻辑与网页分离开来，但是却带来的另外的复杂性，不是需要借助特定的</span><span lang="EN-US"><font face="Times New Roman">tag,</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就是需要创建附加的模板文件，目前还没有一种框架</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我所见到的，也许已经有了</span><span lang="EN-US"><font face="Times New Roman">)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，能够真正实现页面与程序逻辑的完全分类，只是将这种关系转移了而已。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我所要描述的这种新的</span><span lang="EN-US"><font face="Times New Roman">Web</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表现层开发方法的灵感来自于</span><span lang="EN-US"><font face="Times New Roman">ORM</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术。对象</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关系映射技术将</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象映射至数据库，由</span><span lang="EN-US"><font face="Times New Roman">ORM</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框架自动完成数据的</span><span lang="EN-US"><font face="Times New Roman">crud</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作。同样的，我们也可以将</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象映射至</span><span lang="EN-US"><font face="Times New Roman">html</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档，由框架来完成</span><span lang="EN-US"><font face="Times New Roman">html</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档的填充，开发人员只需要操作普通的</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象，即可实现以前由脚本或者模版完成的工作。我将这种技术称为</span><span lang="EN-US"><font face="Times New Roman">odm(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档映射</span><span lang="EN-US"><font face="Times New Roman">)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。之所以称之为</span><span lang="EN-US"><font face="Times New Roman">odm</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而不是</span><span lang="EN-US"><font face="Times New Roman">ohm(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象</span><span lang="EN-US"><font face="Times New Roman">/html</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">映射</span><span lang="EN-US"><font face="Times New Roman">)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，是因为这种技术还可以应用于更广泛的场景，比如</span><span lang="EN-US"><font face="Times New Roman">,java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象到</span><span lang="EN-US"><font face="Times New Roman">xml</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的映射，到</span><span lang="EN-US"><font face="Times New Roman">wml</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的映射等。大家可能会认为这并不是真正的新的技术，其实很多使用</span><span lang="EN-US"><font face="Times New Roman">taglib</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和模版的框架中都在使用这样的方法。但是我所要描述的方法与这些方法在实现上很大的不同，主要在以下几个方面：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 32.25pt; TEXT-INDENT: -10.5pt; mso-para-margin-left: 2.07gd; mso-char-indent-count: -1.0"><font size="3"><span lang="EN-US"><font face="Times New Roman">1 Java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象属性与</span><span lang="EN-US"><font face="Times New Roman">html</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档中的节点通过</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象属性名和</span><span lang="EN-US"><font face="Times New Roman">html</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中节点的</span><span lang="EN-US"><font face="Times New Roman">ID</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性对应</span><span lang="EN-US"><font face="Times New Roman">.</font></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 32.25pt; TEXT-INDENT: -10.5pt; mso-para-margin-left: 2.07gd; mso-char-indent-count: -1.0"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用这种方法保证了这种新的</span><span lang="EN-US"><font face="Times New Roman">web</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发方法不需要创建额外的模版，也不需要定义特定的</span><span lang="EN-US"><font face="Times New Roman">taglib</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，最为主要的是将</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象</span><span lang="EN-US"><font face="Times New Roman">,javascript</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脚本，</span><span lang="EN-US"><font face="Times New Roman">css</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这几方统一命名，使得</span><span lang="EN-US"><font face="Times New Roman">web</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发的这几方面实现有机的统一，也使得这</span><span lang="EN-US"><font face="Times New Roman">3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个方面的相互操作成为可能。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font size="3" face="Times New Roman"></font></span></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 32.25pt; TEXT-INDENT: -10.5pt; mso-para-margin-left: 2.07gd; mso-char-indent-count: -1.0"><font size="3"><span lang="EN-US"><font face="Times New Roman">2 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序开发人员所操作的只有</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象，没有任何的关于显示的循环、判断逻辑等。</span></font><span lang="EN-US"><span style="mso-spacerun: yes"><font size="3" face="Times New Roman">&nbsp;</font></span></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">3 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发人员与美工完全可以独立的、并行的工作，不会出现垮领域操作。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span lang="EN-US"><o:p><font size="3" face="Times New Roman">&nbsp;</font></o:p></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于如何将</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象属性影射到</span><span lang="EN-US"><font face="Times New Roman">html</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档节点，这里面有一套完整但却不需要特别记忆的映射规则，以后再写。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0.75pt; mso-char-indent-count: .07"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">这个框架完成后将具有以下主要特性：</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0.75pt; mso-char-indent-count: .07"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3"></font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">1 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基于</span><span lang="EN-US"><font face="Times New Roman">POJO</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">2 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">事件驱动；</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">3 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原生的</span><span lang="EN-US"><font face="Times New Roman">AJAX;</font></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">4 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">容易与现有的基于</span><span lang="EN-US"><font face="Times New Roman">POJO</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的持久化框架集成，且更方便。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">5 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">真正的所见即所得的页面开发</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">6 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">搜索引擎友好</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">7 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">无需复杂的配置文件，甚至不需要配置文件即可工作；</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">8 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">支持组件式开发；</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">9 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">真正的代码与页面分离。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span lang="EN-US"><font size="3" face="Times New Roman">&hellip;&hellip;</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span lang="EN-US"><font size="3" face="Times New Roman"></font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还有更多的特性，比如可以将</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性映射到</span><span lang="EN-US"><font face="Times New Roman">cooki,</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者</span><span lang="EN-US"><font face="Times New Roman">session</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变量甚至</span><span lang="EN-US"><font face="Times New Roman">application</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">级变量等，可以最大限对的简化</span><span lang="EN-US"><font face="Times New Roman">web</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发中的方方面面，可以说这个框架在开发效率以及可维护性方面将超越目前的其他所有的框架</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有点说大了</span><span lang="EN-US"><font face="Times New Roman">~_~)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 0.75pt; mso-para-margin-left: 2.0gd; mso-char-indent-count: .07"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统中一个</span><span lang="EN-US"><font face="Times New Roman">html</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页面，对应一个页面类，它们通过一个约定来对应，不需要配置。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21.75pt; mso-para-margin-left: 2.0gd; mso-char-indent-count: 2.07"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">整个系统的模型有点像</span><span lang="EN-US"><font face="Times New Roman">Delphi</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，熟悉</span><span lang="EN-US"><font face="Times New Roman">delphi</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的朋友可能比较熟悉，在开发</span><span lang="EN-US"><font face="Times New Roman">delphi GUI</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序时，一个窗口对应一个</span><span lang="EN-US"><font face="Times New Roman">dfm</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件</span><span lang="EN-US"><font face="Times New Roman">,</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而代码则放在</span><span lang="EN-US"><font face="Times New Roman">pas</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中，</span><span lang="EN-US"><font face="Times New Roman">dfm</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中的内容描述了窗口的</span><span lang="EN-US"><font face="Times New Roman">gui</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">组件的位置、颜色等显示信息，</span><span lang="EN-US"><font face="Times New Roman">pas</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中则是事件处理代码。在</span><span lang="EN-US"><font face="Times New Roman">webpilot</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，</span><span lang="EN-US"><font face="Times New Roman">html</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页面文件相当于</span><span lang="EN-US"><font face="Times New Roman">delphi</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span><span lang="EN-US"><font face="Times New Roman">dfm</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，页面</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类相当于</span><span lang="EN-US"><font face="Times New Roman">delphi</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span><span lang="EN-US"><font face="Times New Roman">pas</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，页面</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类中的事件处理函数相当于</span><span lang="EN-US"><font face="Times New Roman">delphi</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中</span><span lang="EN-US"><font face="Times New Roman">pas</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中的事件处理过程。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 0.75pt; mso-para-margin-left: 2.0gd; mso-char-indent-count: .07"><span lang="EN-US"><span style="mso-spacerun: yes"><font size="3" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 0.75pt; mso-para-margin-left: 2.0gd; mso-char-indent-count: .07"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">今天就写这么多了，写的比较零散，请大家见谅。这个方法我已经考虑了两年多了，已经有一个完整的实现思路，也已经有一个可运行的实现。工作一直比较忙，工作也与</span><span lang="EN-US"><font face="Times New Roman">java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不沾边，而且发现现在变懒了</span><span lang="EN-US"><font face="Times New Roman">(^_^)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。不过我还是希望能够实现一个真正可用东西。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 0.75pt; mso-para-margin-left: 2.0gd; mso-char-indent-count: .07"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 11.25pt; mso-para-margin-left: 2.0gd; mso-char-indent-count: 1.07"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">文笔不好，有些地方可能说的不太清楚，请原谅。有什么疑问请提出，欢迎大家讨论。</font></span></p>
</font>
          <br/>
          <span style="color:red;">
            <a href="http://dudo.javaeye.com/blog/47747#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 16 Jan 2007 14:58:53 +0800</pubDate>
        <link>http://dudo.javaeye.com/blog/47747</link>
        <guid>http://dudo.javaeye.com/blog/47747</guid>
      </item>
      <item>
        <title>基于模板的web开发框架分析</title>
        <author>dudo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dudo.javaeye.com">dudo</a>&nbsp;
          链接：<a href="http://dudo.javaeye.com/blog/25101" style="color:red;">http://dudo.javaeye.com/blog/25101</a>&nbsp;
          发表时间: 2006年09月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="font-size: 12pt">   看过了buaawhl的《Java Web开发构想》，也很想将自己的想法写出来，只可惜文笔不好，一直没有静下心来写，这两天的真是要忙坏了，又要给客户送样品，又要写文档，晚上回来还要写一些自己喜欢的东西。索性轻松一下，换换大脑写一些东西吧。这些都一年多前的想法，现在写出来就算做个记录吧。主要想说明的是基于模板的web开发框架所存在的问题，以及如何在web开发框架的设计中避免这些问题。<br />    首先基于模板的开发框架存在的问题，做一些分析。<br />	 通病之一：<strong>页面包含程序控制逻辑。</strong><br />    基于模板的开发框架基本上都要在网页中嵌入一些各自的标记(否则也不能称之为基于模板的开发框架)。这些标记或多或少的都显露出脚本语言的痕迹。判断逻辑、循环等标记是最为典型的证据。想想我们当初在asp、jsp中如何处理页面显示逻辑，大家就会明白我为什么这么说。也可能是由于脚本语言在于web开发中的绝对优势，导致大家都跳不出这个圈子，在web开发框架的设计上或多或少的都在照着脚本语言的开发惯例进行设计。<br />         通病之二：<strong>Java，JavaScript，HTML,CSS互无联系</strong><br />     Java，JavaScript，HTML,CSS，这4个WEB开发重要的方面，在这些开发框架中基本上是互无联系。我所指的联系是指编程方面的联系，比如，在java中要访问一个javascript变量，或者要访问一个html节点的内容等等，没有一个优雅的一致的操作方法来实现。Java只能生成javascript，但却无法访问javascript中的数据；只能生成html，但却无法访问html节点的内容.最显著的是在这些框架中，Java，JavaScript，HTML,CSS这四个方面根本就没有统一命名。页面效果,数据更新都要依赖于html Tag的名称，没有统一命名，很难想象能够将这4个方面很好的联系起来处理。</span>
          <br/>
          <span style="color:red;">
            <a href="http://dudo.javaeye.com/blog/25101#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 27 Sep 2006 00:27:22 +0800</pubDate>
        <link>http://dudo.javaeye.com/blog/25101</link>
        <guid>http://dudo.javaeye.com/blog/25101</guid>
      </item>
      <item>
        <title>WEBPilot介绍</title>
        <author>dudo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dudo.javaeye.com">dudo</a>&nbsp;
          链接：<a href="http://dudo.javaeye.com/blog/24657" style="color:red;">http://dudo.javaeye.com/blog/24657</a>&nbsp;
          发表时间: 2006年09月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>WEBPilot特性</strong><br />[list=]	页面与代码完全分离<br />	不需要标签<br />	完全基于POJO，无侵入性<br />	事件驱动<br />           无需配置文件<br />	组件支持[/list]<br />WEBPilot 示例代码：<br /><br /><pre name="code" class="java">public class HelloWorld {

	private String title;
	private Date today;
	private String msg;
	private LoginInfo loginInfo;
	
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public Date getToday() {
		return today;
	}
	public void setToday(Date today) {
		this.today = today;
	}
	
	public LoginInfo getLoginInfo() {
		return loginInfo;
	}
	
	public void setLoginInfo(LoginInfo loginInfo) {
		this.loginInfo = loginInfo;
	}
	
	public void onShow(){
		msg = "Welcome to WEBPilot world.";
		today = new Date();
	}
	
	@Event(
		id="loginBtn",
		event="onsubmit"
	)
	public void login(){
		today = new Date();//更新时间
		if ("admin".equals(loginInfo.getUserName())&&"111111".equals(loginInfo.getPass())){
			msg = "登录成功！";
		}
		else
		{
			msg = "登录失败！";
		}
	}
}</pre><br /><br /><br />我想WEBPilot的这种WEB开发模式应该是目前为止最为完美的方式，程序员完全与JAVA对象打交道，不需要接触任何的WEB网页。而且自动实现网页的局部更新，极大的减少WEB开发的工作量。<br />   今天看到了Tapestry5的介绍，Tapestry5正在朝目前的这个思路努力，但是它并不彻底，可能是总的思路不同吧。如果一年前一直开发大现在不但个的话，WEBPilot应该已经有好几个版本了。现在所有的技术问题都已经解决了，但愿最近在不要有什么紧急的事情，可以很快出一个预览版。
          <br/>
          <span style="color:red;">
            <a href="http://dudo.javaeye.com/blog/24657#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Sep 2006 23:41:47 +0800</pubDate>
        <link>http://dudo.javaeye.com/blog/24657</link>
        <guid>http://dudo.javaeye.com/blog/24657</guid>
      </item>
      <item>
        <title>一个比picocontainer更小的IOC容器(已更新到0.2)</title>
        <author>dudo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dudo.javaeye.com">dudo</a>&nbsp;
          链接：<a href="http://dudo.javaeye.com/blog/10079" style="color:red;">http://dudo.javaeye.com/blog/10079</a>&nbsp;
          发表时间: 2005年01月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          又一个IOC容器，Mcc微型组件容器。<br /><br />特性<br />===<br />1、IOC type2和IOC type3 依赖注入<br />2、组件依赖性检查<br />3、组件自动装配<br />4、运行期动态注入<br />5、函数返回值注入（即工厂方法注入）<br />6、支持简单的组件生存期管理<br /><br />Mcc 0.2 (2005.01.09)<br />====================<br />Change Log<br />----------<br /> 1、为ComponentDescriber类添加setProperty(RuntimeParameter parameter)；<br /> 2、为ComponentDescriber类添加setInitMethod方法和setDestroyMethod支持组件的生存期管理；<br /> 3、为ComponentManager类添加destroy方法，可以手动销毁ComponentManager实例；<br /> 4、为ComponentAdapter类添加destroy方法，在组件管理者销毁时销毁组件实例；<br /> 5、实现了依赖检查；<br /> 6、解决在一个组件创建过程中某个组件需要被注入多次，创建多个实例的问题。<br /><br /><strong>附件中是源代码，只有在登录后才可下载</strong>
          <br/>
          <span style="color:red;">
            <a href="http://dudo.javaeye.com/blog/10079#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 07 Jan 2005 21:44:32 +0800</pubDate>
        <link>http://dudo.javaeye.com/blog/10079</link>
        <guid>http://dudo.javaeye.com/blog/10079</guid>
      </item>
  </channel>
</rss>