<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>moutan</title>
    <description></description>
    <link>http://chenshuang.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>善良的爱心</title>
        <author>chenshuang1227</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenshuang.javaeye.com">chenshuang1227</a>&nbsp;
          链接：<a href="http://chenshuang.javaeye.com/blog/193597" style="color:red;">http://chenshuang.javaeye.com/blog/193597</a>&nbsp;
          发表时间: 2008年05月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>一个很小的问题，乘以13亿，都会变成一个大问题；<br />一个很大的总量，除以13亿，都会变成一个小数目。<br />现在我们要说：<br />一点很小的善心，乘以13亿，都会变成爱的海洋；<br />一个很大的困难，除以13亿，都会变得微不足道。</p>
<p>让我们为所有受灾的人祝福，希望你们平安。</p>
          <br/>
          <span style="color:red;">
            <a href="http://chenshuang.javaeye.com/blog/193597#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><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><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 16 May 2008 12:39:08 +0800</pubDate>
        <link>http://chenshuang.javaeye.com/blog/193597</link>
        <guid>http://chenshuang.javaeye.com/blog/193597</guid>
      </item>
      <item>
        <title>struts配置</title>
        <author>chenshuang1227</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenshuang.javaeye.com">chenshuang1227</a>&nbsp;
          链接：<a href="http://chenshuang.javaeye.com/blog/136575" style="color:red;">http://chenshuang.javaeye.com/blog/136575</a>&nbsp;
          发表时间: 2007年10月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div align="center"><strong><span style="FONT-SIZE: 22pt"><font size="3" face="Times New Roman">Struts.xml</font></span></strong></div>
