<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>chineseoa</title>
    <description></description>
    <link>http://chineseoa.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>在Eclipse中创建基于Axis2的web services</title>
        <author>chineseoa</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chineseoa.javaeye.com">chineseoa</a>&nbsp;
          链接：<a href="http://chineseoa.javaeye.com/blog/192018" style="color:red;">http://chineseoa.javaeye.com/blog/192018</a>&nbsp;
          发表时间: 2008年05月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p class="MsoNormal"><span style="font-family: 宋体;">本实验的目的是让你尽可能快的创建使用</span>
<span lang="EN-US">Axis2</span>
<span style="font-family: 宋体;">的服务和客户端，我们将使用一个简单的</span>
<span lang="EN-US"> SayHello </span>
<span style="font-family: 宋体;">服务并显示给你一些创建和部署它的不同方式，以及了解</span>
<span lang="EN-US">Axis2</span>
<span style="font-family: 宋体;">自带的一些工具，然后我们将看看创建访问这些服务的客户端。</span>
</p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal"><strong><span style="font-family: 宋体;">一</span>
<span lang="EN-US">. </span>
</strong>
<strong><span style="font-family: 宋体;">做好准备</span>
<span lang="EN-US"></span>
</strong>
</p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 21pt;"><span style="font-family: 宋体;">在我们使用</span>
<span lang="EN-US">Axis2</span>
<span style="font-family: 宋体;">构建任何东西之前，我们将需要关注一些家务事。现在你将需要准备好你使用</span>
<span lang="EN-US">Axis2</span>
<span style="font-family: 宋体;">的环境，幸运的是，它只包括一些简单的步骤</span>
<span lang="EN-US">:</span>
</p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>
<strong>1. </strong>
</span>
<strong><span style="font-family: 宋体;">软件下载准备</span>
<span lang="EN-US"></span>
</strong>
</p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 73.5pt; text-align: left; text-indent: -73.5pt;"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
Tomcat</span>
<span style="font-family: 宋体;">下载地址</span>
<span lang="EN-US">: http://www.apache.org/dist/tomcat/tomcat-5/v5.5.26/bin/apache-tomcat-5.5.26.zip</span>
</p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
Axis2 War</span>
<span style="font-family: 宋体;">包：</span>
</p>
<p class="MsoNormal" style="text-indent: 73.5pt;"><span lang="EN-US">http://apache.mirror.phpchina.com/ws/axis2/1_4/axis2-1.4-war.zip</span>
</p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
Axis2 Eclipse plug-in(</span>
<span style="font-family: 宋体;">代码生成工具和打包工具</span>
<span lang="EN-US">):</span>
</p>
<p class="MsoNormal" style="margin: 0cm -50.4pt 0.0001pt 73.5pt;"><span lang="EN-US">http://apache.mirror.phpchina.com/ws/axis2/tools/1_4/axis2-eclipse-service-archiver-wizard-1.4.zip<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<a href="http://apache.mirror.phpchina.com/ws/axis2/tools/1_4/axis2-eclipse-codegen-wizard-1.4.zip" target="_blank">http://apache.mirror.phpchina.com/ws/axis2/tools/1_4/axis2-eclipse-codegen-wizard-1.4.zip</a></span>
</p>
<p class="MsoNormal" style="margin-right: -50.4pt; text-indent: 36.75pt;"><span lang="EN-US">Eclipse+MyEclipse</span>
<span style="font-family: 宋体;">：</span>
</p>
<p class="MsoNormal" style="margin-right: -50.4pt; text-indent: 73.5pt;"><span style="font-family: 宋体;">可以到官方网站下载</span>
<span lang="EN-US">(</span>
<span style="font-family: 宋体;">本文为</span>
<span lang="EN-US">3.2</span>
<span style="font-family: 宋体;">＋</span>
<span lang="EN-US">5.0GA)</span>
</p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>
<strong>2. </strong>
</span>
<strong><span style="font-family: 宋体;">安装</span>
<span lang="EN-US"></span>
</strong>
</p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
1) </span>
<span style="font-family: 宋体;">首先搭建开发环境，需要将下载到的</span>
<span lang="EN-US">Eclipse</span>
<span style="font-family: 宋体;">解压缩到一个目录</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">然后安装好</span>
<span lang="EN-US">MyEclipse</span>
</p>
<p class="MsoNormal" style="text-indent: 36.75pt;"><span lang="EN-US">2) </span>
<span style="font-family: 宋体;">将下载到的</span>
<span lang="EN-US">Axis2 </span>
<span style="font-family: 宋体;">的两个插件解压缩到</span>
<span lang="EN-US">Eclipse</span>
<span style="font-family: 宋体;">安装目录下的</span>
<span lang="EN-US">plug-in</span>
<span style="font-family: 宋体;">子目录。</span>
</p>
<p class="MsoNormal" align="center" style="text-align: center;"><span lang="EN-US"><!-- [if gte vml 1]><v:shapetype
 id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
 path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
 <v:stroke joinstyle="miter"/>
 <v:formulas>
  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
  <v:f eqn="sum @0 1 0"/>
  <v:f eqn="sum 0 0 @1"/>
  <v:f eqn="prod @2 1 2"/>
  <v:f eqn="prod @3 21600 pixelWidth"/>
  <v:f eqn="prod @3 21600 pixelHeight"/>
  <v:f eqn="sum @0 0 1"/>
  <v:f eqn="prod @6 1 2"/>
  <v:f eqn="prod @7 21600 pixelWidth"/>
  <v:f eqn="sum @8 21600 0"/>
  <v:f eqn="prod @7 21600 pixelHeight"/>
  <v:f eqn="sum @10 21600 0"/>
 </v:formulas>
 <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
 <o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:195.75pt;
 height:218.25pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg" height="291" alt="" width="261" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal" style="margin-left: 52.5pt;"><span style="font-family: 宋体;">然后启动</span>
<span lang="EN-US">Eclipse</span>
<span style="font-family: 宋体;">，并选择&ldquo;</span>
<span lang="EN-US">File-&gt;New-&gt;Other</span>
<span style="font-family: 宋体;">&rdquo;可以找到下面的这些</span>
<span lang="EN-US">Wizards, </span>
<span style="font-family: 宋体;">这些将是本文中用到的很重要的工具。</span>
</p>
<p class="MsoNormal" align="center" style="margin-left: 52.5pt; text-align: center;"><span lang="EN-US"><!-- [if gte vml 1]><v:shape id="_x0000_i1028"
 type="#_x0000_t75" style='width:172.5pt;height:123.75pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image003.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image004.jpg" height="165" alt="" width="230" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal" align="center" style="margin-left: 52.5pt; text-align: center;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="background: white none repeat scroll 0%; margin-left: 47.25pt; text-indent: -47.25pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
