<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>magic_seek</title>
    <description></description>
    <link>http://magic-seek.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>XWorker介绍（3）－脚本（函数）示例</title>
        <author>magic_seek</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://magic-seek.javaeye.com">magic_seek</a>&nbsp;
          链接：<a href="http://magic-seek.javaeye.com/blog/56118" style="color:red;">http://magic-seek.javaeye.com/blog/56118</a>&nbsp;
          发表时间: 2007年02月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在XWorker介绍（3）中讲以实现一个发送邮件的功能组件，并演示如何在Java Application和WebApplication中调用这个功能。</p>
<p>其实了解XWorker的最好方法是直接在XWorker中操作一下，大家可以从附件中下载example项目更新一下，实际看看we架构和脚本例子的数据对象。脚本的功能演示写成了文档，所以在帖子中我就挑重要的说明一下。</p>
<p>提示：</p>
<ul>
    <li>数据对象＋它的方法等于Java Class的效果 </li>
    <li>不要把XWorker理解成一个web应用，XWorker也可以当组件在Java类中使用 </li>
    <li>通过Context可以实现函数的可视化调用，这会大大降低对程序语言的掌握难度要求 </li>
</ul>
<p><strong>要演示的功能说明</strong></p>
<p>在这个演示中我们编写一个发送邮件的脚本（函数），然后演示其他脚本如何调用这个脚本（函数），并最终实现在Java的一般应用和Web应用中的使用发送邮件的脚本（函数）。</p>
<p>一下部分只贴代码部分，具体过程参看文档。</p>
<p><strong>邮件发送脚本的实现</strong></p>
<p>首在这里我们会定义一个SendMail结构数据对象，会定义邮件服务器地址、用户名、密码、发件人、收件人....等属性，会添加sendMail、inherit、success、exception和init五个方法，当把属性和五个方法定义完时邮件发送的脚本（函数）就实现了。</p>
<p>下面贴出其代码片段：</p>
<p>SendMail结构数据对象的xml代码片段</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">structure</span><span>&nbsp;</span><span class="attribute">name</span><span>=&quot;SendMail</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;邮件服务器地址&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;host&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;用户名&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;userName&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;密码&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;password&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;发件人&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;from&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;发件人姓名&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;fromName&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">default</span><span>=</span><span class="attribute-value">&quot;success&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;何时发送&quot;</span><span>&nbsp;</span><span class="attribute">inputtype</span><span>=</span><span class="attribute-value">&quot;select&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;when&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;init&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;init&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;init&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;success&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;success&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;success&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;exception&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;exception&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;exception&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">field</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;收件人&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;to&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;收件人姓名&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;toName&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">&quot;2&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;主题&quot;</span><span>&nbsp;</span><span class="attribute">size</span><span>=</span><span class="attribute-value">&quot;60&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;subject&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;cdata&quot;</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">&quot;2&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;信息&quot;</span><span>&nbsp;</span><span class="attribute">inputtype</span><span>=</span><span class="attribute-value">&quot;textarea&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;message&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag"><span class="tag-name">structure</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>sendMail方法代码</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.apache.commons.mail.MultiPartEmail; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>MultiPartEmail&nbsp;mail&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;MultiPartEmail(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>mail.setHostName(self.host); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>mail.setAuthentication(self.userName,&nbsp;self.password); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>mail.setFrom(self.from,&nbsp;</span><span class="string">&quot;&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>mail.setSubject(self.subject); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>mail.setMsg(self.message); &nbsp;&nbsp;</span> </li>
    <li class=""><span>mail.addTo(self.to,&nbsp;self.toName); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>mail.send();&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>这是一段groovy代码，self.host相当于在JavaClass里this.host。</p>
<p>init方法代码</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">if</span><span>(self.when&nbsp;==&nbsp;</span><span class="string">&quot;init&quot;</span><span>){ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;self.exec(</span><span class="string">&quot;sendMail&quot;</span><span>,&nbsp;binding); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>其他方法和init方法代码类似，省略。</p>
<p><strong>实现对SendMail脚本（函数）的调用</strong></p>
<p>在XWorker中创建并编辑一个脚本数据对象，以下是它的xml代码片段</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;send&quot;</span><span>&nbsp;</span><span class="attribute">description</span><span>=</span><span class="attribute-value">&quot;调用SendMail上下文发送电子邮件。&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;send&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">contexts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">context</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;mailContext&quot;</span><span>&nbsp;</span><span class="attribute">password</span><span>=</span><span class="attribute-value">&quot;111&quot;</span><span>&nbsp;</span><span class="attribute">userName</span><span>=</span><span class="attribute-value">&quot;111&quot;</span><span>&nbsp;</span><span class="attribute">from</span><span>=</span><span class="attribute-value">&quot;11&quot;</span><span>&nbsp;</span><span class="attribute">to</span><span>=</span><span class="attribute-value">&quot;11&quot;</span><span>&nbsp;</span><span class="attribute">host</span><span>=</span><span class="attribute-value">&quot;smtp.tom.com&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">contexts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>以上就是脚本的基本概况，这里邮件服务器、邮件信息等参数都是定好的（在web程序里演示动态的）。</p>
<p>在Java类中调用以上脚本发送电子邮件：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;com.xworker.DataCenter; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;TestSendMail&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String&nbsp;args[]){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//初始化数据中心，数据中心一般只初始化一次，指定好数据对象的存放目录 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataCenter.getInstance().setPath(</span><span class="string">&quot;webroot/WEB-INF/data&quot;</span><span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataCenter&nbsp;dataCenter&nbsp;=&nbsp;DataCenter.getInstance(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//执行发送邮件的脚本 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataCenter.runScript(</span><span class="string">&quot;example:config:context.SendMail:/@send&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>执行这个JavaApplication就可以发送电子邮件了。</p>
<p><strong>Web应用下实现对发送邮件的脚本（函数）的使用</strong></p>
<p>在Web下使用发送邮件的脚本的原理是一样的，也是通过上下文的方式调用的（还有其他方式调用）。在Web这里我们编写两个Web页面，一个是编辑电子邮件信息的页面，一个是发送并显示结果的页面。</p>
<p>下面是编辑电子邮件信息的页面的数据象xml形式的概况（包括control，result和界面的定义）</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">webAction</span><span>&nbsp;</span><span class="attribute">description</span><span>=</span><span class="attribute-value">&quot;编辑电子邮件。&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;editMail&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;example:config:context.SendMailFromWeb:/@editMail/@view&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;success&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">forms</span><span>&nbsp;</span><span class="attribute">title</span><span>=</span><span class="attribute-value">&quot;编辑电子邮件&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;view&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">form</span><span>&nbsp;</span><span class="attribute">action</span><span>=</span><span class="attribute-value">&quot;do?sc=example:config:context.SendMailFromWeb:/@sendMail&quot;</span><span>&nbsp;</span><span class="attribute">target</span><span>=</span><span class="attribute-value">&quot;_self&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;editForm&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">group</span><span>&nbsp;</span><span class="attribute">cols</span><span>=</span><span class="attribute-value">&quot;1&quot;</span><span>&nbsp;</span><span class="attribute">title</span><span>=</span><span class="attribute-value">&quot;布局容器&quot;</span><span>&nbsp;</span><span class="attribute">haveLabel</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">showTitle</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">haveTitle</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;layout&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">structureEditBody</span><span>&nbsp;</span><span class="attribute">isNestedInGroup</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;编辑邮件信息&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;mail&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">structure</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;电子邮件&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;mail&quot;</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">&quot;2&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;发件人&quot;</span><span>&nbsp;</span><span class="attribute">description</span><span>=</span><span class="attribute-value">&quot;请输入发件人的邮件地址。&quot;</span><span>&nbsp;</span><span class="attribute">size</span><span>=</span><span class="attribute-value">&quot;60&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;from&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">&quot;2&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;收件人&quot;</span><span>&nbsp;</span><span class="attribute">size</span><span>=</span><span class="attribute-value">&quot;60&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;to&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">&quot;2&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;主题&quot;</span><span>&nbsp;</span><span class="attribute">description</span><span>=</span><span class="attribute-value">&quot;邮件的主题。&quot;</span><span>&nbsp;</span><span class="attribute">size</span><span>=</span><span class="attribute-value">&quot;60&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;subject&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">&quot;2&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;内容&quot;</span><span>&nbsp;</span><span class="attribute">description</span><span>=</span><span class="attribute-value">&quot;
    <p>邮件的内容。</p>
    &quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">structure</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">structureEditBody</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">cell</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">&quot;2&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;cellButton&quot;</span><span>&nbsp;</span><span class="attribute">align</span><span>=</span><span class="attribute-value">&quot;center&quot;</span><span>&nbsp;</span><span class="attribute">showTitle</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;cellButton&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">button</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;发送&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;submit&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;sendButton&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;sendButton&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">cell</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">group</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">form</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">forms</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">webAction</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>下面是发送邮件并显示结果的Web页面的xml的概况（包括WebControl定义，脚本定义和result处理）</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">webAction</span><span>&nbsp;</span><span class="attribute">description</span><span>=</span><span class="attribute-value">&quot;发送电子邮件。&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;sendMail&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;core:config:forms.messageAndReturnBack&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;success&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">scriptFlow</span><span>&nbsp;</span><span class="attribute">script</span><span>=&quot; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">mail</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">requestBean</span><span>.getObject(&quot;mail&quot;,&nbsp;true); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">message</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">&quot;发送邮件成功！&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&quot;sendMail&quot;; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;script&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">scriptFlow</span><span>&nbsp;</span><span class="attribute">script</span><span>=&quot;return&nbsp;&quot;success</span><span class="attribute-value">&quot;;&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;sendMail&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">contexts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">context</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;mail&quot;</span><span>&nbsp;</span><span class="attribute">from</span><span>=</span><span class="attribute-value">&quot;$_{mail.from}&quot;</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;mail&quot;</span><span>&nbsp;</span><span class="attribute">to</span><span>=</span><span class="attribute-value">&quot;$_{mail.to}&quot;</span><span>&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;mail&quot;</span><span>&nbsp;</span><span class="attribute">host</span><span>=</span><span class="attribute-value">&quot;host&quot;</span><span>&nbsp;...</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">contexts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">scriptFlow</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">scriptFlow</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">webAction</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>以上代码中mail=requestBean.getObject(&quot;mail&quot;, true)是把界面提交的数据放入一个Map中。return &quot;sendMail&quot;是要执行脚本的子流程的sendMail脚本。在子流程中发送邮件的上下文中$_{}是要修改的变量，mail=reqeustBean.getObject(&quot;mail&quot;,true)就是为这些变量做了初始化。（$_{}和${}的效果一样，可恶freemarker和groovy都用了，我在用就会冲突）</p>
<p><strong>后记</strong></p>
<p>希望大家能从演示中看出点什么来，毕竟了解新的东西需要有个过程。</p>
<p>附件example.rar是最新的example项目插件，里面包含了web框架演示和脚本演示的数据对象，解压后替换原来的即可，如果在使用中发现了什么bug请告诉我，XWorker还没有达到稳定的阶段。</p>
<p>ScriptExample.rar里包含了脚本功能演示的pdf文档。</p>
          <br/>
          <span style="color:red;">
            <a href="http://magic-seek.javaeye.com/blog/56118#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, 27 Feb 2007 04:25:41 +0800</pubDate>
        <link>http://magic-seek.javaeye.com/blog/56118</link>
        <guid>http://magic-seek.javaeye.com/blog/56118</guid>
      </item>
      <item>
        <title>XWorker 介绍（2）－构建web框架</title>
        <author>magic_seek</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://magic-seek.javaeye.com">magic_seek</a>&nbsp;
          链接：<a href="http://magic-seek.javaeye.com/blog/55678" style="color:red;">http://magic-seek.javaeye.com/blog/55678</a>&nbsp;
          发表时间: 2007年02月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>估计大家可能对XWorker的介绍（1）已经看过了，看样子似乎还不是很了解，不过没关系，从XWorker介绍（2）开始介绍一些XWorker的实际用途，了解如何使用XWorker是不需要明白它的基本原理的。下面就说说使用XWorker开发的好处：</p>
<ul>
    <li>敏捷的开发过程<br />
    XWorker一开始就是一个可运行的程序，从开发的开始到开发的结束始终都是在运行中的XWorker上进行的操作，原则上是可以做到动态添加和修改功能而不用重启的。</li>
    <li>通过编辑器修改数据对象<br />
    不用麻烦的用txt编辑器修改繁杂的配置文件</li>
    <li>灵活性和可重用性<br />
    如果理解了XWorker，那可能你会发现在XWorker中诸如框架、模式之类的东西渐渐变得模糊了，因为在某种角度上看XWorker中的每一个数据对象都是一个框架程序。另外XWorker可以动态的添加数据和功能，当数据和功能添加到XWorker中时这些数据和功能就是XWorker的一部分了，修改XWorker的数据就等于在改变XWorker，XWorker中的任何一个数据都是XWorker的一个部分，而所有的数据在XWorker中实质上是平等的，因而你添加的每一个数据和功能都可以被重复利用。</li>
</ul>
<p>下面我们以大家都比较熟悉的Web架构为例说明一下如何在XWorker中如何搭建Web框架程序，并在XWorker中使用这些框架程序构建web应用。</p>
<p><strong>构建第一个Web框架</strong></p>
<p>第一个Web框架我们功能定义的简单一些，这个框架的功能就是调用Groovy脚本，由Groovy脚本执行业务并做界面输出。</p>
<p>首先我们定义一个这个Web框架的结构数据对象，这个结构数据对象也就是这个Web框架的主程序（可以理解成就是一个Java类）。</p>
<p>这个结构数据对象是这么定义的：</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">structure</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;MyControl1&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;名称&quot;</span><span>&nbsp;</span><span class="attribute">description</span><span>=</span><span class="attribute-value">&quot;Web&nbsp;ctontrol的名称。&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;name&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;cdata&quot;</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">&quot;2&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;脚本&quot;</span><span>&nbsp;</span><span class="attribute">inputtype</span><span>=</span><span class="attribute-value">&quot;textarea&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;script&quot;</span><span>&nbsp;</span><span class="attribute">inputattrs</span><span>=</span><span class="attribute-value">&quot;cols=&amp;quot;60&amp;quot;&nbsp;rows=&amp;quot;20&amp;quot;&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">scrip</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;httpDo&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataCenter.runScript(self.metadata.path,&nbsp;binding); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">structure</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>在XWorker编辑以上的数据对象后（通过界面动态编辑），第一个Web框架就全部编完了，我们就可以使用它编写web应用了，比如编写一个在浏览器输出Hello World!的最简单的web应用，这个应用的数据对象是这个样子的：</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">MyControl1</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;MyControl1&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.writer.write(&quot;Hello&nbsp;World!&quot;); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">MyControl1</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>编辑好Hello World的数据对象后（也是在界面编辑，界面是通过那个结构数据对象动态生成的），那么在浏览器的地址栏里输入地址就可以访问了：比如<a href="http://localhost:8080/xworker/do?sc=example:config:webaction.MyControl1">http://localhost:8080/xworker/<font face="Arial">do?sc=example:config:webaction.MyControl1</font></a>（example:config:webaction.MyControl1）是应用数据对象的地址。</p>
<p>运行后我们可以在IE中得到下面的结果：</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>Hello World!</p>
</blockquote>
<p dir="ltr">到此为止第一个Web架构就已经全部完成了，你可以在XWorker中用这个web架构去编写只能处理Groovy的web应用了。</p>
<p dir="ltr"><strong>构建第二个Web框架</strong></p>
<p dir="ltr">第二个Web框架的功能我们接第一个Web框架的功能，做一个完整的MVC的架构来。第二个web框架的功能是业务逻辑使用Groovy脚本，执行完业务程序后业务程序会返回一个字符串，然后通过这个字符串会在result的子节点去找相匹配的结果处理（和webwork一样），找到匹配后的结构后就调用结果的处理程序，返回给客户端页面。结果的类型我们在例子中实现三种，这三种类型的结果是Groovy类型（由Groovy脚本输出页面），freemarker（有freemarker模版生成页面），form（有view插件输出页面）。</p>
<p dir="ltr">那么这个结构数据对象我们可以定义成：</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">structure</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;MyControl2&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;名称&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;name&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;cdata&quot;</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">&quot;2&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;脚本&quot;</span><span>&nbsp;</span><span class="attribute">inputtype</span><span>=</span><span class="attribute-value">&quot;textarea&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;script&quot;</span><span>&nbsp;</span><span class="attribute">inputattrs</span><span>=</span><span class="attribute-value">&quot;cols=&amp;quot;60&amp;quot;&nbsp;rows=&amp;quot;20&amp;quot;&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">structure</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;结果&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;result&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;名称&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;name&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">structure</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;groovy界面输出&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;groovy&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;cdata&quot;</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">&quot;2&quot;</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;脚本&quot;</span><span>&nbsp;</span><span class="attribute">inputtype</span><span>=</span><span class="attribute-value">&quot;textarea&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;script&quot;</span><span>&nbsp;</span><span class="attribute">inputattrs</span><span>=</span><span class="attribute-value">&quot;cols=&amp;quot;60&amp;quot;&nbsp;rows=&amp;quot;20&amp;quot;&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">script</span><span>=</span><span class="attribute-value">&quot;dataCenter.runScript(self.metadata.path,&nbsp;binding);&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;run&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">structure</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">structure</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;freemarker模版输出&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;freemarker&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">field</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;名称&quot;</span><span>&nbsp;</span><span class="attribute">description</span><span>=</span><span class="attribute-value">&quot;&amp;lt;p&amp;gt;模板的路径。&amp;lt;/p&amp;gt;&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;name&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">script</span><span>=&quot;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;com.xworker.util.UtilTemplate;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UtilTemplate.process(binding.getVariables(),&nbsp;self.name,&nbsp;&amp;quot;freemarker&amp;quot;,&nbsp;response.writer);&quot;&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;run&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">structure</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">structure</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;view插件输出&quot;</span><span>&nbsp;</span><span class="attribute">extends</span><span>=</span><span class="attribute-value">&quot;view:structure:view&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;view&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">script</span><span>=&quot;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;com.xworker.util.UtilForm;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UtilForm.processAsFreemarker(binding.getVariables(),&nbsp;self.metadata.path,&nbsp;response.writer);&quot;&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;run&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">structure</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">script</span><span>=&quot;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取自己的第一个子节点&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">childs</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">self</span><span>.getChilds();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(childs.size()&nbsp;==&nbsp;0){&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.writer.write(&amp;quot;doResult:结果没有定义输出方式！&amp;quot;);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//run方法名是约定的&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;childs[0].exec(&amp;quot;run&amp;quot;,&nbsp;binding);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&quot;&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;doResult&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">structure</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">script</span><span>=&quot;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">result</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">dataCenter</span><span>.runScript(self.metadata.path,&nbsp;binding);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">resultObject</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">self</span><span>.getDataObject(&amp;quot;result@&amp;quot;&nbsp;+&nbsp;result);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span class="attribute">resultObject</span><span>&nbsp;==&nbsp;null){&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.writer.write(&amp;quot;httpDo:没有找到相匹配的结果！&amp;quot;);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//执行doResult方法，doResult的名字是约定的&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultObject.exec(&amp;quot;doResult&amp;quot;,&nbsp;binding);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&quot;&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;httpDo&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">scripts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">structure</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>在这个里面Web框架的逻辑程序是这样，这段程序负责调用业务Groovy脚本，并负责找到适配结果，并执行结果的方法输出界面，这里我们约定子节点都应该有一个doResult方法，这个方法是执行结果的。可以看出doResult方法是个约定的结构，只要result的子节点数据对象实现了这个接口，那么就可以处理其相关类型了。这部分代码是：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>result&nbsp;=&nbsp;dataCenter.runScript(self.metadata.path,&nbsp;binding); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>resultObject&nbsp;=&nbsp;self.getDataObject(&quot;result@&quot;;&nbsp;+&nbsp;result); &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">if</span><span>(resultObject&nbsp;==&nbsp;</span><span class="keyword">null</span><span>){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;response.writer.write(&quot;httpDo:没有找到相匹配的结果！&quot;); &nbsp;&nbsp;</span></li>
    <li class=""><span>}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//执行doResult方法，doResult的名字是约定的 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;resultObject.exec(&quot;doResult&quot;,&nbsp;binding); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">return</span><span>;</span><span>&nbsp;</span></li>
</ol>
</div>
<p>结果的doResult方法：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="comment">//取自己的第一个子节点 </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>childs&nbsp;=&nbsp;self.getChilds(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">if</span><span>(childs.size()&nbsp;==&nbsp;</span><span class="number">0</span><span>){ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;response.writer.write(&quot;doResult:结果没有定义输出方式！&quot;); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//run方法名是约定的 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;childs[</span><span class="number">0</span><span>].exec(&quot;run&quot;,&nbsp;binding); &nbsp;&nbsp;</span></li>
    <li class=""><span>}</span></li>
</ol>
</div>
<p>groovy结果类型的方法：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>dataCenter.runScript(self.metadata.path,&nbsp;binding);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>freemarker的类型处理方法：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;com.xworker.util.UtilTemplate; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>UtilTemplate.process(binding.getVariables(),&nbsp;self.name,&nbsp;&quot;freemarker&quot;,&nbsp;response.writer);</span><span>&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>form类型的处理方法：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;com.xworker.util.UtilForm; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>UtilForm.processAsFreemarker(binding.getVariables(),&nbsp;self.metadata.path,&nbsp;response.writer);&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>那么使用上面的Web框架结构我们可以编辑以这个框架为基础的web应用了，比如我们编写一个测试的应用，这个应用接受web客户端提交的参数result，通过result的值分别执行相应的结果，这个应用的数据对象是：</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">MyControl2</span><span>&nbsp;</span><span class="attribute">script</span><span>=&quot; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取要显示那个结果 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">result</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">requestBean</span><span>.result; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span class="attribute">result</span><span>&nbsp;==&nbsp;null){ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">result</span><span>&nbsp;=&nbsp;&quot;form&quot;; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;&quot;&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;MyControl2_1&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;groovy&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">groovy</span><span>&nbsp;</span><span class="attribute">script</span><span>=&quot; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.writer.write(&quot;&quot;&quot; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">h2</span><span class="tag">&gt;</span><span>Groovy</span><span class="tag">&lt;/</span><span class="tag-name">h2</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">a</span><span>&nbsp;</span><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;do?sc=example:config:webaction.MyControl2_1&amp;result=groovy&quot;</span><span class="tag">&gt;</span><span>groovy</span><span class="tag">&lt;/</span><span class="tag-name">a</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">p</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">a</span><span>&nbsp;</span><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;do?sc=example:config:webaction.MyControl2_1&amp;result=freemarker&quot;</span><span class="tag">&gt;</span><span>freemarker</span><span class="tag">&lt;/</span><span class="tag-name">a</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">p</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">a</span><span>&nbsp;</span><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;do?sc=example:config:webaction.MyControl2_1&amp;result=form&quot;</span><span class="tag">&gt;</span><span>form</span><span class="tag">&lt;/</span><span class="tag-name">a</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">p</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;);&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">result</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;freemarker&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">freemarker</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;example:webaction/MyControl2_1.ftl&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">result</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;form&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">view</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;view&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">group</span><span>&nbsp;</span><span class="attribute">title</span><span>=</span><span class="attribute-value">&quot;Form&quot;</span><span>&nbsp;</span><span class="attribute">haveLabel</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">showTitle</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;group&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">htmlCode</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;htmlCode&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;htmlCode&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">htmlCode</span><span class="tag">&gt;</span><span class="cdata">&lt;![CDATA[ </span>&nbsp;</li>
    <li class="alt"><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;&lt;a&nbsp;href=&quot;do?sc=example:config:webaction.MyControl2_1&amp;amp;result=groovy&quot;&gt;groovy&lt;/a&gt;&lt;/p&gt; </span>&nbsp;</span></li>
    <li class=""><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;&lt;a&nbsp;href=&quot;do?sc=example:config:webaction.MyControl2_1&amp;amp;result=freemarker&quot;&gt;freemarker&lt;/a&gt;&lt;/p&gt; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;&lt;a&nbsp;href=&quot;do?sc=example:config:webaction.MyControl2_1&amp;amp;result=form&quot;&gt;form&lt;/a&gt;&lt;/p&gt;]]&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">htmlCode</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">htmlCode</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">group</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">view</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">result</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">MyControl2</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>和第一个web框架的web应用的执行方式一样，在地址栏中输入相应的地址就可以马上出结果了。</p>