<div><strong><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体"><font size="3">包含配置</font></span></strong></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">在默认的情况下，</span><font face="Times New Roman">Struts2</font><span style="FONT-FAMILY: 宋体">将自动加载放在</span><font face="Times New Roman">WEB-INF/classes</font><span style="FONT-FAMILY: 宋体">路径下的</span><font face="Times New Roman">struts.xml</font><span style="FONT-FAMILY: 宋体">文件。大部分应用里，随着应用的规模的增加，系统的</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">数量大量增加，导致了</span><font face="Times New Roman">struts.xml</font><span style="FONT-FAMILY: 宋体">配置文件变得非常臃肿。</span></font></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">为了避免这种情况，可以将一个</span><font face="Times New Roman">struts.xml</font><span style="FONT-FAMILY: 宋体">文件分解成多个配置文件，然后在</span><font face="Times New Roman">struts.xml</font><span style="FONT-FAMILY: 宋体">文件中包含其他配置文件。比如说：在</span><font face="Times New Roman">struts.xml</font><span style="FONT-FAMILY: 宋体">文件中使用以下配置方式</span></font></div>
<div><font size="3" face="Times New Roman">&lt;include file=&rdquo;struts-mod1.xml&rdquo; /&gt;</font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">通过这种方式提供了一种模块化的方式来管理</span><font face="Times New Roman">struts.xml</font><span style="FONT-FAMILY: 宋体">文件。</span></font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">另外，在</span><font face="Times New Roman">core</font><span style="FONT-FAMILY: 宋体">的根目录下有一个</span><font face="Times New Roman">struts-default.xml</font><span style="FONT-FAMILY: 宋体">文件，注意，这个文件是自动加载的，不需要在我们的</span><font face="Times New Roman">struts.xml</font><span style="FONT-FAMILY: 宋体">文件中用</span><font face="Times New Roman">include</font><span style="FONT-FAMILY: 宋体">导入。</span></font></div>
<div><font size="3">&nbsp;</font></div>
<div><font size="3"><strong><span style="FONT-SIZE: 16pt"><font face="Times New Roman">Bean</font></span></strong><strong><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体">的配置</span></strong></font></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">一般这个元素不需要我们进行配置，只是需要重新定义</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">的核心组件的时候才需要使用到这个元素。</span></font></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><font face="Times New Roman">Struts2</font><span style="FONT-FAMILY: 宋体">框架是一个可以高度扩展的框架，框架的大部分核心组件，都是通过</span><font face="Times New Roman">IOC</font><span style="FONT-FAMILY: 宋体">容器来进行管理的。因此，允许开发者可以很方便的提供自己的组件实现类，并将组件类部署到</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">就</span><font face="Times New Roman">OK</font><span style="FONT-FAMILY: 宋体">了。</span></font></div>
<div style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体"><font size="3">这个标记很不常用，如果需要可以查看帮助。</font></span></div>
<div style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体"><font size="3">不过这里举个例子：</font></span></div>
<div style="TEXT-INDENT: 21pt"><font size="3" face="Times New Roman">&lt;bean type=&rdquo;com.opensymphony.xwork2.ObjectFactory&rdquo; name=&rdquo;caFactory&rdquo; class=&rdquo;cc.dynasoft.MyObject&rdquo; /&gt;</font></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">以上代码的作用是使用一个自己定义的</span><font face="Times New Roman">ObjectFactory</font><span style="FONT-FAMILY: 宋体">来替换了</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">内置的</span><font face="Times New Roman">object</font><span style="FONT-FAMILY: 宋体">。</span></font></div>
<div><strong><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体"><font size="3">常量配置</font></span></strong></div>
<div><font size="3"><font face="Times New Roman">Struts</font><span style="FONT-FAMILY: 宋体">有一个属性文件，</span><font face="Times New Roman">struts.properties</font><span style="FONT-FAMILY: 宋体">，实际上这个配置文件是指定</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">的属性。而常量配置就是指定</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">属性的一种方式。例子：</span></font></div>
<div><font size="3" face="Times New Roman">&lt;constant name=&rdquo;struts.custom.i18n.resources&rdquo; value=&rdquo;message&rdquo; /&gt;</font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">以上用于指定国际化资源文件的前缀名是</span><font face="Times New Roman">message</font><span style="FONT-FAMILY: 宋体">，当然也可以在</span><font face="Times New Roman">struts.properties</font><span style="FONT-FAMILY: 宋体">中配置，如下：</span></font></div>
<div><font size="3" face="Times New Roman">struts.custom.i18n.resources=message</font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">也可以在</span><font face="Times New Roman">web.xml</font><span style="FONT-FAMILY: 宋体">中进行配置：</span></font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">作为</span><font face="Times New Roman">FilterDispatcher</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">init-param</font></font></div>
<div><font size="3" face="Times New Roman">&lt;param-name&gt; struts.custom.i18n.resources&lt;/param-name&gt;</font></div>
<div><font size="3" face="Times New Roman">&lt;param-value&gt;message&lt;/param-value&gt;</font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">以下是加载</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">常量的搜索顺序：</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt"><font size="3"><font face="Times New Roman"><span>1、<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span>struts-default.xml</font><span style="FONT-FAMILY: 宋体">中</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt"><font size="3"><font face="Times New Roman"><span>2、<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span>struts-plugin.xml</font><span style="FONT-FAMILY: 宋体">中</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt"><font size="3"><font face="Times New Roman"><span>3、<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span>struts.xml</font><span style="FONT-FAMILY: 宋体">中</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt"><font face="Times New Roman"><font size="3"><span>4、<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span>struts.properties</font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt"><font size="3"><font face="Times New Roman"><span>5、<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span>web.xml</font><span style="FONT-FAMILY: 宋体">中</span></font></div>
<p><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'"><br clear="all" />
<font size="3"></font></span></p>
<div><strong><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体"><font size="3">包配置</font></span></strong></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><font face="Times New Roman">Struts2</font><span style="FONT-FAMILY: 宋体">使用</span><font face="Times New Roman">package</font><span style="FONT-FAMILY: 宋体">来管理</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">和拦截器等。配置该包时，必须指定一个</span><font face="Times New Roman">name</font><span style="FONT-FAMILY: 宋体">属性，用于指定包名，可以指定一个可选的</span><font face="Times New Roman">extends</font><span style="FONT-FAMILY: 宋体">属性，是另一个包的名字，子包可以继承父包的拦截器，拦截器栈、</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">等配置。除此之外，</span><font face="Times New Roman">struts</font><span style="FONT-FAMILY: 宋体">还提供了一个抽象包，抽象包的含义是该包不能有</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">的定义。设置</span><font face="Times New Roman">abstract=&rdquo;true&rdquo;</font><span style="FONT-FAMILY: 宋体">说明这是一个抽象包。</span></font></div>
<div style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体"><font size="3">以下是一个例子：</font></span></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><font face="Times New Roman">&lt;package name=&rdquo;mod1&rdquo; extends=&rdquo;struts-default&rdquo; /&gt; </font><span style="FONT-FAMILY: 宋体">其中</span><font face="Times New Roman">struts-default</font><span style="FONT-FAMILY: 宋体">是</span><font face="Times New Roman">struts-default.xml</font><span style="FONT-FAMILY: 宋体">提供的包。</span></font></div>
<div style="TEXT-INDENT: 21pt"><font size="3">&nbsp;</font></div>
<div style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体"><font size="3">另一个比较重要的概念就是命名空间：</font></span></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">考虑在一个</span><font face="Times New Roman">web</font><span style="FONT-FAMILY: 宋体">应用中需要同名的</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">，</span><font face="Times New Roman">struits2</font><span style="FONT-FAMILY: 宋体">以命名空间的方式来管理</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">，同一个命名空间不能有同名的</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">，不同的命名空间可以有同名的</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">。如果不指定命名空间，则默认的命名空间是</span><font face="Times New Roman">&rdquo;&rdquo;</font><span style="FONT-FAMILY: 宋体">，指定了命名空间之后，</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">URL</font><span style="FONT-FAMILY: 宋体">应该是命名空间</span><font face="Times New Roman">+Action</font><span style="FONT-FAMILY: 宋体">名。</span></font></div>
<div style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体"><font size="3">比如说：</font></span></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><font face="Times New Roman">&lt;action name=&rdquo;register&rdquo; extends=&rdquo;struts-default&rdquo; namespace=&rdquo;/user&rdquo; &gt;</font><span style="FONT-FAMILY: 宋体">&hellip;&hellip;</span><font face="Times New Roman">&lt;/action&gt;</font></font></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">则对应的</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">应该是</span><font face="Times New Roman">/user/register.action</font><span style="FONT-FAMILY: 宋体">。</span></font></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">如果</span><font face="Times New Roman">namespace=&rdquo;/&rdquo;</font><span style="FONT-FAMILY: 宋体">，说明这是一个根命名空间。</span></font></div>
<div style="TEXT-INDENT: 21pt"><font size="3">&nbsp;</font></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">如果指定了命名空间，但是在该命名空间中找不到该</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">，</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">将会在默认的命名空间中继续查找，如果还找不到，则出现系统错误。</span></font></div>
<div style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体"><font size="3">比如说：</font></span></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">请求</span><font face="Times New Roman">/order/save.action</font><span style="FONT-FAMILY: 宋体">，系统首先在命名空间</span><font face="Times New Roman">/order</font><span style="FONT-FAMILY: 宋体">中查找，如果找到，使用该</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">进行处理，否则，系统将到默认的命名空间中查找，如果两个命名空间都找不到，出现系统错误。</span></font></div>
<div><font size="3">&nbsp;</font></div>
<div><strong><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体"><font size="3">拦截器配置</font></span></strong></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">拦截器实际上思想就是</span><font face="Times New Roman">AOP</font><span style="FONT-FAMILY: 宋体">，我们可以使用拦截器跟踪日志、跟踪系统性能瓶颈等。</span></font></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">拦截器的配置无非就是声明拦截器、引用拦截器以及声明拦截器栈。可以认为拦截器栈是由多个拦截器组成的一个大的拦截器。</span></font></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">定义拦截器和拦截器栈都在</span><font face="Times New Roman">&lt;interceptors /&gt;</font><span style="FONT-FAMILY: 宋体">这个标记内</span></font></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">以下是一个例子：</span></font></div>
<div><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;interceptors&gt;</font></span></font></div>
<div><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;interceptor name=&rdquo;log&rdquo; class=&rdquo;cc.dynasoft.LogInterceptor&rdquo; /&gt;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><font size="3" face="Times New Roman">&lt;interceptor name=&rdquo;authority&rdquo; class=&rdquo;cc.dynasoft. Authority Interceptor&rdquo; /&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><font size="3" face="Times New Roman">&lt;interceptor name=&rdquo;timer&rdquo; class=&rdquo;cc.dynasoft.TimerInterceptor&rdquo; /&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><font size="3" face="Times New Roman">&lt;interceptor-stack name=&rdquo;default&rdquo;&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;interceptor-ref name=&rdquo; authority&rdquo; /&gt;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: 21pt"><font size="3" face="Times New Roman">&lt;interceptor-ref name=&rdquo; timer&rdquo; /&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><font size="3" face="Times New Roman">&lt;/interceptor&gt;</font></div>
<div><font size="3">&nbsp;</font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">引用拦截器是在</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">中引用的：例子：</span></font></div>
<div><font size="3" face="Times New Roman">&lt;action name=&rdquo;login&rdquo; class=&rdquo;cc.dynasoft.LoginAction&rdquo;&gt;</font></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">&hellip;&hellip;</span></font></div>
<div><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;interceptor-ref name=&rdquo;log&rdquo; /&gt;</font></span></font></div>
<div><font size="3" face="Times New Roman">&lt;/action&gt;</font></div>
<div><font size="3">&nbsp;</font></div>
<div><font size="3"><strong><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体">配置</span></strong><strong><span style="FONT-SIZE: 16pt"><font face="Times New Roman">Action</font></span></strong></font></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">实际上配置</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">很简单，就使用</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">标签就</span><font face="Times New Roman">OK</font><span style="FONT-FAMILY: 宋体">了，</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">标签有两个重要属性：</span><font face="Times New Roman">name</font><span style="FONT-FAMILY: 宋体">和</span><font face="Times New Roman">class</font><span style="FONT-FAMILY: 宋体">，</span><font face="Times New Roman">name</font><span style="FONT-FAMILY: 宋体">是必须指定的，他既是</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">的名字，也是该</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">需要处理的</span><font face="Times New Roman">URL</font><span style="FONT-FAMILY: 宋体">的前半部分。如果</span><font face="Times New Roman">class</font><span style="FONT-FAMILY: 宋体">没有指定，默认是</span><font face="Times New Roman">ActionSupport</font><span style="FONT-FAMILY: 宋体">。而</span><font face="Times New Roman">ActionSupport</font><span style="FONT-FAMILY: 宋体">默认处理就是返回一个</span><font face="Times New Roman">SUCCESS</font><span style="FONT-FAMILY: 宋体">字符串。</span></font></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><font face="Times New Roman">struts</font><span style="FONT-FAMILY: 宋体">的全局配置文件中有一个属性：</span><font face="Times New Roman">struts.enable.SlashesInActionNames</font><span style="FONT-FAMILY: 宋体">如果设置为</span><font face="Times New Roman">true</font><span style="FONT-FAMILY: 宋体">，允许</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">框架中使用斜线。</span></font></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><strong><font face="Times New Roman">Action</font></strong><strong><span style="FONT-FAMILY: 宋体">中直接访问</span><font face="Times New Roman">servlet API</font></strong><span style="FONT-FAMILY: 宋体">有以下两种方法：</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt"><span><font size="3" face="Times New Roman">1、<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></font></span><font size="3"><span style="FONT-FAMILY: 宋体">如果需要访问</span><font face="Times New Roman">ServletContext</font><span style="FONT-FAMILY: 宋体">，</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">类需要实现接口</span><font face="Times New Roman">ServletContextAware</font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3"><span style="FONT-FAMILY: 宋体">如果需要访问</span><font face="Times New Roman"> HttpServletRequest</font><span style="FONT-FAMILY: 宋体">，</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">类需要实现接口</span><font face="Times New Roman">ServletRequestAware</font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3"><span style="FONT-FAMILY: 宋体">如果需要访问</span><font face="Times New Roman"> HttpServletResponse</font><span style="FONT-FAMILY: 宋体">，</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">类需要实现接口</span><font face="Times New Roman">ServletResponseAware</font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3"><span style="FONT-FAMILY: 宋体">以下是例子代码，主要用于访问</span><font face="Times New Roman">Reponse</font><span style="FONT-FAMILY: 宋体">对象：</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3" face="Times New Roman">public class LoginAction implements Action,ServletResponseAware</font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3" face="Times New Roman">{</font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private HttpServletResponse response;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</font></span><font size="3"><span style="FONT-FAMILY: 宋体">实现</span><font face="Times New Roman">ServletResponseAware</font><span style="FONT-FAMILY: 宋体">接口必须实现的方法</span></font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><span><font size="3" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String execute() throw Exception</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cookie c = new Cookie(&ldquo;user&rdquo;,getUsername());</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.setMaxAge(60*60);//</font></span><span style="FONT-FAMILY: 宋体"><font size="3">最大生存时间</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.addCookie(c);</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return SUCCESS;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3" face="Times New Roman">}</font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt"><font size="3"><font face="Times New Roman"><span>2、<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span>struts2</font><span style="FONT-FAMILY: 宋体">提供了一个</span><font face="Times New Roman">ServletActionContext</font><span style="FONT-FAMILY: 宋体">，这个类包含了访问</span><font face="Times New Roman">request</font><span style="FONT-FAMILY: 宋体">，</span><font face="Times New Roman">response</font><span style="FONT-FAMILY: 宋体">等静态方法。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">注意：即使我们在</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">中获得了</span><font face="Times New Roman">HttpServletResponse</font><span style="FONT-FAMILY: 宋体">对象，也不要尝试直接在</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">中生成对客户端的输出。比如：下面代码是没有实际意义的，即</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3" face="Times New Roman">response.getWriter().println(&ldquo;hello world!&rdquo;);</font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3"><strong><span style="FONT-FAMILY: 宋体">动态方法调用（类似</span><font face="Times New Roman">struts1</font></strong><strong><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">DispatchAction</font></strong><strong><span style="FONT-FAMILY: 宋体">）</span></strong></font></div>
<div style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体"><font size="3">其实没有什么特别的地方，只是提交表单的时候需要使用如下的格式：</font></span></div>
<div style="TEXT-INDENT: 21pt"><font size="3" face="Times New Roman">action=&rdquo;ActionName!MethodName.action&rdquo;</font></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">举个例子：</span><font face="Times New Roman">action=&rdquo;Login!regist.action&rdquo;,</font><span style="FONT-FAMILY: 宋体">这句话的实质就是交给</span><font face="Times New Roman">Login Action</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">regist</font><span style="FONT-FAMILY: 宋体">方法进行处理</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3">&nbsp;</font></div>
<div style="TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">使用动态方法调用前必须设置</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">允许动态方法调用。开启系统的动态方法调用是通过设置</span><font face="Times New Roman">struts.enable.DynamicMethodInvocation</font><span style="FONT-FAMILY: 宋体">常量完成的，设置该常量的值为</span><font face="Times New Roman">true</font><span style="FONT-FAMILY: 宋体">，将开启动态方法调用；否则将关闭动态方法调用。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3"><strong><span style="FONT-FAMILY: 宋体">为</span><font face="Times New Roman">action</font></strong><strong><span style="FONT-FAMILY: 宋体">元素指定</span><font face="Times New Roman">method</font></strong><strong><span style="FONT-FAMILY: 宋体">属性</span></strong></font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><strong><font size="3">&nbsp;</font></strong></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">对</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">进行如下的配置：</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3" face="Times New Roman">&lt;action name=&rdquo;Login&rdquo; class=&rdquo;cc.dynasoft.LoginAction&rdquo; method=&rdquo;login&rdquo; /&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">&hellip;&hellip;</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3" face="Times New Roman">&lt;/action&gt;</font></div>
<div><span><font size="3" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3" face="Times New Roman">&lt;action name=&rdquo;Regist&rdquo; class=&rdquo;cc.dynasoft.LoginAction&rdquo; /&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">&hellip;&hellip;</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3" face="Times New Roman">&lt;/action&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3"><span style="FONT-FAMILY: 宋体">查看以上两个</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">，默认的情况是</span><font face="Times New Roman">Regist</font><span style="FONT-FAMILY: 宋体">，而当</span><font face="Times New Roman">Login</font><span style="FONT-FAMILY: 宋体">的时候，将提交到</span><font face="Times New Roman">LoginAction</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">login</font><span style="FONT-FAMILY: 宋体">中。查看上面的两个</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">，</span><font face="Times New Roman">class</font><span style="FONT-FAMILY: 宋体">都是一样的，于是就出现了下面的使用通配符的概念。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 39pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><strong><span style="FONT-FAMILY: 宋体"><font size="3">使用通配符</font></span></strong></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">在配置</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">的时候，</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">的三个属性</span><font face="Times New Roman">name</font><span style="FONT-FAMILY: 宋体">、</span><font face="Times New Roman">class</font><span style="FONT-FAMILY: 宋体">和</span><font face="Times New Roman">method</font><span style="FONT-FAMILY: 宋体">都可以使用通配符。</span></font></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">以下举例说明：</span></font></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">例</span><font face="Times New Roman">1</font><span style="FONT-FAMILY: 宋体">：</span><font face="Times New Roman">&lt;action name=&rdquo;*Action&rdquo; class=&rdquo;cc.dynasoft.LoginAction&rdquo; method=&rdquo;{1}&rdquo;&gt;</font></font></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">&hellip;&hellip;</span></font></div>
<div><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3"><span style="FONT-FAMILY: 宋体">解释一下上面代码的含义：上面定义的不是一个普通的</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">，而是定义了一系列的</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">，只要</span><font face="Times New Roman">URL</font><span style="FONT-FAMILY: 宋体">是</span><font face="Times New Roman">*Action.action</font><span style="FONT-FAMILY: 宋体">的模式，都可以通过该</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">进行处理。但该</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">定义了一个表达式</span><font face="Times New Roman">{1}</font><span style="FONT-FAMILY: 宋体">，该表达式的值就是</span><font face="Times New Roman">name</font><span style="FONT-FAMILY: 宋体">属性值中的第一个</span><font face="Times New Roman">*</font><span style="FONT-FAMILY: 宋体">的值。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3"><span style="FONT-FAMILY: 宋体">例如，如果用户请求的</span><font face="Times New Roman">URL</font><span style="FONT-FAMILY: 宋体">是</span><font face="Times New Roman">loginAction.action</font><span style="FONT-FAMILY: 宋体">，则调用该</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">login</font><span style="FONT-FAMILY: 宋体">方法；如果用户请求的</span><font face="Times New Roman">URL</font><span style="FONT-FAMILY: 宋体">是</span><font face="Times New Roman">registAction.action</font><span style="FONT-FAMILY: 宋体">，则调用该</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">regist</font><span style="FONT-FAMILY: 宋体">方法。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 42pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3"><span style="FONT-FAMILY: 宋体">例</span><font face="Times New Roman">2</font><span style="FONT-FAMILY: 宋体">：</span><font face="Times New Roman">&lt;action name=&rdquo;*Action&rdquo; class=&rdquo;cc.dynasoft.{1}Action&rdquo;&gt;</font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</font></span><span style="FONT-FAMILY: 宋体"><font size="3">&hellip;&hellip;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><span><font size="3" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3"><span style="FONT-FAMILY: 宋体">比如说：如果</span><font face="Times New Roman">URL</font><span style="FONT-FAMILY: 宋体">为</span><font face="Times New Roman">RegistAction.action</font><span style="FONT-FAMILY: 宋体">，可以匹配上面的</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">，该</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">的处理类是</span><font face="Times New Roman">cc.dynasoft.RegistAction</font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3"><span style="FONT-FAMILY: 宋体">例</span><font face="Times New Roman">3</font><span style="FONT-FAMILY: 宋体">：</span><font face="Times New Roman">&lt;action name=&rdquo;*_*&rdquo; class=&rdquo;cc.dynasoft.{1}Action&rdquo; method=&rdquo;{2}&rdquo;&gt;</font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3"><span style="FONT-FAMILY: 宋体">当一个</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">为</span><font face="Times New Roman">Book_save.action</font><span style="FONT-FAMILY: 宋体">的时候将调用</span><font face="Times New Roman">BookAction</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">save</font><span style="FONT-FAMILY: 宋体">方法来处理用户请求。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3"><span style="FONT-FAMILY: 宋体">注意这个时候指定校验文件需要注意，比如说</span><font face="Times New Roman">Book_save.action</font><span style="FONT-FAMILY: 宋体">的校验文件应该是</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3"><font face="Times New Roman">Book_save-validation.xml</font><span style="FONT-FAMILY: 宋体">。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3"><span style="FONT-FAMILY: 宋体">例</span><font face="Times New Roman">4</font><span style="FONT-FAMILY: 宋体">：</span><font face="Times New Roman">&lt;action name=&rdquo;*&rdquo;&gt;</font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result&gt;/{1}.jsp&lt;/result&gt;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/action&gt;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><span style="FONT-FAMILY: 宋体"><font size="3">这个应该不难理解，呵呵。</font></span></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt"><span style="FONT-FAMILY: 宋体"><font size="3">以下需要注意的问题：</font></span></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><span style="FONT-FAMILY: 宋体">如果有</span><font face="Times New Roman">URL</font><span style="FONT-FAMILY: 宋体">为</span><font face="Times New Roman">abcAction.action</font><span style="FONT-FAMILY: 宋体">的请求，如果</span><font face="Times New Roman">struts.xml</font><span style="FONT-FAMILY: 宋体">文件有名为</span><font face="Times New Roman">abcAction</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">，则一定由该</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">来处理用户请求；如果</span><font face="Times New Roman">struts.xml</font><span style="FONT-FAMILY: 宋体">文件没有名为</span><font face="Times New Roman">abcAction</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">，则搜索</span><font face="Times New Roman">name</font><span style="FONT-FAMILY: 宋体">属性值匹配</span><font face="Times New Roman">abcAction</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">，例如</span><font face="Times New Roman">name</font><span style="FONT-FAMILY: 宋体">为</span><font face="Times New Roman">*Action</font><span style="FONT-FAMILY: 宋体">或</span><font face="Times New Roman">*</font><span style="FONT-FAMILY: 宋体">，</span><font face="Times New Roman">*Action</font><span style="FONT-FAMILY: 宋体">并不会比</span><font face="Times New Roman">*</font><span style="FONT-FAMILY: 宋体">更优先匹配</span><font face="Times New Roman">abcAction</font><span style="FONT-FAMILY: 宋体">的请求，而是先找到哪个</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">，就先由哪个</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">来处理用户的请求。因此，我们应该将名为</span><font face="Times New Roman">*</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">配置在最后，否则</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">将使用该</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">来处理所有希望使用模式匹配的请求。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><strong><span style="FONT-FAMILY: 宋体"><font size="3">处理结果</font></span></strong></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">通过在</span><font face="Times New Roman">struts.xml</font><span style="FONT-FAMILY: 宋体">文件中使用</span><font face="Times New Roman">&lt;result&gt;</font><span style="FONT-FAMILY: 宋体">元素来配置结果，根据</span><font face="Times New Roman">&lt;result&gt;</font><span style="FONT-FAMILY: 宋体">元素所在位置的不同，</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">提供了两种结果。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><span style="FONT-FAMILY: 宋体">局部结果：将</span><font face="Times New Roman">&lt;result&gt;</font><span style="FONT-FAMILY: 宋体">作为</span><font face="Times New Roman">&lt;action&gt;</font><span style="FONT-FAMILY: 宋体">元素的子元素配置</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><span style="FONT-FAMILY: 宋体">全局结果：将</span><font face="Times New Roman">&lt;result&gt;</font><span style="FONT-FAMILY: 宋体">作为</span><font face="Times New Roman">&lt;global-result&gt;</font><span style="FONT-FAMILY: 宋体">元素的子元素配置。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><span style="FONT-FAMILY: 宋体"><font size="3">以下列出比较标准的配置：</font></span></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">&lt;result name=&rdquo;success&rdquo; type=&rdquo;dispatcher&rdquo;&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name=&rdquo;location&rdquo; &gt;/thank_you.jsp&lt;/param&gt;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 44.95pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">&lt;param name=&rdquo;parse&rdquo; &gt;true&lt;/param&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">&lt;/result&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">location</font><span style="FONT-FAMILY: 宋体">：用于指定实际视图资源</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">parse</font><span style="FONT-FAMILY: 宋体">：该参数指定是否允许在实际视图名称中使用</span><font face="Times New Roman">ONGL</font><span style="FONT-FAMILY: 宋体">表达式，默认为</span><font face="Times New Roman">true</font><span style="FONT-FAMILY: 宋体">。如果设置为</span><font face="Times New Roman">false</font><span style="FONT-FAMILY: 宋体">则不允许使用，通常不需要修改。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><span style="FONT-FAMILY: 宋体"><font size="3">一般我们比较常用的写法：</font></span></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">&lt;result name=&rdquo;success&rdquo; type=&rdquo;dispatcher&rdquo;&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 44.95pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">/thank_you.jsp </font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">&lt;/result&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><span style="FONT-FAMILY: 宋体">注意如果没有指定</span><font face="Times New Roman">name</font><span style="FONT-FAMILY: 宋体">属性：则默认是</span><font face="Times New Roman">success</font><span style="FONT-FAMILY: 宋体">；如果没有指定</span><font face="Times New Roman">type</font><span style="FONT-FAMILY: 宋体">，则默认就是</span><font face="Times New Roman">dispatcher</font><span style="FONT-FAMILY: 宋体">，即</span><font face="Times New Roman">JSP</font><span style="FONT-FAMILY: 宋体">。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><span style="FONT-FAMILY: 宋体">下面列出</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">内建支持的结果类型如下：</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">chain</font><span style="FONT-FAMILY: 宋体">：</span><font face="Times New Roman">Action</font><span style="FONT-FAMILY: 宋体">链式处理的结果类型，也就是将结果转发到这个</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">中。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">chart</font><span style="FONT-FAMILY: 宋体">：整合</span><font face="Times New Roman">JFreeChart</font><span style="FONT-FAMILY: 宋体">的结果类型</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">dispatcher</font><span style="FONT-FAMILY: 宋体">：用于整合</span><font face="Times New Roman">JSP</font><span style="FONT-FAMILY: 宋体">的结果类型</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">freemarker</font><span style="FONT-FAMILY: 宋体">：用于整合</span><font face="Times New Roman">freemarker</font><span style="FONT-FAMILY: 宋体">结果类型。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">httpheader</font><span style="FONT-FAMILY: 宋体">：用于控制特殊的</span><font face="Times New Roman">HTTP</font><span style="FONT-FAMILY: 宋体">行为的结果类型。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">jasper</font><span style="FONT-FAMILY: 宋体">：用于</span><font face="Times New Roman">JasperReports</font><span style="FONT-FAMILY: 宋体">整合的结果类型</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">jsf</font><span style="FONT-FAMILY: 宋体">：用于整合</span><font face="Times New Roman">JSF</font><span style="FONT-FAMILY: 宋体">后的结果类型</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">redirect</font><span style="FONT-FAMILY: 宋体">：实际上</span><font face="Times New Roman">dispatcher</font><span style="FONT-FAMILY: 宋体">和</span><font face="Times New Roman">redirect</font><span style="FONT-FAMILY: 宋体">的区别就是在于转发和重定向的区别。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">redirect-action</font><span style="FONT-FAMILY: 宋体">：用于直接</span><font face="Times New Roman">redirect action</font><span style="FONT-FAMILY: 宋体">。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">stream</font><span style="FONT-FAMILY: 宋体">：用于向浏览器返回一个</span><font face="Times New Roman">Inputstream</font><span style="FONT-FAMILY: 宋体">（用于文件下载）</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">tiles</font><span style="FONT-FAMILY: 宋体">：用于整合</span><font face="Times New Roman">Tiles</font><span style="FONT-FAMILY: 宋体">后的结果类型。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">velocity</font><span style="FONT-FAMILY: 宋体">：用于整合</span><font face="Times New Roman">Velocity</font><span style="FONT-FAMILY: 宋体">的结果类型。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">xslt</font><span style="FONT-FAMILY: 宋体">：用于整合</span><font face="Times New Roman">XML/XSLT</font><span style="FONT-FAMILY: 宋体">的结果类型。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">plaintext</font><span style="FONT-FAMILY: 宋体">：用于显示某个页面的源代码。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">plaintext</font><span style="FONT-FAMILY: 宋体">、</span><font face="Times New Roman">redirect</font><span style="FONT-FAMILY: 宋体">以及</span><font face="Times New Roman">redirect-action</font><span style="FONT-FAMILY: 宋体">的配置分别如下：</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">&lt;result type=&rdquo;plaintext&rdquo;&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name=&rdquo;location&rdquo;&gt;/welcome.jsp&lt;/param&gt;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!&mdash;</font></span><font size="3"><span style="FONT-FAMILY: 宋体">设置字符集编码</span><font face="Times New Roman">--&gt;</font></font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name=&rdquo;charset&rdquo;&gt;gb2312&lt;/param&gt;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">&lt;/result&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">&lt;result type=&rdquo;redirect&rdquo;&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /welcome.jsp</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 23.1pt"><font size="3" face="Times New Roman">&lt;/result&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">&lt;result type=&rdquo; redirect-action&rdquo;&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!&mdash;</font></span><font size="3"><span style="FONT-FAMILY: 宋体">指定</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">的命名空间</span><font face="Times New Roman">--&gt;</font></font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name=&rdquo;namespace&rdquo;&gt;/ss&lt;/param&gt;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 44.95pt; TEXT-INDENT: 17.95pt"><font size="3"><font face="Times New Roman">&lt;!&mdash;</font><span style="FONT-FAMILY: 宋体">指定</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">的名字</span><font face="Times New Roman">--&gt;</font></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name=&rdquo;actionName&rdquo;&gt;login &lt;/param&gt;</font></span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">&lt;/result&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><strong><span style="FONT-FAMILY: 宋体">在请求结果中使用</span><font face="Times New Roman">ONGL</font></strong><strong><span style="FONT-FAMILY: 宋体">表达式</span></strong></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><span style="FONT-FAMILY: 宋体"><font size="3">例子：</font></span></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3" face="Times New Roman">&lt;result type=&rdquo;redirect&rdquo;&gt;edit.action?skillName=${currentSkill.name}&lt;/result&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3"><span style="FONT-FAMILY: 宋体">对于上面的表达式语法，要求</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">中必须包含</span><font face="Times New Roman">currentSkill</font><span style="FONT-FAMILY: 宋体">属性，并且</span><font face="Times New Roman">currentSkill</font><span style="FONT-FAMILY: 宋体">属性必须包含</span><font face="Times New Roman">name</font><span style="FONT-FAMILY: 宋体">属性，否则</span><font face="Times New Roman">${currentSkill.name}</font><span style="FONT-FAMILY: 宋体">表达式值为</span><font face="Times New Roman">null</font><span style="FONT-FAMILY: 宋体">。</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><font size="3">&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><strong><span style="FONT-FAMILY: 宋体"><font size="3">属性驱动和模型驱动</font></span></strong></div>
<div style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 17.95pt"><span style="FONT-FAMILY: 宋体"><font size="3">我不推荐使用模型驱动，属性驱动完全可以实现模型驱动的效果。</font></span></div>
<p><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'"><br clear="all" />
<font size="3"></font></span></p>
<div><strong><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体"><font size="3">异常处理</font></span></strong></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">异常处理在</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">中采用可配置的方式来处理，主要是为了防止异常代码和</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">代码耦合。我们比较希望的异常处理模式是这样的，如果出现了异常一，则系统跳转到视图</span><font face="Times New Roman">1</font><span style="FONT-FAMILY: 宋体">；如果出现了异常二，则系统转到视图</span><font face="Times New Roman">2</font><span style="FONT-FAMILY: 宋体">。</span></font></div>
<div><font size="3"><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="FONT-FAMILY: 宋体">我们查看</span><font face="Times New Roman">execute</font><span style="FONT-FAMILY: 宋体">的声明：</span><font face="Times New Roman">public String execute() throws Exception</font><span style="FONT-FAMILY: 宋体">可以发现将异常抛出由</span><font face="Times New Roman">struts2</font><span style="FONT-FAMILY: 宋体">框架进行处理，为了处理异常，我们必须使用</span><font face="Times New Roman">exception</font><span style="FONT-FAMILY: 宋体">拦截器，由于在</span><font face="Times New Roman">struts-default.xml</font><span style="FONT-FAMILY: 宋体">的</span><font face="Times New Roman">defaultStack</font><span style="FONT-FAMILY: 宋体">中已经存在这个拦截器的定义，于是我们可以不用做任何事情。</span></font></div>
<div><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struts2</font></span><font size="3"><span style="FONT-FAMILY: 宋体">的异常处理机制是通过在</span><font face="Times New Roman">struts.xml</font><span style="FONT-FAMILY: 宋体">文件中配置</span><font face="Times New Roman">&lt;exception-mapping /&gt;</font><span style="FONT-FAMILY: 宋体">元素完成的，配置该元素的时候，需要指定两个属性：</span></font></font></div>
<div><font size="3"><font face="Times New Roman">exception</font><span style="FONT-FAMILY: 宋体">：此属性指定该异常映射所设置的异常类型。</span></font></div>
<div><font size="3"><font face="Times New Roman">result</font><span style="FONT-FAMILY: 宋体">：出现这个异常的时候，转入</span><font face="Times New Roman">result</font><span style="FONT-FAMILY: 宋体">属性所指向的结果。</span></font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">根据</span><font face="Times New Roman">&lt;exception-mapping /&gt;</font><span style="FONT-FAMILY: 宋体">元素出现的位置的不同，异常映射又可分为两种：</span></font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">局部异常映射：将</span><font face="Times New Roman">&lt;exception-mapping /&gt;</font><span style="FONT-FAMILY: 宋体">作为</span><font face="Times New Roman">action</font><span style="FONT-FAMILY: 宋体">的子元素配置</span></font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">全局异常映射：将</span><font face="Times New Roman">&lt;exception-mapping /&gt;</font><span style="FONT-FAMILY: 宋体">元素作为</span><font face="Times New Roman">&lt;global-exception-mappings&gt;</font><span style="FONT-FAMILY: 宋体">元素的子元素配置。</span></font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">实际上配置类似</span><font face="Times New Roman">result</font><span style="FONT-FAMILY: 宋体">，可以有局部，也可以是全局，局部优先。</span></font></div>
<div><font size="3">&nbsp;</font></div>
<div><span style="FONT-FAMILY: 宋体"><font size="3">举个例子：</font></span></div>
<div><font size="3" face="Times New Roman">&lt;global-exception-mappings&gt;</font></div>
<div><font face="Times New Roman"><span><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;exception-mapping exception=&rdquo;java.sql.SQLException&rdquo; result=&rdquo;sql&rdquo;/&gt;</font></span></font></div>
<div style="TEXT-INDENT: 21pt"><font size="3" face="Times New Roman">&lt;exception-mapping exception=&rdquo;java.lang.Exception&rdquo; result=&rdquo;root&rdquo;/&gt;</font></div>
<div><font size="3" face="Times New Roman">&lt;/ global-exception-mappings&gt;</font></div>
<div><font size="3">&nbsp;</font></div>
<div><font size="3"><span style="FONT-FAMILY: 宋体">注意以上的</span><font face="Times New Roman">sql</font><span style="FONT-FAMILY: 宋体">和</span><font face="Times New Roman">root</font><span style="FONT-FAMILY: 宋体">是全局</span><font face="Times New Roman">result</font><span style="FONT-FAMILY: 宋体">。</span></font></div>
<div><span style="FONT-FAMILY: 宋体"><font size="3">输出异常信息：</font></span></div>
<div><font size="3"><font face="Times New Roman">&lt;s:property value=&rdquo;exception&rdquo; /&gt;:</font><span style="FONT-FAMILY: 宋体">输出异常对象本身，注意这个异常代表</span><font face="Times New Roman">Exception</font><span style="FONT-FAMILY: 宋体">的实例，因此可以调用</span><font face="Times New Roman">message</font><span style="FONT-FAMILY: 宋体">属性。</span></font></div>
<div><font size="3"><font face="Times New Roman">&lt;s:property value=&rdquo;exceptionStack&rdquo; /&gt;</font><span style="FONT-FAMILY: 宋体">：输出异常堆栈信息。</span></font></div>
<div><font size="3">&nbsp;</font></div>
          <br/>
          <span style="color:red;">
            <a href="http://chenshuang.javaeye.com/blog/136575#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 30 Oct 2007 08:58:18 +0800</pubDate>
        <link>http://chenshuang.javaeye.com/blog/136575</link>
        <guid>http://chenshuang.javaeye.com/blog/136575</guid>
      </item>
      <item>
        <title>struts2入门例子</title>
        <author>chenshuang1227</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenshuang.javaeye.com">chenshuang1227</a>&nbsp;
          链接：<a href="http://chenshuang.javaeye.com/blog/136527" style="color:red;">http://chenshuang.javaeye.com/blog/136527</a>&nbsp;
          发表时间: 2007年10月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;