4) </span>
<span style="font-family: 宋体;">下面开始搭建</span>
<span lang="EN-US">Web
Services</span>
<span style="font-family: 宋体;">的部署环境。将下载的</span>
<span lang="EN-US">tomcat</span>
<span style="font-family: 宋体;">报解压缩到一个目录。完成</span>
<span lang="EN-US">web container&nbsp;</span>
<span style="font-family: 宋体;">的安装。</span>
</p>
<p class="MsoNormal" style="background: white none repeat scroll 0%; text-indent: 31.5pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span lang="EN-US">5) </span>
<span style="font-family: 宋体;">将</span>
<span lang="EN-US">axis2.war</span>
<span style="font-family: 宋体;">包拷贝到</span>
<span lang="EN-US">tomcat</span>
<span style="font-family: 宋体;">安装目录下的</span>
<span lang="EN-US">webapps</span>
<span style="font-family: 宋体;">目录中。</span>
</p>
<p class="MsoNormal" style="background: white none repeat scroll 0%; margin-left: 46.1pt; text-indent: -15.75pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span lang="EN-US">6) </span>
<span style="font-family: 宋体;">启动</span>
<span lang="EN-US">Tomcat(windows
</span>
<span style="font-family: 宋体;">下为</span>
<span lang="EN-US">TOMCA_HOME/bin</span>
<span style="font-family: 宋体;">中的</span>
<span lang="EN-US">startup.bat</span>
<span style="font-family: 宋体;">；</span>
<span lang="EN-US">Linux</span>
<span style="font-family: 宋体;">，</span>
<span lang="EN-US">unix</span>
<span style="font-family: 宋体;">环境为</span>
<span lang="EN-US">startup.sh</span>
<span style="font-family: 宋体;">文件</span>
<span lang="EN-US">)</span>
<span style="font-family: 宋体;">，打开浏览器输入并访问</span>
<span lang="EN-US">:http://ip:8080/axis2</span>
<span style="font-family: 宋体;">（或</span>
<span lang="EN-US"><a href="http://localhost:8080/axis"><span style="color: windowtext; text-decoration: none;">2</span>
</a>
<a href="http://localhost:8080/axis2"><span style="color: windowtext; text-decoration: none;">http://localhost:8080/axis</span>
</a>
2</span>
<span style="font-family: 宋体;">）来查看</span>
<span lang="EN-US">, </span>
<span style="font-family: 宋体;">如果能看到下面的页面则说明已经安装完成。</span>
</p>
<p class="MsoNormal" style="background: white none repeat scroll 0%; margin-left: 46.1pt; text-indent: -15.75pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="background: white none repeat scroll 0%; margin-left: 46.1pt; text-indent: -15.75pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span lang="EN-US"><!-- [if gte vml 1]><v:shape id="_x0000_i1029" type="#_x0000_t75"
 style='width:453pt;height:165pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image005.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image006.jpg" border="0" height="220" alt="" width="604" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal"><strong><span style="font-family: 宋体;">二、进入开发</span>
<span lang="EN-US"></span>
</strong>
</p>
<p class="MsoNormal"><strong><span lang="EN-US">&nbsp;</span>
</strong>
</p>
<p class="MsoNormal" style="text-indent: 21.75pt;"><strong><span style="font-family: 宋体; font-weight: normal;">在开发环境及</span>
</strong>
<strong><span lang="EN-US" style="font-weight: normal;">Axis2</span>
</strong>
<strong><span style="font-family: 宋体; font-weight: normal;">环境搭建好后，我们便可着手</span>
</strong>
<strong><span lang="EN-US" style="font-weight: normal;">Web Services</span>
</strong>
<strong><span style="font-family: 宋体; font-weight: normal;">服务以及客户端的开发：</span>
</strong>
<strong><span lang="EN-US" style="font-weight: normal;"></span>
</strong>
</p>
<p class="MsoNormal" style="text-indent: 21.75pt;"><strong><span lang="EN-US" style="font-weight: normal;">&nbsp;</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 39.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><strong><span lang="EN-US"><span>1．<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span>
</span>
</span>
</strong>
<!-- [endif]--><strong><span style="font-family: 宋体;">建立要发布的</span>
<span lang="EN-US">Web Services</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 21.75pt;"><strong><span lang="EN-US">&nbsp;</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>1）<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">在</span>
<span lang="EN-US">Eclispse</span>
<span style="font-family: 宋体;">中添加一个用户库命名为</span>
<span lang="EN-US">axis2</span>
<span style="font-family: 宋体;">，将</span>
<span lang="EN-US">axis2\lib</span>
<span style="font-family: 宋体;">下的包均添加进来。</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt;"><span style="font-family: 宋体;">在</span>
<span lang="EN-US">&ldquo;Package Explorer&rdquo;</span>
<span style="font-family: 宋体;">窗口空白中单击右键，从右键快捷菜单中选择&ldquo;</span>
<span lang="EN-US">Properties&rdquo;</span>
<span style="font-family: 宋体;">菜单，然后在弹出的窗口中如下图示操作，最后在图中</span>
<span lang="EN-US"> 6 </span>
<span style="font-family: 宋体;">所示位置处填入</span>
<span lang="EN-US">axis2</span>
<span style="font-family: 宋体;">中</span>
<span lang="EN-US">lib</span>
<span style="font-family: 宋体;">位置的路径即可；</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt;"><span style="font-family: 宋体;">这一步操作的目的是为了以后工程添加</span>
<span lang="EN-US">axis2</span>
<span style="font-family: 宋体;">所需的</span>
<span lang="EN-US">jar</span>
<span style="font-family: 宋体;">文件方便；</span>
</p>
<p class="MsoNormal"><strong><span lang="EN-US"><!-- [if gte vml 1]><v:shape id="_x0000_i1030"
 type="#_x0000_t75" style='width:453pt;height:331.5pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image007.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image008.jpg" border="0" height="442" alt="" width="604" />
<!-- [endif]--></span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>2）<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">建立一个</span>
<span lang="EN-US">JavaProject</span>
<span style="font-family: 宋体;">命名为</span>
<span lang="EN-US">ws</span>
<span style="font-family: 宋体;">，将</span>
<span lang="EN-US">axis2</span>
<span style="font-family: 宋体;">用户库加入到</span>
<span lang="EN-US">build
path</span>
<span style="font-family: 宋体;">中。</span>
</p>
<p class="MsoNormal" align="center" style="margin-left: 11.25pt; text-align: center;"><span lang="EN-US"><!-- [if gte vml 1]><v:shape id="_x0000_i1031"
 type="#_x0000_t75" style='width:339pt;height:318.75pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image009.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image010.jpg" border="0" height="425" alt="" width="452" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>3）<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">现在开始编写要发布的</span>
<span lang="EN-US">WebSevice</span>
<span style="font-family: 宋体;">，在</span>
<span lang="EN-US">src</span>
<span style="font-family: 宋体;">中建包</span>
<span lang="EN-US">briup</span>
<span style="font-family: 宋体;">，建立</span>
<span lang="EN-US">Hello</span>
<span style="font-family: 宋体;">类如下</span>
</p>
<p class="MsoNormal" style="margin-left: 21.75pt;"><strong><span lang="EN-US">&nbsp;</span>
</strong>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left; line-height: 150%;"><strong><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: #7f0055;">package</span>
</strong>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: black;"> briup;</span>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left; line-height: 150%;"><strong><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: #7f0055;">public</span>
</strong>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: black;"> </span>
<strong><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: #7f0055;">class</span>
</strong>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: black;"> Hello {</span>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: black;"><span>&nbsp;&nbsp; </span>
</span>
<strong><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: #7f0055;">public</span>
</strong>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: black;"> String sayHello(String user) {</span>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: black;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</span>
<strong><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: #7f0055;">return</span>
</strong>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: black;"> </span>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: #2a00ff;">&quot;Hello, &quot;</span>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: black;"> +
user;</span>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: black;"><span>&nbsp;&nbsp; </span>
}</span>
<span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" style="text-indent: 60pt; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: &quot;Courier New&quot;; color: black;">}</span>
</p>
<p class="MsoNormal" style="text-indent: 47.45pt; line-height: 150%;"><strong><span lang="EN-US">&nbsp;</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 39.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><strong><span lang="EN-US"><span>2．<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span>
</span>
</span>
</strong>
<!-- [endif]--><strong><span style="font-family: 宋体;">发布</span>
<span lang="EN-US"> Web Services</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 21.75pt;"><strong><span lang="EN-US">&nbsp;</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span style="font-family: 宋体;">打包要发布的</span>
<span lang="EN-US">Service</span>
<span style="font-family: 宋体;">，</span>
<span lang="EN-US">Eclipse</span>
<span style="font-family: 宋体;">中</span>
<span lang="EN-US">New --&gt; File --&gt; Other --&gt; Axis2 wizards --&gt; Axis2
Services Archiver</span>
<span style="font-family: 宋体;">，按照向导选择刚建立的类编译后的</span>
<span lang="EN-US">class</span>
<span style="font-family: 宋体;">文件。</span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><strong><span lang="EN-US"><!-- [if gte vml 1]><v:shape
 id="_x0000_i1032" type="#_x0000_t75" style='width:372pt;height:372pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image011.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image012.jpg" border="0" height="496" alt="" width="496" />