<p><strong>扩展web框架的功能</strong></p>
<p>以上两个例子是实现了需求的web框架的基本功能，r果我们要扩展一些web框架的功能怎么办呢，比如控制web的编码输出，用户权限控制，性能做个监控等。这些功能都可以通过添加脚本的上下文来实现。</p>
<p>XWorker中的山下文同时有上下文、控制者双重作用，上下文一般是具有公共功能的数据对象，如：事务的处理，权限处理等，上下文可以有自己的属性，上下文有inherit（继承）、init（初始化）、success（成功）和exception（失败）这四个方法，在执行脚本的前后会根据情况调用上下文的这几个方法，上下文可以在这几个方法里实现变量注入、流程控制等功能，另外上下文的方法也可以有它自己的上下文。</p>
<p>了解上下文的基本概念后，我们在在第二个web框架的基础上构建第三个web框架，实现对输出界面的编码、缓存等的控制并监控其性能。第三个web框架的代码这里就不全部贴出来了，我们只贴脚本和上下文的部分：</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;httpDo&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;dataCenter.runScript(self.metadata.path,&nbsp;binding); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">resultObject</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">self</span><span>.getDataObject(&amp;quot;result@&amp;quot;&nbsp;+&nbsp;result); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span class="attribute">resultObject</span><span>&nbsp;==&nbsp;null){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.writer.write(&amp;quot;httpDo:没有找到相匹配的结果！&amp;quot;); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}else{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//执行doResult方法，doResult的名字是约定的 &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultObject.exec(&amp;quot;doResult&amp;quot;,&nbsp;binding); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;return; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">contexts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">context</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;httpDo执行时间：&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;performance&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">context</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">&quot;httpContext&quot;</span><span>&nbsp;</span><span class="attribute">responseEncoding</span><span>=</span><span class="attribute-value">&quot;GBK&quot;</span><span>&nbsp;</span><span class="attribute">noCache</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">requestEncoding</span><span>=</span><span class="attribute-value">&quot;GBK&quot;</span><span>&nbsp;</span><span class="attribute">expires</span><span>=</span><span class="attribute-value">&quot;1&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;httpContext&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">contexts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>扩展了以上上下文后，我们再运行程序，这时候控制台就会打印出执行的时间：</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="Arial">INFO (com.xworker.context.PerformanceContext:36) - httpDo执行时间：耗时：31毫秒</font></p>
</blockquote>
<p dir="ltr"><strong>后记</strong></p>
<p dir="ltr">以上就是演示如何在XWorker构建web框架的全部过程，这些都是在XWorker用编辑器编辑的，基本上即编即用，所以这个过程绝对是敏捷的。</p>
<p dir="ltr">限于篇幅的限制，我们将在下一个介绍中讲述XWorker编辑数据的原理以及脚本（不仅是Groovy还可以是Java程序）和上下文的有关性质。</p>
          <br/>
          <span style="color:red;">
            <a href="http://magic-seek.javaeye.com/blog/55678#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>Sun, 25 Feb 2007 22:10:40 +0800</pubDate>
        <link>http://magic-seek.javaeye.com/blog/55678</link>
        <guid>http://magic-seek.javaeye.com/blog/55678</guid>
      </item>
  </channel>
</rss>