<p class="MsoNormal"><font size="3"><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、首先下载</span><span lang="EN-US">Struts2GA</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本，</span><span lang="EN-US">GA</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的全称是</span><span lang="EN-US">General Availability</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p>
<p><font size="3"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">使用</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Struts2</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">必须的包：</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">core</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">xwork</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">freemarker</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">ognl</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">。</span></font></p>
<p><font size="3"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><font size="3"><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、配置</span><span lang="EN-US">web.xml</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件</span></font></span></font><span><span><span><span></span></span></span></span></p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>struts2</span><span class="tag"><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.FilterDispatcher &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>struts2</span><span class="tag"><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/*</span><span class="tag"><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>&nbsp;</p>
<p class="MsoNormal"><font size="3"><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、建立</span><span lang="EN-US">JSP</span></font><font size="3"><span lang="EN-US"></span></font> </p>
<p class="MsoNormal">&nbsp;</p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span>%@&nbsp;page&nbsp;</span><span class="attribute">language</span><span>=</span><span class="attribute-value">&quot;java&quot;</span><span>&nbsp;</span><span class="attribute">contentType</span><span>=</span><span class="attribute-value">&quot;text/html;&nbsp;charset=UTF-8&quot;</span><span>%</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span>%@taglib&nbsp;</span><span class="attribute">prefix</span><span>=</span><span class="attribute-value">&quot;s&quot;</span><span>&nbsp;</span><span class="attribute">uri</span><span>=</span><span class="attribute-value">&quot;/struts-tags&quot;</span><span>&nbsp;%</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>struts2&nbsp;testDemo</span><span class="tag"><span class="tag-name">title</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">s:form</span><span>&nbsp;</span><span class="attribute">action</span><span>=</span><span class="attribute-value">&quot;login.action&quot;</span><span>&nbsp;</span><span class="attribute">method</span><span>=</span><span class="attribute-value">&quot;post&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">s:textfield</span><span>&nbsp;</span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;username&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;user.username&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">s:password</span><span>&nbsp;</span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;password&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;user.password&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">s:submit</span><span>&nbsp;</span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;submit&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">s:form</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><font size="3"><span lang="EN-US"></span></font></p>
<div><span><span><span></span></span></span></div>
<p><span lang="EN-US"></span>&nbsp;<font size="3"><span lang="EN-US">4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、建立</span><span lang="EN-US">Action</span></font></p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;cc.dynasoft.action; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;cc.dynasoft.vo.User; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;LoginAction &nbsp;&nbsp;</span> </li>
    <li class=""><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;User&nbsp;user; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;User&nbsp;getUser() &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;user; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUser(User&nbsp;user) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.user&nbsp;=&nbsp;user; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;execute()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(user.getUsername().equals(</span><span class="string">&quot;chenshuang&quot;</span><span>)&nbsp;&amp;&amp;&nbsp;user.getPassword().equals(</span><span class="string">&quot;chenshuang&quot;</span><span>)) &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="string">&quot;success&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="string">&quot;error&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
</ol>
</div>
<div class="code_title">User.java</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;cc.dynasoft.vo; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User &nbsp;&nbsp;</span> </li>
    <li class=""><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;username; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;password; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getUsername() &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;username; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUsername(String&nbsp;username) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.username&nbsp;=&nbsp;username; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getPassword() &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;password; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setPassword(String&nbsp;password) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.password&nbsp;=&nbsp;password; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
</ol>
</div>
&nbsp;
<p class="MsoNormal"><font size="3"><span lang="EN-US">5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、配置</span><span lang="EN-US">struts.xml</span></font><span><span><span><span><span class="tag"></span></span></span></span></span></p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag"><!--sp--><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span>&nbsp;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span> </span></li>
    <li class=""><span><!--CTYPE struts PUBLIC   </sp--></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&quot;-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.0//EN&quot; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&quot;http://struts.apache.org/dtds/struts-2.0.dtd&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">struts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">package</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;login&quot;</span><span>&nbsp;</span><span class="attribute">extends</span><span>=</span><span class="attribute-value">&quot;struts-default&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">action</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;login&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;cc.dynasoft.action.LoginAction&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;success&quot;</span><span class="tag">&gt;</span><span>/welcome.jsp</span><span class="tag"><span class="tag-name">result</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;error&quot;</span><span class="tag">&gt;</span><span>/login.jsp</span><span class="tag"><span class="tag-name">result</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">action</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">package</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">struts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>&nbsp; </p>
<p class="MsoNormal"><font size="3"><span lang="EN-US">6</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、完成国际化</span></font></p>
<p class="MsoNormal"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang="EN-US">struts.xml</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中加上配置</span></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span></p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">constant</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;struts.custom.i18n.resources&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;message&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>&nbsp;</p>
<p><font size="3"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">建立资源文件</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">message_en_US.properties</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">和</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">message_zh_CN.properties</span></font></p>
<font size="3"><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">
<div class="code_title"><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">message_en_US.properties</span></div>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>username=username &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>password=password &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>welcome=welcom&nbsp;to&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>submit=submit &nbsp;&nbsp;</span> </li>
</ol>
</div>
</span></font>
<div class="code_title"><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">message_zh_CN.properties</span></div>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>username=\u7528\u6237\u540d &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>password=\u5bc6\u7801 &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>welcome=\u6b22\u8fce &nbsp;&nbsp;</span> </li>
    <li class=""><span>submit=\u63d0\u4ea4 &nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://chenshuang.javaeye.com/blog/136527#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 30 Oct 2007 08:33:59 +0800</pubDate>
        <link>http://chenshuang.javaeye.com/blog/136527</link>
        <guid>http://chenshuang.javaeye.com/blog/136527</guid>
      </item>
      <item>
        <title>Struts2概述</title>
        <author>chenshuang1227</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenshuang.javaeye.com">chenshuang1227</a>&nbsp;
          链接：<a href="http://chenshuang.javaeye.com/blog/136525" style="color:red;">http://chenshuang.javaeye.com/blog/136525</a>&nbsp;
          发表时间: 2007年10月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;<font size="3"> 最近研究了一下srtuts2.0，将一些心得准备以一个系列的方式列一下。</font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 21.0pt"><font size="3"><strong><font face="Times New Roman"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">一、</span></span><span lang="EN-US">MVC</span></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">思想及其优势</span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">MVC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">思想将一个应用分成三个部分：</span><span lang="EN-US"><font face="Times New Roman">Model</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（模型）、</span><span lang="EN-US"><font face="Times New Roman">View</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（视图）、</span><span lang="EN-US"><font face="Times New Roman">Controller</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（控制器）。这三个部分以最少的耦合协同工作，从而提高应用的可扩展性及可维护性。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">MVC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">特点：</span><span lang="EN-US"><font face="Times New Roman">1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、多个视图对应一个模型。</span><span lang="EN-US"><font face="Times New Roman">2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、模型返回的数据与显示逻辑分离，模型数据可以应用任何显示技术，例如</span><span lang="EN-US"><font face="Times New Roman">JSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US"><font face="Times New Roman">Velocity</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，或者生成</span><span lang="EN-US"><font face="Times New Roman">Excel</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span><span lang="EN-US"><font face="Times New Roman">3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、应用被分成三层，降低了各层之间的耦合，提高可扩展性。</span><span lang="EN-US"><font face="Times New Roman">4</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US"><font face="Times New Roman">MVC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">更符合软件工程思想，不同的层各司其职。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">常用的</span><span lang="EN-US"><font face="Times New Roman">MVC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框架介绍：全世界第一个</span><span lang="EN-US"><font face="Times New Roman">MVC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框架是</span><span lang="EN-US"><font face="Times New Roman">struts</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US"><font face="Times New Roman">2001</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年出现。现在比较流行的</span><span lang="EN-US"><font face="Times New Roman">MVC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框架罗列如下：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">JSF</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：他是标准，这是他的优势。但也有一些缺点：用户较少，资源不是很丰富，和</span><span lang="EN-US"><font face="Times New Roman">Servlet API</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">耦合；成熟度还有待于进一步提高。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Tapestry</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：具有很好的分工合作。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Spring MVC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框架：设计比较好，但是使用起来比较复杂，和</span><span lang="EN-US"><font face="Times New Roman">Servlet API</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">耦合，有人说</span><span lang="EN-US"><font face="Times New Roman">Spring</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有过度设计的危险，但是我有些不理解这句话的含义。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Webwork</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，类似</span><span lang="EN-US"><font face="Times New Roman">struts2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，较好的设计，从</span><span lang="EN-US"><font face="Times New Roman">ServletAPI</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分离。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Model1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US"><font face="Times New Roman">model2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Model1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang="EN-US"><font face="Times New Roman">JSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页面接受处理客户端请求，对请求处理后直接做出相应。用</span><span lang="EN-US"><font face="Times New Roman">javabean</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">处理业务逻辑，这个时候</span><span lang="EN-US"><font face="Times New Roman">JSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">既做控制器又做视图。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Model2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang="EN-US"><font face="Times New Roman">Servlet</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作为前端的控制器，</span><span lang="EN-US"><font face="Times New Roman">JSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作为视图，</span><span lang="EN-US"><font face="Times New Roman">javabean</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作为控制器。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 21.0pt"><font size="3"><strong><font face="Times New Roman"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">二、</span></span><span lang="EN-US">struts2</span></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">概述</span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Struts1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的缺点：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">1、</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">支持的表示层技术单一</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Struts1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只支持</span><span lang="EN-US"><font face="Times New Roman">JSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">视图技术，当然，通过某些不自然的整合可以支持</span><span lang="EN-US"><font face="Times New Roman">velocity</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等技术。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 18.0pt"><font face="Times New Roman"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font size="3">2、</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp; </span></span></span><span lang="EN-US"><font size="3">struts</font></span></font><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与</span><span lang="EN-US"><font face="Times New Roman">servlet API</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">严重耦合，难于测试</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比如说：如果要对</span><span lang="EN-US"><font face="Times New Roman">struts1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">Action</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">execute</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行测试的时候，该方法有四个参数：</span><span lang="EN-US"><font face="Times New Roman">ActionMapping</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US"><font face="Times New Roman">ActionForm</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US"><font face="Times New Roman">HttpServletRequest</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US"><font face="Times New Roman">HttpServletResponse</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，初始化这四个参数比较困难，尤其是</span><span lang="EN-US"><font face="Times New Roman">HttpServletRequest</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US"><font face="Times New Roman">HttpServletResponse</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">两个参数，因为这两个参数通常由容器进行注入的。如果脱离</span><span lang="EN-US"><font face="Times New Roman">web</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器，</span><span lang="EN-US"><font face="Times New Roman">Action</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的测试是很困难的。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 18.0pt"><font face="Times New Roman"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font size="3">3、</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp; </span></span></span><span lang="EN-US"><font size="3">struts1</font></span></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">的侵入性太大</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个</span><span lang="EN-US"><font face="Times New Roman">Action</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中包含了大量的</span><span lang="EN-US"><font face="Times New Roman">strutsAPI</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，比如</span><span lang="EN-US"><font face="Times New Roman">ActionMapping</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US"><font face="Times New Roman">ActionForm</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US"><font face="Times New Roman">ActionForwad</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这种侵入式的设计最大的弱点在于：切换框架会相当困难，代码复用较低，不利于重构，对</span><span lang="EN-US"><font face="Times New Roman">struts</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的依赖太严重。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Struts2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则在</span><span lang="EN-US"><font face="Times New Roman">Webwork</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的优良基础设计的基础上，进行了一次巨大的升级（我是这样认为的）。注意，</span><span lang="EN-US"><font face="Times New Roman">struts2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不是基于</span><span lang="EN-US"><font face="Times New Roman">struts1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，而是基于</span><span lang="EN-US"><font face="Times New Roman">webwork</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的。</span><span lang="EN-US"><font face="Times New Roman">Struts2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">针对</span><span lang="EN-US"><font face="Times New Roman">struts1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的不足，提出了自己的解决方案（实际上大多是</span><span lang="EN-US"><font face="Times New Roman">webwork</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的解决方案）。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是使用</span><span lang="EN-US"><font face="Times New Roman">struts2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还是使用</span><span lang="EN-US"><font face="Times New Roman">webwork</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">？本人倾向使用</span><span lang="EN-US"><font face="Times New Roman">struts2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，原因：</span><span lang="EN-US"><font face="Times New Roman">1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、毕竟</span><span lang="EN-US"><font face="Times New Roman">struts2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是对</span><span lang="EN-US"><font face="Times New Roman">webwork</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一次升级。</span><span lang="EN-US"><font face="Times New Roman">2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US"><font face="Times New Roman">webwork</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经不再升级。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Struts2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的大致处理流程：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level2 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">1、</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp; </span></font></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">浏览器发送请求，如</span><span lang="EN-US"><font face="Times New Roman">login.action</font></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level2 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">2、</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp; </span></font></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">核心的控制器</span><span lang="EN-US"><font face="Times New Roman">FilterDispatcher</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">根据请求决定调用合适的</span><span lang="EN-US"><font face="Times New Roman">Action</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level2 lfo1; tab-stops: list 39.0pt"><font face="Times New Roman"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font size="3">3、</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp; </span></span></span><span lang="EN-US"><font size="3">Struts2</font></span></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">的拦截器链自动对请求应用通用功能，例如验证、填充参数、文件上传等。</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level2 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">4、</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp; </span></font></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用</span><span lang="EN-US"><font face="Times New Roman">Action</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">execute</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法，实际上是调用</span><span lang="EN-US"><font face="Times New Roman">Action</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代理的方法。（基于</span><span lang="EN-US"><font face="Times New Roman">AOP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">理论）</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level2 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">5、</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp; </span></font></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将结果信息输出到视图中，视图可以是</span><span lang="EN-US"><font face="Times New Roman">JSP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US"><font face="Times New Roman">FreeMarker</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US"><font face="Times New Roman">Velocity</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">甚至是</span><span lang="EN-US"><font face="Times New Roman">JSON</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US"><o:p><font size="3" face="Times New Roman">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比较</span><span lang="EN-US"><font face="Times New Roman">Struts1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US"><font face="Times New Roman">Struts2</font></span></font></p>
<p>
<table class="MsoTableGrid" cellspacing="0" border="1" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext">
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font size="3" face="Times New Roman">&nbsp;</font></o:p></span></p>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 142.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3" face="Times New Roman">Struts1</font></span></p>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 142.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3" face="Times New Roman">Struts2</font></span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 1">
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">侵入性方面</font></span></p>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 142.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">非常大</font></span></p>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 142.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">较小</font></span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 2">
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 142pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">线程模式方面</font></span></p>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 142.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Struts1 Action</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是单例模式并且必须是线程安全的，因为只有一个</span><span lang="EN-US"><font face="Times New Roman">Action</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">处理请求。</span></font></p>
            </td>
            <td valign="top" width="189" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 142.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">为每个请求创建一个实例，因此没有线程安全问题。</font></span></p>
          