<!-- [endif]--></span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>1)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">选择</span>
<span lang="EN-US">class</span>
<span style="font-family: 宋体;">文件目录，注意，不是</span>
<span lang="EN-US">java</span>
<span style="font-family: 宋体;">源文件，而是</span>
<span lang="EN-US">classes</span>
<span style="font-family: 宋体;">目录。</span>
<span lang="EN-US"></span>
</p>
<p class="MsoNormal" align="center" style="text-align: center;"><span lang="EN-US" style="font-size: 9pt;"><!-- [if gte vml 1]><v:shape id="_x0000_i1033" type="#_x0000_t75"
 style='width:423pt;height:181.5pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image013.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image014.jpg" border="0" height="242" alt="" width="564" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>2)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">连按两次</span>
<span lang="EN-US">&ldquo;Next&gt;&rdquo;</span>
<span style="font-family: 宋体;">，选中</span>
<span lang="EN-US">&ldquo;Generate the service xml automatically&rdquo;</span>
<span style="font-family: 宋体;">；</span>
<span lang="EN-US"></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US" style="font-size: 9pt;"><!-- [if gte vml 1]><v:shape id="_x0000_i1034" type="#_x0000_t75"
 style='width:344.25pt;height:177.75pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image015.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image016.jpg" border="0" height="237" alt="" width="459" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US" style="font-size: 9pt;">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>3)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">按下一步，输入</span>
<span lang="EN-US">service</span>
<span style="font-family: 宋体;">名称和类名；</span>
<span lang="EN-US"></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US" style="font-size: 9pt;">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US" style="font-size: 9pt;"><!-- [if gte vml 1]><v:shape id="_x0000_i1035" type="#_x0000_t75"
 style='width:344.25pt;height:214.5pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image017.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image018.jpg" border="0" height="286" alt="" width="459" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US" style="font-size: 9pt;">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>4)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">按下一步，输入</span>
<span lang="EN-US">service</span>
<span style="font-family: 宋体;">文件的保存路径和文件名，完成。</span>
<span lang="EN-US"></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US" style="font-size: 9pt;">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US" style="font-size: 9pt;"><!-- [if gte vml 1]><v:shape id="_x0000_i1036" type="#_x0000_t75"
 style='width:348.75pt;height:221.25pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image019.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image020.jpg" border="0" height="295" alt="" width="465" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US" style="font-size: 9pt;">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span style="font-family: 宋体;">这里将保存路径设为</span>
<span lang="EN-US">C</span>
<span style="font-family: 宋体;">盘，文件名为</span>
<span lang="EN-US">ws</span>
<span style="font-family: 宋体;">，按完成保存成功。这时侯切换到保存路径会发现新增一文件为</span>
<span lang="EN-US">ws.aar</span>
<span style="font-family: 宋体;">，将其拷贝到</span>
<span lang="EN-US">Tomcat 5.5\webapps\axis2\WEB-INF\services</span>
<span style="font-family: 宋体;">目录下，重新打开</span>
<span lang="EN-US">http://localhost:8080/axis2/services/listService</span>
<span style="font-family: 宋体;">就会发现</span>
<span lang="EN-US">AccountService</span>
<span style="font-family: 宋体;">已经发布成功，现在就可以应用这个</span>
<span lang="EN-US">Web</span>
<span style="font-family: 宋体;">服务了。</span>
<span lang="EN-US"></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US"><!-- [if gte vml 1]><v:shape id="_x0000_i1037"
 type="#_x0000_t75" style='width:424.5pt;height:264.75pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image021.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image022.jpg" border="0" height="353" alt="" width="566" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal"><strong><span lang="EN-US" style="font-size: 9pt; font-weight: normal;">&nbsp;</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 39.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><strong><span lang="EN-US"><span>3．<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span>
</span>
</span>
</strong>
<!-- [endif]--><strong><span style="font-family: 宋体;">测试</span>
<span lang="EN-US"></span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 21.75pt;"><strong><span lang="EN-US">&nbsp;</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span style="font-family: 宋体;">通过</span>
<span lang="EN-US">WSDL</span>
<span style="font-family: 宋体;">文件生成</span>
<span lang="EN-US">CallbackHandler.java</span>
<span style="font-family: 宋体;">和</span>
<span lang="EN-US">AccountServiceStub.java</span>
<span style="font-family: 宋体;">：</span>
<strong><span> <span lang="EN-US"></span>
</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><strong><span lang="EN-US">&nbsp;</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><strong><span lang="EN-US" style="font-weight: normal;"><span>1）<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span>
</span>
</span>
</strong>
<!-- [endif]--><span lang="EN-US">New --&gt; File --&gt; Other
--&gt; Axis2 wizards --&gt; Axis2 Code Generator<strong><span style="font-weight: normal;"></span>
</strong>
</span>
</p>
<p class="MsoNormal" style="margin-left: 39.75pt;"><strong><span lang="EN-US">&nbsp;</span>
</strong>
</p>
<p class="MsoNormal" align="center" style="margin-left: 39.75pt; text-align: center;"><strong><span lang="EN-US" style="font-weight: normal;"><!-- [if gte vml 1]><v:shape id="_x0000_i1038"
 type="#_x0000_t75" style='width:344.25pt;height:249pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image023.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image024.jpg" border="0" height="332" alt="" width="459" />
<!-- [endif]--></span>
<span lang="EN-US"></span>
</strong>
</p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 9pt;">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>2）<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">选择</span>
<span lang="EN-US">Generate Java source code from a WSDL file</span>
<span style="font-family: 宋体;">，按下一步</span>
<span lang="EN-US"></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" align="center" style="margin-left: 42.75pt; text-align: center;"><strong><span lang="EN-US" style="font-size: 9pt;"><!-- [if gte vml 1]><v:shape id="_x0000_i1039"
 type="#_x0000_t75" style='width:330.75pt;height:222.75pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image025.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image026.jpg" border="0" height="297" alt="" width="441" />
<!-- [endif]--></span>
</strong>
<span lang="EN-US"></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>3）<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">按</span>
<span lang="EN-US">Browse</span>
<span style="font-family: 宋体;">选择或输入</span>
<span lang="EN-US">wsdl</span>
<span style="font-family: 宋体;">文件位置，按下一步</span>
<span> <span lang="EN-US"></span>
</span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt;"><span style="font-family: 宋体;">到现在为止，我们并未自行编写以及生成</span>
<span lang="EN-US">WSDL</span>
<span style="font-family: 宋体;">文件。当</span>
<span lang="EN-US">web service</span>
<span style="font-family: 宋体;">发布后即可通过访问</span>
<span lang="EN-US">http://localhost:8080/axis2/services/ws?wsdl</span>
<span style="font-family: 宋体;">就可以得到</span>
<span lang="EN-US">wsdl</span>
<span style="font-family: 宋体;">文件。既然如此，我们可以在地址栏中直接输入</span>
<span lang="EN-US">URL</span>
<span style="font-family: 宋体;">：</span>
<span lang="EN-US"></span>
</p>
<p class="MsoNormal" align="center" style="margin-left: 42.75pt; text-align: center;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" align="center" style="margin-left: 42.75pt; text-align: center;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" align="center" style="margin-left: 42.75pt; text-align: center;"><span lang="EN-US"><!-- [if gte vml 1]><v:shape id="_x0000_i1040"
 type="#_x0000_t75" style='width:318.75pt;height:184.5pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image027.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image028.jpg" border="0" height="246" alt="" width="425" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>4）<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">使用默认的配置，按下一步。在弹出的新窗口中，然后选择生成文件的存放路径，完成两个</span>
<span lang="EN-US">Java</span>
<span style="font-family: 宋体;">文件的生成。</span>
<span lang="EN-US"></span>
</p>
<p class="MsoNormal" align="center" style="margin-left: 42.75pt; text-align: center;"><span lang="EN-US"><!-- [if gte vml 1]><v:shape id="_x0000_i1041"
 type="#_x0000_t75" style='width:309.75pt;height:413.25pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image029.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image030.jpg" border="0" height="551" alt="" width="413" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal" align="center" style="margin-left: 42.75pt; text-align: center;"><span lang="EN-US"><!-- [if gte vml 1]><v:shape id="_x0000_i1042"
 type="#_x0000_t75" style='width:330pt;height:102.75pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image031.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image032.jpg" border="0" height="137" alt="" width="440" />
<!-- [endif]--></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US" style="font-family: 宋体;"><span>5）<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">在工程目录按</span>
<span lang="EN-US">F5</span>
<span style="font-family: 宋体;">刷新，就可以看到刚生成的文件。如图：<span lang="EN-US"></span>
</span>
</p>
<p class="MsoNormal"><span lang="EN-US" style="font-size: 9pt;">&nbsp;</span>
</p>
<p class="MsoNormal" align="center" style="text-align: center;"><strong><span lang="EN-US" style="font-size: 9pt;"><!-- [if gte vml 1]><v:shape id="_x0000_i1043"
 type="#_x0000_t75" style='width:193.5pt;height:167.25pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image033.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image034.jpg" border="0" height="223" alt="" width="258" />
<!-- [endif]--></span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 60.75pt; text-indent: -18pt;"><!-- [if !supportLists]--><span lang="EN-US"><span>6）<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;">编写服务测试程序</span>
<span lang="EN-US">WsTest.java</span>
<span style="font-family: 宋体;">如下：</span>
<span lang="EN-US"></span>
</p>
<p class="MsoNormal" style="margin-left: 42.75pt;"><span lang="EN-US">&nbsp;</span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left;"><strong><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #7f0055;">package</span>
</strong>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"> briup;</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left;"><span lang="EN-US" style="font-family: &quot;Courier New&quot;;">&nbsp;</span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left;"><strong><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #7f0055;">public</span>
</strong>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"> </span>
<strong><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #7f0055;">class</span>
</strong>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"> WsTest {</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left;"><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"><span>&nbsp;&nbsp;&nbsp; </span>
</span>
<strong><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #7f0055;">public</span>
</strong>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"> </span>
<strong><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #7f0055;">static</span>
</strong>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"> </span>
<strong><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #7f0055;">void</span>
</strong>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"> main(String[] args) </span>
<strong><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #7f0055;">throws</span>
</strong>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"> Exception {</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 98.6pt; text-align: left; text-indent: -35.7pt;"><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
WsStub stub=</span>
<strong><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #7f0055;">new </span>
</strong>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;">WsStub(</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #2a00ff;">&quot;http://localhost:8080/axis2/services/ws&quot;</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;">);</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left;"><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"><span>&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp; </span>
WsStub.SayHello sayHello=</span>
<strong><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #7f0055;">new</span>
</strong>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"> WsStub.SayHello();</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left;"><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"><span>&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp; </span>
sayHello.setUser(</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #2a00ff;">&quot;briup&quot;</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;">);</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left;"><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"><span>&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp; </span>
WsStub.SayHelloResponse res=stub.sayHello(sayHello);</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left;"><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
System.</span>
<em><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: #0000c0;">out</span>
</em>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;">.println(res.get_return());</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" align="left" style="margin-left: 63pt; text-align: left;"><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"><span>&nbsp;&nbsp;&nbsp; </span>
}</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;;"></span>
</p>
<p class="MsoNormal" style="text-indent: 63pt;"><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;">}</span>
</p>
<p class="MsoNormal" style="text-indent: 63pt;"><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;">&nbsp;</span>
</p>
<p class="MsoNormal" style="text-indent: 63pt;"><span style="font-family: 宋体; color: black;">运行结果如下：</span>
<span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;"></span>
</p>
<p class="MsoNormal" style="text-indent: 63pt;"><span lang="EN-US" style="font-family: &quot;Courier New&quot;; color: black;">&nbsp;</span>
</p>
<p class="MsoNormal" style="text-indent: 63pt;"><strong><span lang="EN-US" style="font-weight: normal;"><!-- [if gte vml 1]><v:shape id="_x0000_i1044" type="#_x0000_t75" style='width:152.25pt;
 height:89.25pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image035.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image036.jpg" border="0" height="119" alt="" width="203" />
<!-- [endif]--></span>
</strong>
</p>
<p class="MsoNormal" style="text-indent: 63pt;"><strong><span style="font-family: 宋体; font-weight: normal;">在执行的时侯，切记要将杀毒软件或防火墙软件关闭。否则执行时出现以下报错信息：</span>
</strong>
<strong><span lang="EN-US" style="font-weight: normal;"></span>
</strong>
</p>
<p class="MsoNormal" style="text-indent: 63pt;"><strong><span lang="EN-US" style="font-weight: normal;">&nbsp;</span>
</strong>
</p>
<p class="MsoNormal" align="center" style="text-align: center;"><strong><span lang="EN-US"><!-- [if gte vml 1]><v:shape
 id="_x0000_i1025" type="#_x0000_t75" style='width:453pt;height:175.5pt'>
 <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image037.png"
  o:title=""/>
</v:shape><![endif]--><!-- [if !vml]--><img src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image038.jpg" border="0" height="234" alt="" width="604" />
<!-- [endif]--></span>
</strong>
</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chineseoa.javaeye.com/blog/192018#comments" style="color:red;">已有 <strong>5</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 11 May 2008 22:27:13 +0800</pubDate>
        <link>http://chineseoa.javaeye.com/blog/192018</link>
        <guid>http://chineseoa.javaeye.com/blog/192018</guid>
      </item>
      <item>
        <title>使用Axis2 Code Generator时产生InvocationTargetException</title>
        <author>chineseoa</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chineseoa.javaeye.com">chineseoa</a>&nbsp;
          链接：<a href="http://chineseoa.javaeye.com/blog/191997" style="color:red;">http://chineseoa.javaeye.com/blog/191997</a>&nbsp;
          发表时间: 2008年05月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Axis2 Code Generator作为一个在Eclipse中使用的能自动根据WSDL生成Java文件以及根据Java文件生成WSDL的插件，安装好后使用往往会出现InvocationTargetException异常，这时可尝试：</p>
<p>1. 将backport-util-concurrent-3.1.jar从 $AXIS2_HOME\lib 处拷贝至 $ECLIPSE_HOME\plugins\Axis2_Codegen_Wizard_1.3.0\lib;</p>
<p>2. 编辑文件 $ECLIPSE_HOME\plugins\Axis2_Codegen_Wizard_1.3.0\plugin.xml, 在其中runtime元素中增加内容：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;library name=&quot;lib/backport-util-concurrent-3.1.jar&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;export name=&quot;*&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/library&gt;</p>
<p>3. 将 $workspace位置\.metadata\.plugins下目录 Axis2_Codegen_Wizard 删除</p>
<p>4. 在命令行下切换至$ECLIPSE_HOME目录，然后执行：</p>
<p>&nbsp;&nbsp;&nbsp; eclipse -clear</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chineseoa.javaeye.com/blog/191997#comments" style="color:red;">已有 <strong>3</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 11 May 2008 21:51:08 +0800</pubDate>
        <link>http://chineseoa.javaeye.com/blog/191997</link>
        <guid>http://chineseoa.javaeye.com/blog/191997</guid>
      </item>
      <item>
        <title>《WebWork in action》第十章</title>
        <author>chineseoa</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chineseoa.javaeye.com">chineseoa</a>&nbsp;
          链接：<a href="http://chineseoa.javaeye.com/blog/127599" style="color:red;">http://chineseoa.javaeye.com/blog/127599</a>&nbsp;
          发表时间: 2007年09月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          第十章： Velocity<br />
<br />
一. Velocity介绍<br />
<br />
&nbsp;&nbsp;&nbsp; Velocity是一种模板语言。<br />
&nbsp;&nbsp;&nbsp; . 模板是用做文档基础的文本，预先设置好固定的文档结构，部分内容可以替换；<br />
&nbsp;&nbsp;&nbsp; . 模板语言是一种标准的格式，用于定义文档中哪些变量需要被替换；<br />
&nbsp;&nbsp;&nbsp; Velocity不仅支持变量的替换，还支持简单的控制结构(循环和if/else语句等)。<br />
&nbsp;&nbsp;&nbsp; Velocity是一种运行期语言，JSP是一种静态的编译期语言。工具上对Velocity的支持通常是简陋的，甚至没有。<br />
<br />
&nbsp;&nbsp;&nbsp; Velocity是一种模板语言，它读入模板文件，将一些数据放入模板中，然后将最后的结果显示出来。<br />
&nbsp;&nbsp;&nbsp; . 数据来源：WebWork的值栈；<br />
<br />
&nbsp;&nbsp;&nbsp; 额外设置: <br />
<br />
&nbsp;&nbsp;&nbsp; a. xwork.xml<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; velocity result作为webwork-default.xml的一部分内容，如你的xwork.xml不包含该文件，那你必须显示定义<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 名称为velocity的result类型：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result-type name=&quot;velocity&quot; class=&quot;com.opensymphony.webwork.dispatcher.VelocityResult&quot;/&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; b. webwork.properties<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果想自行设定不同的velocity.properties文件，配置额外的Velocity Context，或支持其他JSP标签等，必须<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编辑webwork.properties文件，改写下面的值：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #velocity.properties文件的位置<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webwork.velocity.configfile=velocity.properties<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #链接至WebWork VelocityContext的VelocityContext类名列表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #列表使用逗号分隔<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webwork.velocity.contexts=<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #JSP标签包<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webwork.velocity.tag.path=com.opensymphony.webwork.views.velocity.ui<br />
<br />
&nbsp;&nbsp;&nbsp; c. velocity.properties<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Velocity的标准配置包含于velocipty.properties文件中，这个配置并不是与WebWork特定相关的。如果要指定自定义的Velocity<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 宏或者改写Velocity模板装载的方式，那么可以指定自己的配置。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另webwork.vm文件里定义了velocimacro库。我们亦可自行定义该文件。<br />
<br />
二. 基本语法和操作<br />
<br />
&nbsp;&nbsp;&nbsp; 1. 属性访问<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Velocity使用常见的点号语法(dot syntax)。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果某个Velocity表达式(如$fakeObject)返回null, 那么Velocity将直接把打表达式打印出来。如果此时不希望显示任何内容，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以使用$!fackeObject。<br />
<br />
&nbsp;&nbsp;&nbsp; 2. 方法调用<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用Collections的size()方法：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bids: $item.bids.size();<br />
<br />
&nbsp;&nbsp;&nbsp; 3. 循环语句<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 语法：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #foreach ($bid in $item.bids) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在velocity中，指令符(directives)通过井号(#)标识。循环使用内建的指令符：foreach,它通过指定一个用于循环的变量<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 名称及需要循环迭代的值($item.bids)进行工作。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例：<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;html&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;head&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;meta contentType=&quot;gbk&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历数组&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #foreach ($value in $array)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $value&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #end<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历Collection&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #foreach ($value in $list)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Name: $value.name &amp;nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Password: $value.password &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #end&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历Map&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #foreach ($value in $map.entrySet())<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $value.key,$value.value &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #end&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/html&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . $value变量在foreach指令符的参数表中被定义，而velocity使用这个变量名引用迭代过程中被迭代的对象；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . $velocityCount变量也被创建，它用于表示当前循环的计数，并且在其他任何foreach指令符中也同样适用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . 当iterator标签对Map进行循环迭代的时侯，在每次循环中被迭代的对象是Map.Entry，而在velocity中是map的值。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如希望对 Map.Entry对象进行迭代，可使用 $map.entrySet()。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; velocity并没有将值栈的概念，不过也可以手动实现将对象直接压入栈中，模拟iterator标签将每个被迭代的对象压<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 入值栈的现象：<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;html&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;head&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;meta contentType=&quot;gbk&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历数组&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #foreach ($value in $array)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $value&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #end<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历Collection&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #foreach ($value in $list)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $stack.push($value)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Name: $name &amp;nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Password: $password &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #set ($trash = $stack.pop())<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #end&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历Map&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #foreach ($value in $map.entrySet())<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $value.key,$value.value &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #end&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/html&gt;<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 4. 使用if/else指令符实现条件逻辑<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 语法：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #if($item.bids.size() &gt; 0) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例: <br />
<br />
&nbsp;&nbsp;&nbsp; &lt;html&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;head&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;meta contentType=&quot;gbk&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历数组&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #foreach ($value in $array)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $value&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #end<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历Collection&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #foreach ($value in $list)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #if($velocityCount % 2 == 0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;font color=&quot;black&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #else<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;font color=&quot;red&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #end<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Name: $value.name &amp;nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Password: $value.password &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/font&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #end&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历Map&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #foreach ($value in $map.entrySet())<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $value.key,$value.value &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #end&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/html&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过if/else指令在刚才代码基础上实现不同颜色字体显示；<br />
<br />
&nbsp;&nbsp;&nbsp; 5. 变量赋值<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在简化模板的过程中经常需要创建自有的Velocity变量，例如你并不希望在所有地方都使用$some.long.expression, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而是希望能够使用$sle作为它的别名，这时可以使用：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #set ($seller = $item.seller)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一旦采用这种方式进行变量赋值，那么对于剩下的页面，就可以直接引用$seller对象。这不仅免掉重复敲打键盘的烦恼，还<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 避免表达式被多次重复求值。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #set ($trash = $stack.pop())<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这一行代码把值栈中移出的对象赋给$trash变量。这样做的目的是需要将对象从值栈中移出，却不希望显示出来。如单纯<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $stack.pop()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ，那么移出的对象就会被打印出来。
          <br/><br/>
          <span style="color:red;">
            <a href="http://chineseoa.javaeye.com/blog/127599#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Thu, 27 Sep 2007 14:51:49 +0800</pubDate>
        <link>http://chineseoa.javaeye.com/blog/127599</link>
        <guid>http://chineseoa.javaeye.com/blog/127599</guid>
      </item>
      <item>
        <title>《WebWork in action》第九章</title>
        <author>chineseoa</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chineseoa.javaeye.com">chineseoa</a>&nbsp;
          链接：<a href="http://chineseoa.javaeye.com/blog/127460" style="color:red;">http://chineseoa.javaeye.com/blog/127460</a>&nbsp;
          发表时间: 2007年09月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          第九章： 标签库<br />
<br />
WebWork提供四类标签：<br />
<br />
. 数据标签：&nbsp; 从值栈中取数据，将数据设置到值栈；<br />
. 控制流标签：改变程序的执行流，以及基于系统的状态产生不同的输出；<br />
. UI标签：&nbsp;&nbsp;&nbsp; 主要呈现表单外观；<br />
. 杂项标签：&nbsp; 生成URL和输入国际化文本等。<br />
<br />
语法：1. 对String类型外的内容依据值栈进行求值；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 对String类型内容进行解析：WebWork查找符合%{...}样式的子串，然后对大括号间的表达式进行求值。<br />
<br />
在默认情况下，WebWork 2.1.x关没有启用新语法，通过在webwork.properties中新增一行代码实现：<br />
<br />
webwork.tag.altSyntax = true;<br />
<br />
一. 数据标签<br />
<br />
&nbsp;&nbsp;&nbsp; 1. property 标签：输出OGNL表达式的值；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; property标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型&nbsp;&nbsp; 是否必需&nbsp; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value&nbsp;&nbsp;&nbsp;&nbsp; Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 进行求值的表达式，如没设定，将会被设定为top<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果依据value属性无法得到具体值，则使用default设定的默认值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; escape&nbsp;&nbsp;&nbsp; Boolean&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否将输出内容进行HTML转义，例设为true, &amp;将转义为&amp;amp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
<br />
&nbsp;&nbsp;&nbsp; 2. set 标签：对值栈中的表达式进行求值，并将结果赋给特定作用域中的某个变量名。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型&nbsp;&nbsp; 是否必需&nbsp; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在一个指定的作用域内被赋值的变量名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value&nbsp;&nbsp;&nbsp;&nbsp; Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于赋值的表达式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scope&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可选的值为：application, session，request, page或default(即action context)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 举例：<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;%@page contentType=&quot;text/html;charset=UTF-8&quot; %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%@taglib uri=&quot;webwork&quot; prefix=&quot;ww&quot; %&gt; <br />
&nbsp;&nbsp;&nbsp; Name:&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;#session['u'].name&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; Password: &lt;ww:property value=&quot;#session.u.password&quot;/&gt;&lt;br&gt;<br />
<br />
每次都要重复使用#session['u']不仅烦人，而且容易出错。可以通过set标签定义一个临时变量，令这个变量指向user对象。<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;%@page contentType=&quot;text/html;charset=UTF-8&quot; %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%@taglib uri=&quot;webwork&quot; prefix=&quot;ww&quot; %&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;ww:set name=&quot;u&quot; value=&quot;#session.u&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; Name:&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;#u.name&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; Password: &lt;ww:property value=&quot;#u.password&quot;/&gt;&lt;br&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 3. push 标签：将对象压入值栈后直接对其进行多次操作，而不需要在每个与对象相关的表达式之前加上对象名称。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型&nbsp;&nbsp; 是否必需&nbsp; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value&nbsp;&nbsp;&nbsp;&nbsp; Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要压入值栈的树所对应的表达式<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如使用push标签，上个例子代码可进一步简化：<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;%@page contentType=&quot;text/html;charset=UTF-8&quot; %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%@taglib uri=&quot;webwork&quot; prefix=&quot;ww&quot; %&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;ww:set name=&quot;u&quot; value=&quot;#session.u&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ww:push value=&quot;#u&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; Name:&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;name&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; Password: &lt;ww:property value=&quot;password&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/ww:push&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push标签通常和JSP静态包含，实现部分代码重用；<br />
<br />
&nbsp;&nbsp;&nbsp; 4. bean 标签：创建JavaBean，压入值栈以及赋给某个变量名。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bean标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型&nbsp;&nbsp; 是否必需&nbsp; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 被创建的bean对应的包名和类名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果需在bean标签之外引用bean对象，可通过id属性设置引用名称<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;%@page contentType=&quot;text/html;charset=UTF-8&quot; %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%@taglib uri=&quot;webwork&quot; prefix=&quot;ww&quot; %&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;ww:bean name=&quot;java.util.Date&quot; id=&quot;now&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ww:bean name=&quot;com.opensymphony.webwork.util.DateFormatter&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:param name=&quot;format&quot; value=&quot;'MM/dd/yyyy'&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:param name=&quot;date&quot; value=&quot;now&quot;/&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;formattedDate&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/ww:bean&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打印输出当前日期。虽然可用DateFormatter打印出格式化的日期，还是推荐使用国际化功能实现格式化的操作。<br />
<br />
&nbsp;&nbsp;&nbsp; 5. action 标签：执行action并访问相应的数据。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action 标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型&nbsp;&nbsp; 是否必需&nbsp; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namespace String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action的namespace,默认值为当前页面所在的namespace<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 引用action bean所需的名称，便于在页面后面的部分引用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; executeResult Boolean 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为true，才执行action对应的result，默认值为false;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用action标签，可以在页面重用action输出的结果,　举例有一action往页面上输出一树形目录，该目录在多处要被使用，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以使用以下形式使用：<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:action name=&quot;categoryTree&quot; executeResult=&quot;true&quot;/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中categoryTree为action在xwork.xml中的配置名称。<br />
<br />
二. 控制标签<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; 1. iterator标签：轻松循环遍历任何对象集合，包括Collection, Map, Enumeraton, Iterator及array。同时可在action context<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中定义一个变量，用于确定与当前循环状态相关的基本信息。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iterator 标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&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; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value&nbsp;&nbsp;&nbsp;&nbsp; Collection,Map,Enumeration&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 被循环遍历的对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator或者array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; status&nbsp;&nbsp;&nbsp; String&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; 如果设置了该属性，IteratorStatus对象就会被<br />
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 置于action context中<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. action <br />
<br />
&nbsp;&nbsp;&nbsp; package ch9;<br />
<br />
&nbsp;&nbsp;&nbsp; import com.opensymphony.xwork.ActionSupport;<br />
&nbsp;&nbsp;&nbsp; import java.util.*;<br />
&nbsp;&nbsp;&nbsp; import ch4.User;<br />
<br />
&nbsp;&nbsp;&nbsp; public class IteratorTagTest extends ActionSupport {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private String[] array = {&quot;Monday&quot;,&quot;Tuesday&quot;,&quot;Wednesday&quot;,&quot;Thursday&quot;};<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private List&lt;User&gt; list;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private Map&lt;Integer, String&gt; map;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public String execute() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; list = new ArrayList&lt;User&gt;();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i=0;i&lt;10;i++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; User u = new User(&quot;user&quot;+i, &quot;resu&quot;+i);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; list.add(u);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; map = new HashMap&lt;Integer, String&gt;();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i=1;i&lt;array.length;i++) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; map.put(i, array[i]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return SUCCESS;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public String[] getArray() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return array;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void setArray(String[] array) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.array = array;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public List&lt;User&gt; getList() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return list;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void setList(List&lt;User&gt; list) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.list = list;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public Map&lt;Integer, String&gt; getMap() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return map;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void setMap(Map&lt;Integer, String&gt; map) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.map = map;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. jsp<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;%@page contentType=&quot;text/html;charset=UTF-8&quot; %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%@taglib uri=&quot;webwork&quot; prefix=&quot;ww&quot; %&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;html&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历数组&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:iterator value=&quot;array&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;top&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/ww:iterator&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历Collection&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:iterator value=&quot;list&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:push value=&quot;top&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Name: &lt;ww:property value=&quot;name&quot;/&gt;&amp;nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Password: &lt;ww:property value=&quot;password&quot;/&gt;&lt;br&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/ww:push&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/ww:iterator&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历Map&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:iterator value=&quot;map&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;key&quot;/&gt;,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;value&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/ww:iterator&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/html&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c. 显示效果：<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;ww:iterator&gt;遍历数组<br />
&nbsp;&nbsp;&nbsp; Monday<br />
&nbsp;&nbsp;&nbsp; Tuesday<br />
&nbsp;&nbsp;&nbsp; Wednesday<br />
&nbsp;&nbsp;&nbsp; Thursday<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;ww:iterator&gt;遍历Collection<br />
&nbsp;&nbsp;&nbsp; Name: user0&nbsp; Password: resu0<br />
&nbsp;&nbsp;&nbsp; Name: user1&nbsp; Password: resu1<br />
&nbsp;&nbsp;&nbsp; Name: user2&nbsp; Password: resu2<br />
&nbsp;&nbsp;&nbsp; Name: user3&nbsp; Password: resu3<br />
&nbsp;&nbsp;&nbsp; Name: user4&nbsp; Password: resu4<br />
&nbsp;&nbsp;&nbsp; Name: user5&nbsp; Password: resu5<br />
&nbsp;&nbsp;&nbsp; Name: user6&nbsp; Password: resu6<br />
&nbsp;&nbsp;&nbsp; Name: user7&nbsp; Password: resu7<br />
&nbsp;&nbsp;&nbsp; Name: user8&nbsp; Password: resu8<br />
&nbsp;&nbsp;&nbsp; Name: user9&nbsp; Password: resu9<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;ww:iterator&gt;遍历Map<br />
&nbsp;&nbsp;&nbsp; 1, Tuesday<br />
&nbsp;&nbsp;&nbsp; 2, Wednesday<br />
&nbsp;&nbsp;&nbsp; 3, Thursday<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另通过status属性，在action context中生成一个IteratorStatus对象。该对象提供诸如集合大小、当前索引，以及当前遍<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 历到的对象处于列表的单数索引位置还是双数索引位置等信息。如结合if/else标签，可实现奇数行和偶数行使用不同颜色<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 阴影的表格。<br />
<br />
&nbsp;&nbsp;&nbsp; 2. if/else标签：实现基本页面执行流及页面呈现。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if/else 标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否必需&nbsp; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Boolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于求值并返回true或false的布尔表达式<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 刚才那个JSP我们再行改一下，使对Collection遍历的内容，一行红色，一行黑色相间隔：<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&amp;lt;ww:iterator&amp;gt;遍历Collection&lt;/h3&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:iterator value=&quot;list&quot; status=&quot;status&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:if test=&quot;#status.even&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:set name=&quot;color&quot; value=&quot;'black'&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/ww:if&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:else&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:set name=&quot;color&quot; value=&quot;'red'&quot;/&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/ww:else&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;font color=&quot;&lt;ww:property value=&quot;color&quot;/&gt;&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:push value=&quot;top&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Name: &lt;ww:property value=&quot;name&quot;/&gt;&amp;nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Password: &lt;ww:property value=&quot;password&quot;/&gt;&lt;br&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/ww:push&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/font&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/ww:iterator&gt;&nbsp;&nbsp;&nbsp; <br />
<br />
三. 杂项标签<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; 1. include标签：功能与&lt;jsp:include&gt;类似，但提供了与WebWork更好的集成。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include 标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否必需&nbsp; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 页面名称，action, servlet或任何引用的URL<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . 更好的WebWork集成：可利用值栈对使用%{...}符号的内容进行求值；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . 对用户友好：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不管路径是绝对还是相对，最后均会重写为绝对的URL路径；<br />
<br />
&nbsp;&nbsp;&nbsp; 2. URL标签：生成相对或绝对路径的URL，处理参数以及对URL进行编码。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL 标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否必需&nbsp; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基本的URL。默认值为生成当前页面的URL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; includeParams&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从all,get或none中选择参数，默认值为get<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果指定了该属性，那么URL将不会输出，而是会保存于<br />
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action context, 以作后用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; includeContext&nbsp; Boolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果为true，那么生成的URL前面会加上应用程序所在的上下<br />
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文路径。默认值为false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; encode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Boolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果访问者没有启用cookie，则在URL中增加session ID.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scheme&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 让你可以指定协议，默认为当前的设置(HTTP或HTTPS)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 举例：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. 生成search.action?query=XXX, 其中XXX为表达式求值后的具体数值；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:url value=&quot;search.action&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:param name=&quot;query&quot; value=&quot;name&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ww:url&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. 包含当前页面的所有查询字符串<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; includeParams属性设置为get, WebWork包含当前页面的所有查询字符串。<br />
&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; 为none, 不包含任何参数。<br />
&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; 为all, 所有参数都可以用不着URL的生成，包括通过POST请求提交的参数。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c. 在URL前加上程序所在上下文<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 只有设定includeContext值为true，且URL为绝对路径情况下才会加上程序所在上下文。<br />
<br />
&nbsp;&nbsp;&nbsp; 3. text标签：显示特定语言的文本<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text 标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否必需&nbsp; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于在ResourceBundle中进行查找的键<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果设置该属性，文本内容将会存储在action context中，<br />
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么通过属性值的名称可以进行引用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数1(deprecated)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数2(deprecated)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数3(deprecated)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数4(deprecated)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如searchResults键对应的英文文本如下: We searched {0} items in your database and found {1} matches. 那么可<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过以下内容进行获取内容：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:text name=&quot;searchResults&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:param value=&quot;totalItems&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:param value=&quot;searchCount&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ww:text&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么第一个param的值对应参数{0}，第二个param的值对应参数{1}。<br />
<br />
&nbsp;&nbsp;&nbsp; 4. i18n标签：将某个资源包的内容压入栈中，让你可以在标签内部访问与资源包相关的i18n的资源<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i18n 标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否必需&nbsp; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 资源(resource boundle)的名称<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:i18n name=&quot;org.hibernate.auction.myBundle&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:text name=&quot;someKey&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ww:i18n&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 代码将从myBundle这个资源包中查找someKey对应的文本，而不是默认的资源包。<br />
<br />
&nbsp;&nbsp;&nbsp; 5. param标签：辅助其他标签，实现参数内容传递；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; param 标签的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否必需&nbsp; 描述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 应用于像URL或者action这样的父标签的参数名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个OGNL表达式，结果为被应用的值<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . 除了text标签外，其他标签使用参数的时侯都依照键/值对的形式；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . 使用标签内容的内容进行设置，这种途径并不能为value属性赋值一个OGNL的表达式，只会被作为一个String<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的参数值；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:text name=&quot;searchResults&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:param&gt;over 5 million&lt;/ww:param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:param value=&quot;searchCount&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ww:text&gt;
          <br/><br/>
          <span style="color:red;">
            <a href="http://chineseoa.javaeye.com/blog/127460#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Thu, 27 Sep 2007 09:49:35 +0800</pubDate>
        <link>http://chineseoa.javaeye.com/blog/127460</link>
        <guid>http://chineseoa.javaeye.com/blog/127460</guid>
      </item>
      <item>
        <title>《WebWork in action》第八章</title>
        <author>chineseoa</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chineseoa.javaeye.com">chineseoa</a>&nbsp;
          链接：<a href="http://chineseoa.javaeye.com/blog/127295" style="color:red;">http://chineseoa.javaeye.com/blog/127295</a>&nbsp;
          发表时间: 2007年09月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          第八章： 利用表达式语言获取数据<br />
<br />
WebWork的EL-对象图导航语言(Object Graph Navigation Language, 缩写为OGNL)是作为Web页面脚本的最佳选择。<br />
<br />
一. 基本特性<br />
<br />
&nbsp;&nbsp;&nbsp; 1. 访问bean属性<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据JavaBean的规范，bean属性使用诸如getXxx(), setXxx(), isXxx()或者hasXxx()这样标准形式的getter方法或<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setter方法。其中, isXxx()和hasXxx()形式用于boolean属性。在WebWork中，访问这些属性(不管是获取数据还是<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置数据)都使用形式为xxx的属性引用。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例：<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. action <br />
<br />
&nbsp;&nbsp;&nbsp; package ch8;<br />
<br />
&nbsp;&nbsp;&nbsp; import ch4.User;<br />
&nbsp;&nbsp;&nbsp; import com.opensymphony.xwork.ActionSupport;<br />
<br />
&nbsp;&nbsp;&nbsp; public class OgnlTest extends ActionSupport{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private User user;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public String execute() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; user = new User();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; user.setName(&quot;zs&quot;);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; user.setPassword(&quot;password&quot;);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return SUCCESS;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //setter和getter方法<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. result<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;action name=&quot;ognlTest&quot; class=&quot;ch8.OgnlTest&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;result name=&quot;success&quot;&gt;ognl.jsp&lt;/result&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/action&gt;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c. jsp<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;%@page contentType=&quot;text/html;charset=UTF-8&quot; %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%@taglib uri=&quot;webwork&quot; prefix=&quot;ww&quot; %&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;html&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;user.name&quot;/&gt;&nbsp;&nbsp;&nbsp; &lt;!--其中value中内容为ognl表达式--&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;user.password&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/html&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 2. 常量<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OGNL表达式常量与EL类型，<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 常量类型&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 范例<br />
&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; --------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 'a'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;hello world&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; true false<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另String常量可以使用单引号或双引号括起来，示例：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;\&quot;a\&quot;&quot;/&gt;并不等同于 &lt;ww:property value='a'/&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 3. 操作符<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OGNL支持所有Java操作<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运算&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 范例<br />
&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; --------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 递增&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ++foo<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 递减&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; foo++<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 等于&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; foo == bar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不等于&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; foo != bar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in&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; foo in someList<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; not in&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; foo not in someList<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 赋值(=)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; foo = 123<br />
<br />
&nbsp;&nbsp;&nbsp; 4. 方法调用<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供调用非属性相关的方法；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例：假设ch4.User类中有一方法(静态方法亦可) : <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String sayHello() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &quot;hello world&quot;;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用以下形式可以在浏览器上输出：hello world<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;user.sayHello()&quot;/&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 5. 设置数值及表达式列表<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在单条语句当中执行以逗号分隔的多个表达式，最后一个表达式的返回值作为整条语句的输出结果。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如foo值为123，而bar值为789，则以下形式输入 789: <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;foo,bar&quot;/&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 6. 访问静态方法和类变量<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用@[className]@[Field Or Method]调用静态类变量和方法，类名必须使用包括包在内的完整类名；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例：假设ch4.User类中有一方法(静态方法亦可) : <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static String sayHello() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &quot;hello world&quot;;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用以下形式可以在浏览器上输出：hello world<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;@ch4.User@sayHello()&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另OGNL也可使用vs(vs代表Value Stack，就是值栈)前缀调用保存于值栈中的类的静态属性和静态方法；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:property value=&quot;@vs@sayHello()&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般来说，只有在一直了解值栈中包含什么对象的情况下，使用vs的形式才是有用的，否则建议使用完整的包<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 名和类名比较好。<br />
<br />
&nbsp;&nbsp;&nbsp; 7. 访问OGNL上下文及ActionContext<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java代码：&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OGNL表达式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -------------------------------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionContext().getContext().getParameters()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #parameters<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionContext().getContext().getParameters().size()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #parameters.size<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((Kermit)ActionContext().getContext().get(&quot;kermit&quot;)).getAge()&nbsp;&nbsp; #kermit.age<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebWork中另提供一些更短标识符方便访问：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . parameters :&nbsp;&nbsp;&nbsp; 一个包含当前请求中所有HttpServletRequest参数的map;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . request&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp; 一个包含当前请求中所有HttpServletRequest属性的map;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . session&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp; 一个包含当前请求中所有HttpSession属性的map;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . application:&nbsp;&nbsp;&nbsp; 一个包含当前请求中所有ServletContext属性的map;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . attr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp; 一个依次从请求、会话和应用程序的Map中搜索属性的map;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. action <br />
<br />
&nbsp;&nbsp;&nbsp; package ch8;<br />
<br />
&nbsp;&nbsp;&nbsp; import javax.servlet.ServletContext;<br />
&nbsp;&nbsp;&nbsp; import javax.servlet.http.HttpServletRequest;<br />
&nbsp;&nbsp;&nbsp; import javax.servlet.http.HttpSession;<br />
<br />
&nbsp;&nbsp;&nbsp; import com.opensymphony.webwork.interceptor.ServletRequestAware;<br />
&nbsp;&nbsp;&nbsp; import com.opensymphony.xwork.ActionSupport;<br />
<br />
&nbsp;&nbsp;&nbsp; public class ScopeTest extends ActionSupport implements ServletRequestAware{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private HttpServletRequest request;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void setServletRequest(HttpServletRequest arg0) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; request = arg0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public String execute() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; HttpSession session = request.getSession();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ServletContext context = session.getServletContext();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; request.setAttribute(&quot;req&quot;,&quot;request0&quot;);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; session.setAttribute(&quot;ses&quot;,&quot;session1&quot;);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; context.setAttribute(&quot;app&quot;,&quot;application2&quot;);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return SUCCESS;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. result<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;action name=&quot;scopeTest&quot; class=&quot;ch8.ScopeTest&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;result name=&quot;success&quot;&gt;scopeTest.jsp&lt;/result&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c. jsp<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;%@page contentType=&quot;text/html;charset=UTF-8&quot; %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%@taglib uri=&quot;webwork&quot; prefix=&quot;ww&quot; %&gt; <br />
&nbsp;&nbsp;&nbsp; Request parameter: &lt;ww:property value=&quot;#parameters['name']&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; Request attribute: &lt;ww:property value=&quot;#request['req']&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; Session attribute: &lt;ww:property value=&quot;#session.ses&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; Application attribute: &lt;ww:property value=&quot;#application.app&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; Request attribute: &lt;ww:property value=&quot;#attr.req&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; Session attribute: &lt;ww:property value=&quot;#attr.ses&quot;/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; Application attribute: &lt;ww:property value=&quot;#attr.app&quot;/&gt;&lt;br&gt;<br />
<br />
二. 操作集合(Collections)<br />
<br />
&nbsp;&nbsp;&nbsp; 1. 操作列表(list)和数组(array)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java代码&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; OGNL表达式<br />
&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; ----------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.get(0)&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; list[0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array[0]&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; array[0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((User)list.get(0)).getName()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list[0].name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array.length&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; array.length<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.size()&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; list.size<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.isEmpty()&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; list.isEmpty<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 除了访问列表的数值外，OGNL还可以动态地创建列表：使用大括号将元素括起来，元素间使用逗号分隔。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java代码&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; OGNL表达式<br />
&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; ----------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list = new ArrayList(3);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {1,3,5}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add(3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add(5);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return list;<br />
&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; ----------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list = new ArrayList(2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&quot;foo&quot;,&quot;bar&quot;}[1]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add(&quot;foo&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add(&quot;bar&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return list.get(1);&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 2. 操作Map<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java代码&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; OGNL表达式<br />
&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; ----------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.get(&quot;foo&quot;)&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; map['foo']<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.get(new Integer(1))&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; map[1]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user = (User)map.get(&quot;zs&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map['zs'].name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return user.getName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put(&quot;foo&quot;,&quot;bar&quot;);&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; map['foo']='bar'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.size();&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; map.size<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.isEmpty();&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; map.isEmpty<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 除了访问Map的数值外，OGNL还可以动态地创建Map。必须在左边的大括号之前放置一个#号。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java代码&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; OGNL表达式<br />
&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; ----------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map map = new HashMap(2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #{&quot;foo&quot;:&quot;bar&quot;,&quot;baz&quot;:&quot;whazzit&quot;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put(&quot;foo&quot;,&quot;bar&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put(&quot;baz&quot;,&quot;whazzit&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return map;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map map = new HashMap(2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #{1:&quot;one&quot;,2:&quot;two&quot;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put(new Integer(1),&quot;one&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put(new Integer(2),&quot;two&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return map; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map map = new HashMap(2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #{#user1.name:#user1.mother.name,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put(user1.getName(),user1.getMother()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #user2.name:#user2.mother.name}<br />
&nbsp;&nbsp;&nbsp; .getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put(user2.getName(),user2.getMother()<br />
&nbsp;&nbsp;&nbsp; .getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return map; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionContext.getContext().&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #parameters['id']<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getParameters().get(&quot;id&quot;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String name = user.getName();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #session[&quot;user-&quot;+name]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map map = ActionContext.getContext()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return map.get(&quot;user-&quot;+name);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.put(&quot;user&quot;,user);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #session['user'] = user<br />
<br />
&nbsp;&nbsp;&nbsp; 3. 对集合进行筛选(filtering)和投影(projecting)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 筛选：以一个集合为基础生成一个新集合的技术，而新集合中只包含可以通过筛选的对象。语法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collection.{? expression}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上expression是真正意义上的筛选器, 会对集合中的每个对象进行求值。而#this这个特殊的变量<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 则是用于标识正在进行求值的对象。例，要从Kemit的孩子们中筛选出年龄等于2或者小于2的孩子，表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 达式为：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #this.age &lt;= 2<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 投影：根据投影规则对集合中的元素进行转换。语法：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collection.{ expression }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中expression用来对原始集合中被循环迭代到的对象进行求值。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 筛选返回的集合中的元素与原始集合中的是一样的，但数量有可能要少；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 投影返回的集合中的元素与原始集合中的有可能不一样，但数量一样多；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 示例：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OGNL表达式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&