﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-我的漫漫程序之旅-文章分类-Struts2</title><link>http://www.blogjava.net/supercrsky/category/27519.html</link><description>专注于JavaWeb开发</description><language>zh-cn</language><lastBuildDate>Fri, 24 Dec 2010 08:20:54 GMT</lastBuildDate><pubDate>Fri, 24 Dec 2010 08:20:54 GMT</pubDate><ttl>60</ttl><item><title>Struts2.1 annotation防止表单重复提交</title><link>http://www.blogjava.net/supercrsky/articles/341474.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 24 Dec 2010 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/341474.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/341474.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/341474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/341474.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/341474.html</trackback:ping><description><![CDATA[<p>问题描述：用户提交表单时可能因为网速的原因，或者网页被恶意刷新，致使同一条记录重复插入到数据库中，这是一个比较棘手的问题。我们可以从客户端和服务器端一起着手，设法避免同一表单的重复提交。<br />
解决方案：</p>
<p>1．使用客户端脚本<br />
提到客户端脚本，经常使用的是JavaScript进行常规输入验证。在下面的例子中，我们使用它处理表单的重复提交问题，请看下面的代码：<br />
&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">method</span><span style="color: #0000ff">="post"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="register"</span><span style="color: #ff0000">&nbsp;action</span><span style="color: #0000ff">="test.php"</span><span style="color: #ff0000">&nbsp;enctype</span><span style="color: #0000ff">=<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />"multipart/form-data"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="cont"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="提交"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="button"</span><span style="color: #ff0000">&nbsp;onClick</span><span style="color: #0000ff">="document.<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />register.cont.value='正在提交,请等待<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />';document.register.cont.<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />disabled=true;document.the_form.submit();"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>&nbsp;</p>
<p>上述方法，主要是将按钮的提交状态改变为disabled。</p>
<p>&nbsp;</p>
<p>2.利用Struts2的令牌机制。<br />
防止表单重复提交主要用的到标签是&lt;s: token /&gt;，拦截器 &lt;interceptor-ref name="token" /&gt;，还有一个默认的返回值&lt;result name="invalid.token"&gt;/input.jsp&lt;/result&gt;</p>
<p>在页面加载时，&lt;s: token /&gt;产生一个GUID（Globally Unique Identifier，全局唯一标识符）值的隐藏输入框如：<br />
&lt;input type="hidden" name="struts.token.name" value="struts.token"/&gt;<br />
&lt;input type="hidden" name="struts.token" value="BXPNNDG6BB11ZXHPI4E106CZ5K7VNMHR"/&gt;<br />
同时，将GUID放到会话（session）中；在执行action之前，&#8220;token&#8221;拦截器将会话token与请求token比较，如果两者相同，则将会话中的token删除并往下执行，否则向actionErrors加入错误信息。如此一来，如果用户通过某种手段提交了两次相同的请求，两个token就会不同。<br />
下面用零配置来演示 token的作用<br />
/WEB-INF/content/test-success.jsp</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_2_66_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_66_Open_Text.style.display='none'; Codehighlighter1_2_66_Closed_Image.style.display='inline'; Codehighlighter1_2_66_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_2_66_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2_66_Closed_Text.style.display='none'; Codehighlighter1_2_66_Open_Image.style.display='inline'; Codehighlighter1_2_66_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_2_66_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2_66_Open_Text"><span style="background-color: #f5f5f5; color: #000000">@&nbsp;page&nbsp;contentType</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">text/html;charset=UTF-8</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;pageEncoding</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">UTF-8</span><span style="background-color: #f5f5f5; color: #000000">"</span></span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_72_110_Open_Image" onclick="this.style.display='none'; Codehighlighter1_72_110_Open_Text.style.display='none'; Codehighlighter1_72_110_Closed_Image.style.display='inline'; Codehighlighter1_72_110_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_72_110_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_72_110_Closed_Text.style.display='none'; Codehighlighter1_72_110_Open_Image.style.display='inline'; Codehighlighter1_72_110_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_72_110_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_72_110_Open_Text"><span style="background-color: #f5f5f5; color: #000000">@&nbsp;taglib&nbsp;prefix</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">s</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;uri</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">/struts-tags</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span></span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_116_175_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_175_Open_Text.style.display='none'; Codehighlighter1_116_175_Closed_Image.style.display='inline'; Codehighlighter1_116_175_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_116_175_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_116_175_Closed_Text.style.display='none'; Codehighlighter1_116_175_Open_Image.style.display='inline'; Codehighlighter1_116_175_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_116_175_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_116_175_Open_Text"><span style="background-color: #f5f5f5; color: #000000">@&nbsp;taglib&nbsp;prefix</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">c</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;uri</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">http://java.sun.com/jsp/jstl/core</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span></span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:actionerror</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:form&nbsp;</span><span style="color: #ff0000">action</span><span style="color: #0000ff">="test!save.action"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="POST"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:textfield&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="message"</span><span style="color: #ff0000">&nbsp;label</span><span style="color: #0000ff">="请输入您的信息"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:token&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="token"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:submit&nbsp;</span><span style="color: #ff0000">value</span><span style="color: #0000ff">="确定"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">s:form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>/WEB-INF/content/error.jsp<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_2_66_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_66_Open_Text.style.display='none'; Codehighlighter1_2_66_Closed_Image.style.display='inline'; Codehighlighter1_2_66_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_2_66_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2_66_Closed_Text.style.display='none'; Codehighlighter1_2_66_Open_Image.style.display='inline'; Codehighlighter1_2_66_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_2_66_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2_66_Open_Text"><span style="background-color: #f5f5f5; color: #000000">@&nbsp;page&nbsp;contentType</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">text/html;charset=UTF-8</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;pageEncoding</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">UTF-8</span><span style="background-color: #f5f5f5; color: #000000">"</span></span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_72_110_Open_Image" onclick="this.style.display='none'; Codehighlighter1_72_110_Open_Text.style.display='none'; Codehighlighter1_72_110_Closed_Image.style.display='inline'; Codehighlighter1_72_110_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_72_110_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_72_110_Closed_Text.style.display='none'; Codehighlighter1_72_110_Open_Image.style.display='inline'; Codehighlighter1_72_110_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_72_110_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_72_110_Open_Text"><span style="background-color: #f5f5f5; color: #000000">@&nbsp;taglib&nbsp;prefix</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">s</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;uri</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">/struts-tags</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span></span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_116_175_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_175_Open_Text.style.display='none'; Codehighlighter1_116_175_Closed_Image.style.display='inline'; Codehighlighter1_116_175_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_116_175_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_116_175_Closed_Text.style.display='none'; Codehighlighter1_116_175_Open_Image.style.display='inline'; Codehighlighter1_116_175_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_116_175_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_116_175_Open_Text"><span style="background-color: #f5f5f5; color: #000000">@&nbsp;taglib&nbsp;prefix</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">c</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;uri</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">http://java.sun.com/jsp/jstl/core</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span></span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:actionerror</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;不能重复提交表单！<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>&nbsp;</p>
<p>/WEB-INF/content/test-ok.jsp</p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_2_66_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_66_Open_Text.style.display='none'; Codehighlighter1_2_66_Closed_Image.style.display='inline'; Codehighlighter1_2_66_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_2_66_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2_66_Closed_Text.style.display='none'; Codehighlighter1_2_66_Open_Image.style.display='inline'; Codehighlighter1_2_66_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_2_66_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2_66_Open_Text"><span style="background-color: #f5f5f5; color: #000000">@&nbsp;page&nbsp;contentType</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">text/html;charset=UTF-8</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;pageEncoding</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">UTF-8</span><span style="background-color: #f5f5f5; color: #000000">"</span></span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_72_110_Open_Image" onclick="this.style.display='none'; Codehighlighter1_72_110_Open_Text.style.display='none'; Codehighlighter1_72_110_Closed_Image.style.display='inline'; Codehighlighter1_72_110_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_72_110_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_72_110_Closed_Text.style.display='none'; Codehighlighter1_72_110_Open_Image.style.display='inline'; Codehighlighter1_72_110_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_72_110_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_72_110_Open_Text"><span style="background-color: #f5f5f5; color: #000000">@&nbsp;taglib&nbsp;prefix</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">s</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;uri</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">/struts-tags</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span></span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_116_175_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_175_Open_Text.style.display='none'; Codehighlighter1_116_175_Closed_Image.style.display='inline'; Codehighlighter1_116_175_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_116_175_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_116_175_Closed_Text.style.display='none'; Codehighlighter1_116_175_Open_Image.style.display='inline'; Codehighlighter1_116_175_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_116_175_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_116_175_Open_Text"><span style="background-color: #f5f5f5; color: #000000">@&nbsp;taglib&nbsp;prefix</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">c</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;uri</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">http://java.sun.com/jsp/jstl/core</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;</span></span><span style="background-color: #ffff00; color: #000000">%&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAVE&nbsp;OK!<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>TestAction.java</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.fun.actions;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts2.convention.annotation.InterceptorRef;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts2.convention.annotation.Result;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts2.convention.annotation.Results;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.opensymphony.xwork2.ActionSupport;<br />
<img id="Codehighlighter1_261_331_Open_Image" onclick="this.style.display='none'; Codehighlighter1_261_331_Open_Text.style.display='none'; Codehighlighter1_261_331_Closed_Image.style.display='inline'; Codehighlighter1_261_331_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_261_331_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_261_331_Closed_Text.style.display='none'; Codehighlighter1_261_331_Open_Image.style.display='inline'; Codehighlighter1_261_331_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" />@Results(</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_261_331_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_261_331_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />@Result(name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">invalid.token</span><span style="color: #000000">"</span><span style="color: #000000">,location</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/index.html</span><span style="color: #000000">"</span><span style="color: #000000">,type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">redirect</span><span style="color: #000000">"</span><span style="color: #000000">)}</span></span><span style="color: #000000">)<br />
<img id="Codehighlighter1_351_448_Open_Image" onclick="this.style.display='none'; Codehighlighter1_351_448_Open_Text.style.display='none'; Codehighlighter1_351_448_Closed_Image.style.display='inline'; Codehighlighter1_351_448_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_351_448_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_351_448_Closed_Text.style.display='none'; Codehighlighter1_351_448_Open_Image.style.display='inline'; Codehighlighter1_351_448_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" />@InterceptorRefs(</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_351_448_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_351_448_Open_Text"><span style="color: #000000">{@InterceptorRef(value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">token</span><span style="color: #000000">"</span><span style="color: #000000">,params</span><span style="color: #000000">=</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_389_413_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_389_413_Open_Text"><span style="color: #000000">{</span><span style="color: #000000">"</span><span style="color: #000000">includeMethods</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">save</span><span style="color: #000000">"</span><span style="color: #000000">}</span></span><span style="color: #000000">),@InterceptorRef(</span><span style="color: #000000">"</span><span style="color: #000000">defaultStack</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;}</span></span><span style="color: #000000">)<br />
<img id="Codehighlighter1_497_788_Open_Image" onclick="this.style.display='none'; Codehighlighter1_497_788_Open_Text.style.display='none'; Codehighlighter1_497_788_Closed_Image.style.display='inline'; Codehighlighter1_497_788_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_497_788_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_497_788_Closed_Text.style.display='none'; Codehighlighter1_497_788_Open_Image.style.display='inline'; Codehighlighter1_497_788_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionSupport&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_497_788_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_497_788_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;message;<br />
<img id="Codehighlighter1_554_580_Open_Image" onclick="this.style.display='none'; Codehighlighter1_554_580_Open_Text.style.display='none'; Codehighlighter1_554_580_Closed_Image.style.display='inline'; Codehighlighter1_554_580_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_554_580_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_554_580_Closed_Text.style.display='none'; Codehighlighter1_554_580_Open_Image.style.display='inline'; Codehighlighter1_554_580_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;execute()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_554_580_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_554_580_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;SUCCESS;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_614_637_Open_Image" onclick="this.style.display='none'; Codehighlighter1_614_637_Open_Text.style.display='none'; Codehighlighter1_614_637_Closed_Image.style.display='inline'; Codehighlighter1_614_637_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_614_637_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_614_637_Closed_Text.style.display='none'; Codehighlighter1_614_637_Open_Image.style.display='inline'; Codehighlighter1_614_637_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;save()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_614_637_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_614_637_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ok</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_670_699_Open_Image" onclick="this.style.display='none'; Codehighlighter1_670_699_Open_Text.style.display='none'; Codehighlighter1_670_699_Closed_Image.style.display='inline'; Codehighlighter1_670_699_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_670_699_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_670_699_Closed_Text.style.display='none'; Codehighlighter1_670_699_Open_Image.style.display='inline'; Codehighlighter1_670_699_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getMessage()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_670_699_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_670_699_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;message;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_744_781_Open_Image" onclick="this.style.display='none'; Codehighlighter1_744_781_Open_Text.style.display='none'; Codehighlighter1_744_781_Closed_Image.style.display='inline'; Codehighlighter1_744_781_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_744_781_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_744_781_Closed_Text.style.display='none'; Codehighlighter1_744_781_Open_Image.style.display='inline'; Codehighlighter1_744_781_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setMessage(String&nbsp;message)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_744_781_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_744_781_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.message&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;message;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
其实，最主要的就是 token拦截器中还有 includeMethods()这个方法，表示的是，Action中的哪个方法需要经过拦截器。属性excludeMethods（）这个方法表示的是哪个方法不经过拦截器。如果，没有加上&#8220;defaultStack&#8221;这个拦截器的话，则ActionContext的值将为null。
<img src ="http://www.blogjava.net/supercrsky/aggbug/341474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2010-12-24 16:09 <a href="http://www.blogjava.net/supercrsky/articles/341474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 action的扩展名两种修改方法</title><link>http://www.blogjava.net/supercrsky/articles/263039.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Tue, 31 Mar 2009 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/263039.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/263039.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/263039.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/263039.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/263039.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana"><span style="font-size: 12pt"><span style="font-family: Verdana">STRUTS2 ACTION的扩展名默认为.action，在struts1.X前为.do，如果要把STRUTS2的ACTION 的扩展名也改成.do可以按如下方法做。<br />
方法一<br />
<span style="color: red"><span style="color: #000000"><span style="font-family: Verdana">struts.xml</span>：<br />
</span></span></span></span></span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">constant&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="struts.action.extension"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="do"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;//注意这里&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">package&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="default"</span><span style="color: #ff0000">&nbsp;extends</span><span style="color: #0000ff">="struts-default"</span><span style="color: #ff0000">&nbsp;&nbsp;namespace</span><span style="color: #0000ff">="/example"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="HelloWord"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="example.HelloWord"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="SUCCESS"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/example/HelloWord.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">package</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;include&nbsp;file="example.xml"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Add&nbsp;packages&nbsp;here&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<p>方法二：</p>
<p>web.xml</p>
<p>给filter加个init-param</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts.action.extension</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">do</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;</span></div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/263039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2009-03-31 09:39 <a href="http://www.blogjava.net/supercrsky/articles/263039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2中Session的使用</title><link>http://www.blogjava.net/supercrsky/articles/192855.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Mon, 14 Apr 2008 08:57:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/192855.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/192855.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/192855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/192855.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/192855.html</trackback:ping><description><![CDATA[在Struts2里，如果需要在Action中使用session，可以通过下面两种方式得到<br />
1.通过ActionContext class中的方法getSession得到<br />
2.Action实现org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作<br />
&nbsp;<br />
下面先看一个采用第一种方式，在action中得到session的例子<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;s2.ex.action;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Map;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.opensymphony.xwork2.ActionContext;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.opensymphony.xwork2.ActionSupport;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_200_434_Open_Image" onclick="this.style.display='none'; Codehighlighter1_200_434_Open_Text.style.display='none'; Codehighlighter1_200_434_Closed_Image.style.display='inline'; Codehighlighter1_200_434_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_200_434_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_200_434_Closed_Text.style.display='none'; Codehighlighter1_200_434_Open_Image.style.display='inline'; Codehighlighter1_200_434_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SessionTestAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionSupport&nbsp;</span><span id="Codehighlighter1_200_434_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_200_434_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_233_430_Open_Image" onclick="this.style.display='none'; Codehighlighter1_233_430_Open_Text.style.display='none'; Codehighlighter1_233_430_Closed_Image.style.display='inline'; Codehighlighter1_233_430_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_233_430_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_233_430_Closed_Text.style.display='none'; Codehighlighter1_233_430_Open_Image.style.display='inline'; Codehighlighter1_233_430_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;execute()&nbsp;</span><span id="Codehighlighter1_233_430_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_233_430_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionContext&nbsp;actionContext&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ActionContext.getContext();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;actionContext.getSession();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.put(</span><span style="color: #000000">"</span><span style="color: #000000">USER_NAME</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Test&nbsp;User</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;SUCCESS;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
在这个例子中，通过ActionContext得到session，并往session里放置一个key为USER_NAME，值为Test User的内容。<br />
&nbsp;<br />
下面是一个实现org.apache.struts2.interceptor.SessionAware接口来对session操作的例子<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;s2.ex.action;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Map;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts2.interceptor.SessionAware;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.opensymphony.xwork2.ActionSupport;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_232_469_Open_Image" onclick="this.style.display='none'; Codehighlighter1_232_469_Open_Text.style.display='none'; Codehighlighter1_232_469_Closed_Image.style.display='inline'; Codehighlighter1_232_469_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_232_469_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_232_469_Closed_Text.style.display='none'; Codehighlighter1_232_469_Open_Image.style.display='inline'; Codehighlighter1_232_469_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SessionTest1Action&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionSupport&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;SessionAware&nbsp;</span><span id="Codehighlighter1_232_469_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_232_469_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Map&nbsp;session;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_303_345_Open_Image" onclick="this.style.display='none'; Codehighlighter1_303_345_Open_Text.style.display='none'; Codehighlighter1_303_345_Closed_Image.style.display='inline'; Codehighlighter1_303_345_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_303_345_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_303_345_Closed_Text.style.display='none'; Codehighlighter1_303_345_Open_Image.style.display='inline'; Codehighlighter1_303_345_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setSession(Map&nbsp;session)&nbsp;</span><span id="Codehighlighter1_303_345_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_303_345_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_377_465_Open_Image" onclick="this.style.display='none'; Codehighlighter1_377_465_Open_Text.style.display='none'; Codehighlighter1_377_465_Closed_Image.style.display='inline'; Codehighlighter1_377_465_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_377_465_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_377_465_Closed_Text.style.display='none'; Codehighlighter1_377_465_Open_Image.style.display='inline'; Codehighlighter1_377_465_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;execute()&nbsp;</span><span id="Codehighlighter1_377_465_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_377_465_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.session.put(</span><span style="color: #000000">"</span><span style="color: #000000">USER_NAME</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Test&nbsp;User&nbsp;1</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;SUCCESS;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>在这个例子中实现了接口SessionAware中的setSession方法。<br />
&nbsp;<br />
上面两种方式都可以得到session，能实现的功能都是一样的。<br />
这里推荐通过第二种方式来使用session，原因是便于做单体测试，用第二种方式，只需要构造一个Map就可以对action class进行单体测试了。</p>
<p>&nbsp;&nbsp;&nbsp; 在一个项目中可能会有很多action都需要用到session，如果每个action都来实现org.apache.struts2.interceptor.SessionAware这个接口，可能会显得比较麻烦，所以建议作一个抽象的BaseAction类来实现org.apache.struts2.interceptor.SessionAware接口，以后所有的action只要继承这个BaseAction就可以了。<br />
&nbsp;<br />
下面是一个如何在JSP中使用session的例子。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_2_47_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_47_Open_Text.style.display='none'; Codehighlighter1_2_47_Closed_Image.style.display='inline'; Codehighlighter1_2_47_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2_47_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2_47_Closed_Text.style.display='none'; Codehighlighter1_2_47_Open_Image.style.display='inline'; Codehighlighter1_2_47_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_2_47_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2_47_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;page&nbsp;contentType</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">text/html;&nbsp;charset=UTF-8</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_55_81_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_81_Open_Text.style.display='none'; Codehighlighter1_55_81_Closed_Image.style.display='inline'; Codehighlighter1_55_81_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_55_81_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_55_81_Closed_Text.style.display='none'; Codehighlighter1_55_81_Open_Image.style.display='inline'; Codehighlighter1_55_81_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_55_81_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_55_81_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@page&nbsp;pageEncoding</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">utf-8</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_89_126_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_126_Open_Text.style.display='none'; Codehighlighter1_89_126_Closed_Image.style.display='inline'; Codehighlighter1_89_126_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_89_126_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_89_126_Closed_Text.style.display='none'; Codehighlighter1_89_126_Open_Image.style.display='inline'; Codehighlighter1_89_126_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_89_126_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_89_126_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@taglib&nbsp;prefix</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">s</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;uri</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">/struts-tags</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Session&nbsp;Test</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">s:property&nbsp;</span><span style="color: #ff0000">value</span><span style="color: #0000ff">="#session.USER_NAME"</span><span style="color: #0000ff">/&gt;&lt;/</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
<br />
一般在项目中往往会往session里放置一个Object，必如说user，user里有个boolean admin和String userName，如果user里存在isAdmin的方法，在jsp中可以通过&lt;s:if test="#session.user.admin"&gt;来判断用户有没有管理权限，通过&lt;s:property value="#session.user.userName"&gt;或者来取得用户名。<br />
<img src ="http://www.blogjava.net/supercrsky/aggbug/192855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-04-14 16:57 <a href="http://www.blogjava.net/supercrsky/articles/192855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STRUTS2中的日期处理</title><link>http://www.blogjava.net/supercrsky/articles/184400.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 07 Mar 2008 01:36:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/184400.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/184400.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/184400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/184400.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/184400.html</trackback:ping><description><![CDATA[<div class="blog_content">
<p>1.Struts2中的日期的格式化：</p>
<p>在struts2中，提供了&lt;s:date.../&gt;标签，可以很方便地处理日期。有了这个标签，就可以随意地以各种方式来格式化日期，如指定日期格式为&#8220;dd/MM/yyyy hh:mm&#8221;，或者是自定义可读性强的日期格式&#8220;2 hours 14 minutes&#8221;，或者使用在properties文件中预先定义好日期格式。</p>
<p>s:date标签共有四个属性，id，name，format，nice；</p>
<p>(1)nice：</p>
<p>&nbsp;&nbsp;&nbsp; 可以设为true或者false，表示是否漂亮地显示日期，如果设置为true，那么将FORMAT属性将不会生效，日期将按以下规则显示：</p>
<p>
<table border="1">
    <tbody>
        <tr>
            <td>i18n key</td>
            <td>default</td>
        </tr>
        <tr>
            <td>struts.date.format.past</td>
            <td>{0} ago</td>
        </tr>
        <tr>
            <td>struts.date.format.future</td>
            <td>in {0}</td>
        </tr>
        <tr>
            <td>struts.date.format.seconds</td>
            <td>an instant</td>
        </tr>
        <tr>
            <td>struts.date.format.minutes</td>
            <td>{0,choice,1#one minute|1&lt;{0} minutes}</td>
        </tr>
        <tr>
            <td>struts.date.format.hours</td>
            <td>{0,choice,1#one hour|1&lt;{0} hours}{1,choice,0#|1#, one minute|1&lt;, {1} minutes}</td>
        </tr>
        <tr>
            <td>struts.date.format.days</td>
            <td>{0,choice,1#one day|1&lt;{0} days}{1,choice,0#|1#, one hour|1&lt;, {1} hours}</td>
        </tr>
        <tr>
            <td>struts.date.format.years</td>
            <td>{0,choice,1#one year|1&lt;{0} years}{1,choice,0#|1#, one day|1&lt;, {1} days}</td>
        </tr>
    </tbody>
</table>
</p>
<p>以上是默认的显示规则，可以在properties文件中修改。</p>
<p>(2)format：</p>
<p>&nbsp;&nbsp;&nbsp; 当nice="false"时，format属性将起作用，如："yyyy-MM-dd hh:mm:ss"，其中，y是年(year)，M是月(Month)，d是日(day)，h是小时(hour，12小时制)，H也是小时(hour，24小时制)，m是分钟(minute)，s是秒(second)。</p>
<p>(3)当format未设置时，将会使用默认的格式DateFormat.MEDIUM format</p>
<p>&nbsp;</p>
<p>2.在struts2中使用日期控件：</p>
<p>&nbsp;&nbsp;&nbsp; 在struts2中，提供了日期控件，以方便地选择日期和时间，这是通过&lt;s:datetimepicker.../&gt;标签来实现的。该日期控件是通过DOJO来实现的，会在客户端生成一段JS代码，所以，要让该日期控件生效，需要在&lt;head&gt;&lt;/head&gt;中间加入以下代码：</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">s:head</span><span>&nbsp;</span><span class="attribute">theme</span><span>=</span><span class="attribute-value">"ajax"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp; 这样，就可以在页面中使用&lt;s:datetimepicker&gt;标签了。如：</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">s:datetimepicker</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"todayDate"</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">"Format (yyyy-MM-dd)"</span><span>&nbsp;</span><span class="attribute">displayFormat</span><span>=</span><span class="attribute-value">"yyyy-MM-dd"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp; 在页面中，就会显示出日期控件，其中displayFormat是要显示的日期格式。效果如下所示：</p>
<p><img alt="" src="http://www.roseindia.net/struts/struts2/date/struts2-date-picker.gif" /></p>
<p>参考资料：<font face="Arial">http://struts.apache.org/2.x/docs/datetimepicker.html</font></p>
</div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/184400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-03-07 09:36 <a href="http://www.blogjava.net/supercrsky/articles/184400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2中form提交到action中的中文参数乱码问题解决办法(包括取中文路径) </title><link>http://www.blogjava.net/supercrsky/articles/170549.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Wed, 26 Dec 2007 04:24:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/170549.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/170549.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/170549.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/170549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/170549.html</trackback:ping><description><![CDATA[我的前台页是这样的：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">action</span><span style="color: #0000ff">="test.action"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="post"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试文件:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="file"</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="doc"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="path"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">=""</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="提交"</span><span style="color: #ff0000">&nbsp;onclick</span><span style="color: #0000ff">=""</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></div>
Action:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.UnsupportedEncodingException;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.opensymphony.xwork2.ActionSupport;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />@SuppressWarnings(</span><span style="color: #000000">"</span><span style="color: #000000">serial</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionSupport<br />
<img id="Codehighlighter1_182_436_Open_Image" onclick="this.style.display='none'; Codehighlighter1_182_436_Open_Text.style.display='none'; Codehighlighter1_182_436_Closed_Image.style.display='inline'; Codehighlighter1_182_436_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_182_436_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_182_436_Closed_Text.style.display='none'; Codehighlighter1_182_436_Open_Image.style.display='inline'; Codehighlighter1_182_436_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_182_436_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_182_436_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;path;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getPath()<br />
<img id="Codehighlighter1_233_251_Open_Image" onclick="this.style.display='none'; Codehighlighter1_233_251_Open_Text.style.display='none'; Codehighlighter1_233_251_Closed_Image.style.display='inline'; Codehighlighter1_233_251_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_233_251_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_233_251_Closed_Text.style.display='none'; Codehighlighter1_233_251_Open_Image.style.display='inline'; Codehighlighter1_233_251_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_233_251_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_233_251_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;path;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setPath(String&nbsp;path)<br />
<img id="Codehighlighter1_289_312_Open_Image" onclick="this.style.display='none'; Codehighlighter1_289_312_Open_Text.style.display='none'; Codehighlighter1_289_312_Closed_Image.style.display='inline'; Codehighlighter1_289_312_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_289_312_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_289_312_Closed_Text.style.display='none'; Codehighlighter1_289_312_Open_Image.style.display='inline'; Codehighlighter1_289_312_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_289_312_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_289_312_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.path&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;path;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;test()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception<br />
<img id="Codehighlighter1_356_433_Open_Image" onclick="this.style.display='none'; Codehighlighter1_356_433_Open_Text.style.display='none'; Codehighlighter1_356_433_Closed_Image.style.display='inline'; Codehighlighter1_356_433_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_356_433_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_356_433_Closed_Text.style.display='none'; Codehighlighter1_356_433_Open_Image.style.display='inline'; Codehighlighter1_356_433_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_356_433_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_356_433_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(path.replace(</span><span style="color: #000000">"</span><span style="color: #000000">\\</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">\\\\</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;SUCCESS;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
刚开始的时候一选中文路径就输出？？？．<br />
后来终于找到解决方法．<br />
在struts.xml文件中加上:<br />
为了解决form提交到action中的中文参数乱码问题。<br />
&nbsp;<br />
1.在struts2-core-2.0.0-SNAPSHOT.jar包中路径为struts2-core-2.0.6\org\apache \struts2<br />
有一个default.properties 文件,把struts.i18n.encoding=UTF-8改为<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">struts.i18n.encoding=GBK&nbsp;</span></div>
<br />
2.或者在struts.xml文件内添加常量: <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">constant&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="struts.i18n.encoding"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="GBK"</span><span style="color: #0000ff">/&gt;</span></div>
<br />
我当然是用的第二种方法，简单方便．<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;struts&nbsp;PUBLIC<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.0//EN"<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;"http://struts.apache.org/dtds/struts-2.0.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">constant&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="struts.i18n.encoding"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="GBK"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">package&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="com"</span><span style="color: #ff0000">&nbsp;extends</span><span style="color: #0000ff">="struts-default"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="test"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.TestAction"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="test"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/ok.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">package</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
呵呵，终于解决了．希望对大家有些帮助．
<img src ="http://www.blogjava.net/supercrsky/aggbug/170549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-12-26 12:24 <a href="http://www.blogjava.net/supercrsky/articles/170549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2中的Result类型应用(action...etc跳转)</title><link>http://www.blogjava.net/supercrsky/articles/165033.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Mon, 03 Dec 2007 15:11:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/165033.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/165033.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/165033.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/165033.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/165033.html</trackback:ping><description><![CDATA[<h1><span style="font-family: Comic Sans MS">概况</span></h1>
<p><span style="font-family: Comic Sans MS"><strong>Result类型</strong> 是在Action执行完,一个结果返回后决定发生什么事的类。开发者可以自由的根据他们的应用和环境的需要创建自己的Result类型。例如在WebWork2中，Servlet和Velocity结果类型已经被创建用来显示web应用程序的画面。</span></p>
<p><span style="font-family: Comic Sans MS"><ins>注意:</ins> 所有的webwork内建的Result类型都实现了com.opensymphony.xwork.Result接口. 这个接口是所有action执行结果的通用接口,不管这个结果是用来显示一个网页还是产生一个email,发送一个JMS消息,等.</span></p>
<p><span style="font-family: Comic Sans MS">Result类型配置中定义了一些类,把它们映射为action配置中可以引用的名字. 也就是为这些类创建便于记忆的键-值对.</span></p>
<strong><span style="font-family: Comic Sans MS">snippet of webwork-default.xml</span></strong>
<pre class="code-xml"><span style="font-family: Comic Sans MS">...
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">result-types</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result-type&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dispatcher"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.opensymphony.webwork.dispatcher.ServletDispatcherResult"</span><span style="color: #ff0000">&nbsp;default</span><span style="color: #0000ff">="true"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result-type&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="redirect"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.opensymphony.webwork.dispatcher.ServletRedirectResult"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result-type&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="velocity"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.opensymphony.webwork.dispatcher.VelocityResult"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result-type&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="chain"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.opensymphony.xwork.ActionChainResult"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result-type&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="xslt"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.opensymphony.webwork.views.xslt.XSLTResult"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result-type&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="jasper"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.opensymphony.webwork.views.jasperreports.JasperReportsResult"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result-type&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="freemarker"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.opensymphony.webwork.views.freemarker.FreemarkerResult"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result-type&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="httpheader"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.opensymphony.webwork.dispatcher.HttpHeaderResult"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result-type&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="stream"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.opensymphony.webwork.dispatcher.StreamResult"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result-type&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="plaintext"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.opensymphony.webwork.dispatcher.PlainTextResult"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result-types</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
...</span></pre>
<strong><span style="font-family: Comic Sans MS">snippet of your xwork.xml</span></strong>
<pre class="code-xml"><span style="font-family: Comic Sans MS"><span class="code-tag">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">file</span><span style="color: #0000ff">="webwork-default.xml"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">package&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="myPackage"</span><span style="color: #ff0000">&nbsp;extends</span><span style="color: #0000ff">="default"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="bar"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="myPackage.barAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;default&nbsp;result&nbsp;type&nbsp;is&nbsp;"dispatcher"&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;default&nbsp;result&nbsp;name&nbsp;is&nbsp;"success"&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">foo.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="error"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">error.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">package</span><span style="color: #0000ff">&gt;</span></div>
</span></span></pre>
<h1><a name="ResultTypes-Result%E7%B1%BB%E5%9E%8B"></a><span style="font-family: Comic Sans MS">Result类型</span></h1>
<p><span style="font-family: Comic Sans MS">Webwork提供了一些com.opensymphony.xwork.Result接口的实现来使你的action可以容易的用户交互.这些Result类型包括:</span></p>
<ul>
    <li><a title="Chain Result" href="http://wiki.javascud.org/display/ww2cndoc/Chain+Result"><span style="font-family: Comic Sans MS">Chain Result</span></a><span style="font-family: Comic Sans MS"> - 用于 </span><a title="Action Chaining" href="http://wiki.javascud.org/display/ww2cndoc/Action+Chaining"><span style="font-family: Comic Sans MS">Action Chaining</span></a><span style="font-family: Comic Sans MS"> </span>
    <li><a title="Dispatcher Result" href="http://wiki.javascud.org/display/ww2cndoc/Dispatcher+Result"><span style="font-family: Comic Sans MS">Dispatcher Result</span></a><span style="font-family: Comic Sans MS"> - 用于 </span><a title="JSP" href="http://wiki.javascud.org/display/ww2cndoc/JSP"><span style="font-family: Comic Sans MS">JSP</span></a><span style="font-family: Comic Sans MS"> 整合 </span>
    <li><a title="FreeMarker Result" href="http://wiki.javascud.org/display/ww2cndoc/FreeMarker+Result"><span style="font-family: Comic Sans MS">FreeMarker Result</span></a><span style="font-family: Comic Sans MS"> - 用于 </span><a title="FreeMarker" href="http://wiki.javascud.org/display/ww2cndoc/FreeMarker"><span style="font-family: Comic Sans MS">FreeMarker</span></a><span style="font-family: Comic Sans MS"> 整合 </span>
    <li><a title="HttpHeader Result" href="http://wiki.javascud.org/display/ww2cndoc/HttpHeader+Result"><span style="font-family: Comic Sans MS">HttpHeader Result</span></a><span style="font-family: Comic Sans MS"> - 用于控制特殊的HTTP行为 </span>
    <li><a title="JasperReports Result" href="http://wiki.javascud.org/display/ww2cndoc/JasperReports+Result"><span style="font-family: Comic Sans MS">JasperReports Result</span></a><span style="font-family: Comic Sans MS"> - 用于 </span><a title="JasperReports" href="http://wiki.javascud.org/display/ww2cndoc/JasperReports"><span style="font-family: Comic Sans MS">JasperReports</span></a><span style="font-family: Comic Sans MS"> 整合 </span>
    <li><a title="Redirect Result" href="http://wiki.javascud.org/display/ww2cndoc/Redirect+Result"><span style="font-family: Comic Sans MS">Redirect Result</span></a><span style="font-family: Comic Sans MS"> - 用于直接跳转到例外的URL </span>
    <li><a title="Redirect Action Result" href="http://wiki.javascud.org/display/ww2cndoc/Redirect+Action+Result"><span style="font-family: Comic Sans MS">Redirect Action Result</span></a><span style="font-family: Comic Sans MS"> - 用于直接跳转到另外的action </span>
    <li><a title="Stream Result" href="http://wiki.javascud.org/display/ww2cndoc/Stream+Result"><span style="font-family: Comic Sans MS">Stream Result</span></a><span style="font-family: Comic Sans MS"> - 用于向浏览器返回一个InputStream (一般用于文件下载) </span>
    <li><a title="Velocity Result" href="http://wiki.javascud.org/display/ww2cndoc/Velocity+Result"><span style="font-family: Comic Sans MS">Velocity Result</span></a><span style="font-family: Comic Sans MS"> - 用于 </span><a title="Velocity" href="http://wiki.javascud.org/display/ww2cndoc/Velocity"><span style="font-family: Comic Sans MS">Velocity</span></a><span style="font-family: Comic Sans MS"> 整合 </span>
    <li><a title="XSL Result" href="http://wiki.javascud.org/display/ww2cndoc/XSL+Result"><span style="font-family: Comic Sans MS">XSL Result</span></a><span style="font-family: Comic Sans MS"> - 用于 XML/XSLT 整合 </span>
    <li><a title="PlainText Result" href="http://wiki.javascud.org/display/ww2cndoc/PlainText+Result"><span style="font-family: Comic Sans MS">PlainText Result</span></a><span style="font-family: Comic Sans MS"> - 用于显示某个页面的原始的文本 (例如 jsp, html 等) </span></li>
</ul>
<p><span style="font-family: Comic Sans MS">Result定义在xwork xml配置文件(xwork.xml)中的action标签里。如果location参数是result标签的唯一的参数，你可以这样简化:</span></p>
<pre class="code-xml"><span style="font-family: Comic Sans MS"><span class="code-tag">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="bar"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="myPackage.barAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="dispatcher"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="location"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">foo.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span></div>
</span></span></pre>
<p><span style="font-family: Comic Sans MS">或者</span></p>
<pre class="code-xml"><span style="font-family: Comic Sans MS"><span class="code-tag">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="bar"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="myPackage.barAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="dispatcher"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">foo.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span></div>
</span></span></pre>
<p><span style="font-family: Comic Sans MS">如果你扩展了webwork-default.xml, 那么默认的返回类型是"dispatcher". 同样,如果你没有指定result的名字,默认将是"success". 就是说你可以如下简化:</span></p>
<pre class="code-xml"><span style="font-family: Comic Sans MS"><span class="code-tag">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="bar"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="myPackage.barAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">foo.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span></div>
</span></span></pre>
<p><span style="font-family: Comic Sans MS"><ins>注意</ins> : Parse属性允许的location参数作为表达式.例如你可以这样用:<br />
Struts2中从一个Action跳转到另一个action,必须将type="redirect"<br />
</span></p>
<pre class="code-xml"><span style="font-family: Comic Sans MS"><span class="code-tag">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="redirect"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/displayCart.action?userId=${userId}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span></div>
</span></span></pre>
<p><span style="font-family: Comic Sans MS"><ins>注意</ins> : 你也可以指定全局Result以便在多个action中使用. 当要为很多不同的action添加相同的结果是这样会节省时间. Result标签和全局Result的更多信息,参见</span><a title="Result Configuration" href="http://wiki.javascud.org/display/ww2cndoc/Result+Configuration"><span style="font-family: Comic Sans MS">Result配置</span></a><span style="font-family: Comic Sans MS">部分<br />
<a title="原文" href="http://wiki.javascud.org/display/ww2cndoc/Result+Types">原文</a></span></p>
<img src ="http://www.blogjava.net/supercrsky/aggbug/165033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-12-03 23:11 <a href="http://www.blogjava.net/supercrsky/articles/165033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2中实现文件上传(附源码)</title><link>http://www.blogjava.net/supercrsky/articles/163529.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Tue, 27 Nov 2007 11:49:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/163529.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/163529.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/163529.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/163529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/163529.html</trackback:ping><description><![CDATA[<table width="100%">
    <tbody>
        <tr>
            <td>
            <p>Struts2使用开源项目Apache Jakarta Commons FileUpload和内建的FileUploadInterceptor拦截器实现文件上传.</p>
            </td>
        </tr>
    </tbody>
</table>
<br />
实现原理 :
<p>Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹，然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。</p>
<h2>具体实现</h2>
<p>前段时间Apache发布了Struts 2.1GA，所以本文的实现是以该版本的Struts作为框架的。以下是例子所依赖类包的列表：<br />
<img alt="依赖类包的列表" src="http://www.blogjava.net/images/blogjava_net/max/20810/r_img1.gif" /><br />
其中commons-io-1.1.jar和commons-fileupload-1.1.3.jar可以在<br />
http://jakarta.apache.org/<br />
上下载.<br />
</p>
<p>★ 文件上传页面 index.jsp:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_2_46_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_46_Open_Text.style.display='none'; Codehighlighter1_2_46_Closed_Image.style.display='inline'; Codehighlighter1_2_46_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2_46_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2_46_Closed_Text.style.display='none'; Codehighlighter1_2_46_Open_Image.style.display='inline'; Codehighlighter1_2_46_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_2_46_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2_46_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;page&nbsp;language</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">java</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;pageEncoding</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">GB18030</span><span style="color: #000000; background-color: #f5f5f5">"</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_52_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_52_89_Open_Text.style.display='none'; Codehighlighter1_52_89_Closed_Image.style.display='inline'; Codehighlighter1_52_89_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_52_89_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_52_89_Closed_Text.style.display='none'; Codehighlighter1_52_89_Open_Image.style.display='inline'; Codehighlighter1_52_89_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_52_89_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_52_89_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@taglib&nbsp;prefix</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">s</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;uri</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">/struts-tags</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Upload&nbsp;Page</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:form&nbsp;</span><span style="color: #ff0000">action</span><span style="color: #0000ff">="upload"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="post"</span><span style="color: #ff0000">&nbsp;enctype</span><span style="color: #0000ff">="multipart/form-data"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:file&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="doc"</span><span style="color: #ff0000">&nbsp;label</span><span style="color: #0000ff">="File"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:submit&nbsp;</span><span style="color: #ff0000">value</span><span style="color: #0000ff">="upload"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">s:form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
先将表单的提交方式设为POST，然后将enctype设为multipart/form-data，这并没有什么特别之处.<br />
★ 处理文件上传 FileUploadAction.java:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.File;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.text.SimpleDateFormat;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Date;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Random;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.commons.io.FileUtils;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts2.ServletActionContext;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.opensymphony.xwork2.ActionSupport;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;FileUploadAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionSupport<br />
<img id="Codehighlighter1_307_1584_Open_Image" onclick="this.style.display='none'; Codehighlighter1_307_1584_Open_Text.style.display='none'; Codehighlighter1_307_1584_Closed_Image.style.display='inline'; Codehighlighter1_307_1584_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_307_1584_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_307_1584_Closed_Text.style.display='none'; Codehighlighter1_307_1584_Open_Image.style.display='inline'; Codehighlighter1_307_1584_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_307_1584_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_307_1584_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">4658947796066228597L</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;File&nbsp;doc;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;fileName;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;contentType;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setDoc(File&nbsp;file)<br />
<img id="Codehighlighter1_484_506_Open_Image" onclick="this.style.display='none'; Codehighlighter1_484_506_Open_Text.style.display='none'; Codehighlighter1_484_506_Closed_Image.style.display='inline'; Codehighlighter1_484_506_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_484_506_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_484_506_Closed_Text.style.display='none'; Codehighlighter1_484_506_Open_Image.style.display='inline'; Codehighlighter1_484_506_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_484_506_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_484_506_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.doc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;file;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setDocFileName(String&nbsp;fileName)<br />
<img id="Codehighlighter1_555_586_Open_Image" onclick="this.style.display='none'; Codehighlighter1_555_586_Open_Text.style.display='none'; Codehighlighter1_555_586_Closed_Image.style.display='inline'; Codehighlighter1_555_586_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_555_586_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_555_586_Closed_Text.style.display='none'; Codehighlighter1_555_586_Open_Image.style.display='inline'; Codehighlighter1_555_586_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_555_586_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_555_586_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.fileName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fileName;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setDocContentType(String&nbsp;contentType)<br />
<img id="Codehighlighter1_641_678_Open_Image" onclick="this.style.display='none'; Codehighlighter1_641_678_Open_Text.style.display='none'; Codehighlighter1_641_678_Closed_Image.style.display='inline'; Codehighlighter1_641_678_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_641_678_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_641_678_Closed_Text.style.display='none'; Codehighlighter1_641_678_Open_Image.style.display='inline'; Codehighlighter1_641_678_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_641_678_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_641_678_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.contentType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;contentType;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;execute()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception<br />
<img id="Codehighlighter1_735_1189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_735_1189_Open_Text.style.display='none'; Codehighlighter1_735_1189_Closed_Image.style.display='inline'; Codehighlighter1_735_1189_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_735_1189_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_735_1189_Closed_Text.style.display='none'; Codehighlighter1_735_1189_Open_Image.style.display='inline'; Codehighlighter1_735_1189_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_735_1189_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_735_1189_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">fileName:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;fileName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">contextType</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;contentType);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;得到当前web工程下的/files目录的在本机的绝对路径，如果没有这个文件夹则会创建</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;targetDirectory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ServletActionContext.getServletContext()<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getRealPath(</span><span style="color: #000000">"</span><span style="color: #000000">/files</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">重命名上传文件</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;targetFileName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;generateFileName(fileName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">在指定目录创建文件</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;target&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(targetDirectory,&nbsp;targetFileName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">把要上传的文件copy过去</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileUtils.copyFile(doc,&nbsp;target);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;SUCCESS;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">重命名上传文件（非必须）</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;generateFileName(String&nbsp;fileName)<br />
<img id="Codehighlighter1_1257_1526_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1257_1526_Open_Text.style.display='none'; Codehighlighter1_1257_1526_Closed_Image.style.display='inline'; Codehighlighter1_1257_1526_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1257_1526_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1257_1526_Closed_Text.style.display='none'; Codehighlighter1_1257_1526_Open_Image.style.display='inline'; Codehighlighter1_1257_1526_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1257_1526_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1257_1526_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;formatDate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yyMMddHHmmss</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.format(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;random&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Random().nextInt(</span><span style="color: #000000">10000</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;position&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fileName.lastIndexOf(</span><span style="color: #000000">"</span><span style="color: #000000">.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;extension&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fileName.substring(position);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;formatDate&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;random&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;extension;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getFileName()<br />
<img id="Codehighlighter1_1559_1581_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1559_1581_Open_Text.style.display='none'; Codehighlighter1_1559_1581_Closed_Image.style.display='inline'; Codehighlighter1_1559_1581_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1559_1581_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1559_1581_Closed_Text.style.display='none'; Codehighlighter1_1559_1581_Open_Image.style.display='inline'; Codehighlighter1_1559_1581_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1559_1581_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1559_1581_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;fileName;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
在fileupload.jsp中，只有doc一个字段，而FileUploadAction.java中，却有三个字段，Struts2怎么通过页面的一个字段设置Action里的三个字段呢？没错，这就是FileUploadInterceptor的功劳了！你所要做的只是按照一定的样式命名这三个字段的set方法，而字段名可以任意命名。第一个File类型的字段的set方法还是以常规的方式命名，另两个String类型的字段的set方法必须分别以&#8220;File字段的set方法名+FileName&#8221;和&#8220;File字段的set方法名+ContentType&#8221;来命名。</p>
★ 配置文件 struts.xml&nbsp;:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;struts&nbsp;PUBLIC<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.0//EN"<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;"http://struts.apache.org/dtds/struts-2.0.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">package&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="com"</span><span style="color: #ff0000">&nbsp;extends</span><span style="color: #0000ff">="struts-default"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="upload"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.FileUploadAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/success.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">package</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
★ 配置文件 web.xml:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-app&nbsp;</span><span style="color: #ff0000">version</span><span style="color: #0000ff">="2.4"</span><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/j2ee"</span><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/j2ee&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts-cleanup</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.struts2.dispatcher.ActionContextCleanUp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.struts2.dispatcher.FilterDispatcher</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts-cleanup</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
OK!源码可以我的微软网盘下载.
 <img src ="http://www.blogjava.net/supercrsky/aggbug/163529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-27 19:49 <a href="http://www.blogjava.net/supercrsky/articles/163529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2中的链接标签</title><link>http://www.blogjava.net/supercrsky/articles/163357.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Mon, 26 Nov 2007 15:52:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/163357.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/163357.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/163357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/163357.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/163357.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt">为了使从一个页面中链接一个动态数据变得简单，Struts2框架提供了一系列的标签。<br />
Struts2标签的一种用法是创建链接到其他Web资源，特别是针对那些在本地应用中的资源。<br />
&nbsp;<br />
1．普通链接<br />
Web程序中最普通的应用是链接到其他页面，下面看Welcome.jsp。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_2_47_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_47_Open_Text.style.display='none'; Codehighlighter1_2_47_Closed_Image.style.display='inline'; Codehighlighter1_2_47_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2_47_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2_47_Closed_Text.style.display='none'; Codehighlighter1_2_47_Open_Image.style.display='inline'; Codehighlighter1_2_47_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_2_47_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2_47_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;page&nbsp;contentType</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">text/html;&nbsp;charset=UTF-8</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_53_91_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_91_Open_Text.style.display='none'; Codehighlighter1_53_91_Closed_Image.style.display='inline'; Codehighlighter1_53_91_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_53_91_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_53_91_Closed_Text.style.display='none'; Codehighlighter1_53_91_Open_Image.style.display='inline'; Codehighlighter1_53_91_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_53_91_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_53_91_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;taglib&nbsp;prefix</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">s</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;uri</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">/struts-tags</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Welcome</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">link&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="&lt;s:url&nbsp;value="</span><span style="color: #ff0000">/css/tutorial.css"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">"&nbsp;rel="stylesheet"<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type="text/css"/&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h3</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Commands</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">h3</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ul</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="&lt;s:url&nbsp;action="</span><span style="color: #ff0000">Login_input"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">"&gt;Sign&nbsp;On</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="&lt;s:url&nbsp;action="</span><span style="color: #ff0000">Register"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">"&gt;Register</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ul</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
<p>1.1说明<br />
1．&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;<br />
此句表示导入struts标签，并以s为前缀。即以s为前缀的标签均来自struts标签库。<br />
&nbsp;<br />
2．&lt;link href="&lt;s:url value="/css/tutorial.css"/&gt;" rel="stylesheet" type="text/css"/&gt;<br />
此句表示利用url标签导入一个路径，链接到一个文件，注意此路径为项目下的绝对路径。<br />
&nbsp;<br />
3．&lt;a href="&lt;s:url action="Login_input"/&gt;"&gt;Sign On&lt;/a&gt;<br />
此句表示利用url标签链接到一个action。<br />
&nbsp;<br />
1.2注册action<br />
我们在struts.xml中注册一个action来显示welcome.jsp。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Welcome"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/example/Welcome.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span></div>
<p>&nbsp;</p>
<p>注意此action注册在package example下，所以在地址栏中敲入http://localhost:8080/StrutsHelloWorld/example/Welcome.action（StrutsHelloWorld是project名），会导向到Welcome.jsp。<br />
&nbsp;<br />
2．使用通配符<br />
对于上面的action注册，我们也可以用下面的语句代替。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="*"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/example/{1}.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span></div>
<p>此句的意思是，如果在没有找到匹配的action名称的情况下，默认调用action名称.jsp。第一句中星号指任意，而第二句中{1}指代第一句中星号指代的内容。</p>
<p>&nbsp;&nbsp;&nbsp; 举个例子，如果在地址栏中敲入http://localhost:8080/StrutsHelloWorld/example/1.action，则系统查找struts.xml，发现没有name为1的action，即最后调用name为星号的这个action，根据此action，将输出/example/1.jsp。</p>
<p><br />
或者读者可以直接点击Welcome.jsp中的两个超链接，系统将会报错找不到Login_input.jsp和Register.jsp。因为这两个action还没有注册，也没有相应的jsp文件。<br />
&nbsp;<br />
3．带参数的链接<br />
超链接后面带有参数大家不会陌生，诸如http://www.apache.com/?language=ch。这个链接后面带有一个language参数，其值为ch。你可以通过request.getParameter(&#8220;language&#8221;)找到参数值。下面演示在struts2中如何设置带参数的链接。看HelloWorld.jsp。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_2_39_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_39_Open_Text.style.display='none'; Codehighlighter1_2_39_Closed_Image.style.display='inline'; Codehighlighter1_2_39_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2_39_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2_39_Closed_Text.style.display='none'; Codehighlighter1_2_39_Open_Image.style.display='inline'; Codehighlighter1_2_39_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_2_39_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2_39_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;taglib&nbsp;prefix</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">s</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;uri</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">/struts-tags</span><span style="color: #000000; background-color: #f5f5f5">"</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Hello&nbsp;World!</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h2</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">s:property&nbsp;</span><span style="color: #ff0000">value</span><span style="color: #0000ff">="message"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;&lt;/</span><span style="color: #800000">h2</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h3</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Languages</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">h3</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ul</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:url&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="url"</span><span style="color: #ff0000">&nbsp;action</span><span style="color: #0000ff">="HelloWorld"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="request_locale"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">en</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">s:param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">s:url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="%{url}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">English</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">s:a</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:url&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="url"</span><span style="color: #ff0000">&nbsp;action</span><span style="color: #0000ff">="HelloWorld"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="request_locale"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">es</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">s:param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">s:url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="%{url}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Espanol</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">s:a</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ul</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
3.1说明<br />
1．&lt;s:url id="url" action="HelloWorld"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;s:param name="request_locale"&gt;en&lt;/s:param&gt;<br />
&lt;/s:url&gt;<br />
此段表示设置一个url标签指向名为HelloWorld的action，此标签带一个id取名为url，后面会用到。带一个参数request_locale，其值为en。<br />
&nbsp;<br />
2．&lt;s:a href="%{url}"&gt;English&lt;/s:a&gt;<br />
此句用到了struts2的超链接标签，连接的地址即为1中url，点击English，发出的信息为：http://localhost:8080/StrutsHelloWorld/example/HelloWorld.action？request_locale=en<br />
&nbsp;<br />
3.2注册action到struts.xml<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">package&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="example"</span><span style="color: #ff0000">&nbsp;namespace</span><span style="color: #0000ff">="/example"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extends</span><span style="color: #0000ff">="struts-default"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="HelloWorld"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/example/HelloWorld.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
</span>
<img src ="http://www.blogjava.net/supercrsky/aggbug/163357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-26 23:52 <a href="http://www.blogjava.net/supercrsky/articles/163357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Struts2中的ActionSupport中的validate方法进行表单验证</title><link>http://www.blogjava.net/supercrsky/articles/162872.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 24 Nov 2007 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162872.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162872.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162872.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162872.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162872.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在你的的web中加入struts2的jar包支持.第一步:web.xml:&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;&lt;web-app&nbsp;version="2.4"&nbsp;xmlns="http://java.sun.com/xml/ns/j2ee"&nbsp;&nbsp;&nbsp;&nbsp;xm...&nbsp;&nbsp;<a href='http://www.blogjava.net/supercrsky/articles/162872.html'>阅读全文</a><img src ="http://www.blogjava.net/supercrsky/aggbug/162872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 17:19 <a href="http://www.blogjava.net/supercrsky/articles/162872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Struts2自带的拦截器</title><link>http://www.blogjava.net/supercrsky/articles/162770.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 23 Nov 2007 23:47:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162770.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162770.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162770.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162770.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162770.html</trackback:ping><description><![CDATA[<tr>
    <td height="86" width="368" align="left" valign="top">
    <p>&nbsp;&nbsp;&nbsp;首先，要跟大家道个歉，前一阵子为给客户个一个DEMO，忙得不可开交，所以很久没有更新Blog。提到这个DEMO我想顺便跟大家分享一下心得——如果大家希望快速开发，一个类似Struts 2这样的简单方便的WEB框架必不可少。我们在开发DEMO使用的还是Struts 1.2.8，而且没有不使用任何EL（表达式语言），导致页面出现无数类似<br />
    <br />
    &#8220;&lt;%= ((Integer) request.getAttribute("xx")).intValue()%6 %&gt;&#8221;<br />
    <br />
    的代码。Struts 1.x的Form Bean的麻烦使得有部分同事直接使用request.getParameter(String arg)，继而引入另一种麻烦。诸如此类的问题，在DEMO这样时间紧迫的项目凸显了Struts 1.x对快速开发的无能为力。不过没办法，由于我们项目中的几个资深员工除了Struts 1.x外，对其它的WEB框架似乎不大感兴趣。 </p>
    <p>&nbsp;&nbsp;&nbsp;&nbsp;言归正传，Interceptor（以下译为拦截器）是Struts 2的一个强有力的工具，有许多功能（feature）都是构建于它之上，如<a href="http://www.blogjava.net/max/archive/2006/11/01/78536.html">国际化</a>、<a href="http://www.blogjava.net/max/archive/2006/11/07/79602.html">转换器</a>，<a href="http://www.blogjava.net/max/archive/2006/11/14/81106.html">校验</a>等。</p>
    </td>
    <td width="348" valign="top"><script type="text/javascript"><!-- google_ad_client="pub-1832179689702023" ; google_ad_width="336;
google_ad_height" = 280; google_ad_format="336x280_as" ; google_ad_type="text_image" ;
//2007-01-10: 336_280 google_ad_channel="7111701428" ; google_color_border="FFFFFF" ; google_color_bg="FFFFFF" ; google_color_link="0000FF" ; google_color_text="000000" ; google_color_url="3D81EE" ;
//--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script></td>
</tr>
<p>&nbsp;</p>
<!--done--><br />
<span class="style1">什么是拦截器</span>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拦截器，在AOP（Aspect-Oriented Programming）中用于在某个方法或字段被访问之前，进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码，也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;谈到拦截器，还有一个词大家应该知道——拦截器链（Interceptor Chain，在Struts 2中称为拦截器栈Interceptor Stack）。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时，拦截器链中的拦截器就会按其之前定义的顺序被调用。</p>
<h2>实现原理</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时，Struts 2会查找配置文件，并根据其配置实例化相对的拦截器对象，然后串成一个列表（list），最后一个一个地调用列表中的拦截器，如图1所示。</p>
<p><img alt="图１　拦截器调用序列图" src="http://www.java3z.com/cwbwebhome/article/article2/img1/r_pic1.jpg" /> <br />
<span style="font-size: smaller; font-style: italic">图１　拦截器调用序列图</span> </p>
<h2>已有的拦截器</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;Struts 2已经为您提供丰富多样的，功能齐全的拦截器实现。大家可以到struts2-all-2.0.1.jar或struts2-core-2.0.1.jar包的struts-default.xml查看关于默认的拦截器与拦截器链的配置。</p>
<table style="border-right: #f0c000 1px solid; border-top: #f0c000 1px solid; margin-top: 8px; margin-bottom: 8px; border-left: #f0c000 1px solid; border-bottom: #f0c000 1px solid; background-color: #ffffce; text-align: left" cellspacing="0" cellpadding="0" border="0">
    <tbody>
        <tr>
            <td style="padding-right: 4px; padding-left: 4px; padding-bottom: 4px; padding-top: 4px"><img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/lightbulb_on.gif" /> </td>
            <td style="padding-right: 4px; padding-left: 4px; padding-bottom: 4px; padding-top: 4px; font-family: 黑体, 宋体, Tahoma, Arial">在本文使用是Struts 2的最新发布版本2.0.1。需要下载的朋友请点击以下链接：<br />
            <a href="http://apache.justdn.org/struts/binaries/struts-2.0.1-all.zip">http://apache.justdn.org/struts/binaries/struts-2.0.1-all.zip</a></td>
        </tr>
    </tbody>
</table>
<p>以下部分就是从struts-default.xml文件摘取的内容：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="alias"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.AliasInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="autowiring"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="chain"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.ChainingInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="conversionError"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="createSession"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.CreateSessionInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="debugging"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.debugging.DebuggingInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="external-ref"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="execAndWait"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="exception"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="fileUpload"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.FileUploadInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="i18n"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.I18nInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="logger"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.LoggingInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="model-driven"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="scoped-model-driven"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="params"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.ParametersInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="prepare"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.PrepareInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="static-params"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="scope"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.ScopeInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="servlet-config"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.ServletConfigInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="sessionAutowiring"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="timer"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.TimerInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="token"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.TokenInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="token-session"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="validation"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.validator.ValidationInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="workflow"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="store"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.MessageStoreInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="checkbox"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.CheckboxInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="profiling"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="org.apache.struts2.interceptor.ProfilingActivationInterceptor"</span> <span style="color: #0000ff">/&gt;</span> </div>
<h2>配置和使用拦截器</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在struts-default.xml中已经配置了以上的拦截器。如果您想要使用上述拦截器，只需要在应用程序struts.xml文件中通过&#8220;&lt;include file="struts-default.xml" /&gt;&#8221;将struts-default.xml文件包含进来，并继承其中的struts-default包（package），最后在定义Action时，使用&#8220;&lt;interceptor-ref name="xx" /&gt;&#8221;引用拦截器或拦截器栈（interceptor stack）。一旦您继承了struts-default包（package），所有Action都会调用拦截器栈 ——defaultStack。当然，在Action配置中加入&#8220;&lt;interceptor-ref name="xx" /&gt;&#8221;可以覆盖defaultStack。</p>
<p>下面是关于拦截器timer使用的例子。首先，新建Action类tuotrial/TimerInterceptorAction.java，内容如下：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/None.gif" align="top" /> <span style="color: #0000ff">package</span> <span style="color: #000000">tutorial;<br />
<img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/None.gif" align="top" /><br />
<img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/None.gif" align="top" /></span> <span style="color: #0000ff">import</span> <span style="color: #000000">com.opensymphony.xwork2.ActionSupport;<br />
<img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/None.gif" align="top" /><br />
<img id="Codehighlighter1_124_281_Open_Image" onclick="this.style.display='none'; Codehighlighter1_124_281_Open_Text.style.display='none'; Codehighlighter1_124_281_Closed_Image.style.display='inline'; Codehighlighter1_124_281_Closed_Text.style.display='inline';" alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_124_281_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_124_281_Closed_Text.style.display='none'; Codehighlighter1_124_281_Open_Image.style.display='inline'; Codehighlighter1_124_281_Open_Text.style.display='inline';" alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/ContractedBlock.gif" align="top" /></span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> <span style="color: #000000">TimerInterceptorAction </span><span style="color: #0000ff">extends</span> <span style="color: #000000">ActionSupport </span><span id="Codehighlighter1_124_281_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/dot.gif" /> </span><span id="Codehighlighter1_124_281_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/InBlock.gif" align="top" /> &nbsp; &nbsp;@Override<br />
<img id="Codehighlighter1_162_279_Open_Image" onclick="this.style.display='none'; Codehighlighter1_162_279_Open_Text.style.display='none'; Codehighlighter1_162_279_Closed_Image.style.display='inline'; Codehighlighter1_162_279_Closed_Text.style.display='inline';" alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_162_279_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_162_279_Closed_Text.style.display='none'; Codehighlighter1_162_279_Open_Image.style.display='inline'; Codehighlighter1_162_279_Open_Text.style.display='inline';" alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/ContractedSubBlock.gif" align="top" /> &nbsp; &nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">String execute() </span><span id="Codehighlighter1_162_279_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/dot.gif" /> </span><span id="Codehighlighter1_162_279_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_170_209_Open_Image" onclick="this.style.display='none'; Codehighlighter1_170_209_Open_Text.style.display='none'; Codehighlighter1_170_209_Closed_Image.style.display='inline'; Codehighlighter1_170_209_Closed_Text.style.display='inline';" alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_170_209_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_170_209_Closed_Text.style.display='none'; Codehighlighter1_170_209_Open_Image.style.display='inline'; Codehighlighter1_170_209_Open_Text.style.display='inline';" alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/ContractedSubBlock.gif" align="top" /> &nbsp; &nbsp; &nbsp; &nbsp;</span> <span style="color: #0000ff">try</span> <span id="Codehighlighter1_170_209_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/dot.gif" /> </span><span id="Codehighlighter1_170_209_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/InBlock.gif" align="top" /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span> <span style="color: #008000">//</span> <span style="color: #008000">模拟耗时的操作</span> <span style="color: #008000"><br />
<img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/InBlock.gif" align="top" /> </span><span style="color: #000000">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Thread.sleep(</span> <span style="color: #000000">500</span> <span style="color: #000000">);<br />
<img id="Codehighlighter1_230_258_Open_Image" onclick="this.style.display='none'; Codehighlighter1_230_258_Open_Text.style.display='none'; Codehighlighter1_230_258_Closed_Image.style.display='inline'; Codehighlighter1_230_258_Closed_Text.style.display='inline';" alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_230_258_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_230_258_Closed_Text.style.display='none'; Codehighlighter1_230_258_Open_Image.style.display='inline'; Codehighlighter1_230_258_Open_Text.style.display='inline';" alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/ContractedSubBlock.gif" align="top" /> &nbsp; &nbsp; &nbsp; &nbsp;}</span> </span><span style="color: #0000ff">catch</span> <span style="color: #000000">(Exception e) </span><span id="Codehighlighter1_230_258_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/dot.gif" /> </span><span id="Codehighlighter1_230_258_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/InBlock.gif" align="top" /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;e.printStackTrace();<br />
<img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/ExpandedSubBlockEnd.gif" align="top" /> &nbsp; &nbsp; &nbsp; &nbsp;}</span> </span><span style="color: #000000"><br />
<img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/InBlock.gif" align="top" /> &nbsp; &nbsp; &nbsp; &nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">SUCCESS;<br />
<img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/ExpandedSubBlockEnd.gif" align="top" /> &nbsp; &nbsp;}</span> </span><span style="color: #000000"><br />
<img alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/ExpandedBlockEnd.gif" align="top" />}</span> </span></div>
<p>配置Action，名为Timer，配置文件如下：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">&lt;!</span> <span style="color: #ff00ff">DOCTYPE struts PUBLIC<br />
&nbsp; &nbsp; &nbsp; &nbsp; "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />
&nbsp; &nbsp; &nbsp; &nbsp; "http://struts.apache.org/dtds/struts-2.0.dtd"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">struts</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">include </span><span style="color: #ff0000">file</span> <span style="color: #0000ff">="struts-default.xml"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000">&nbsp; &nbsp;<br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">package </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="InterceptorDemo"</span> <span style="color: #ff0000">extends</span> <span style="color: #0000ff">="struts-default"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">action </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="Timer"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="tutorial.TimerInterceptorAction"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor-ref </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="timer"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">result</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">/Timer.jsp</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">result</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">action</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">package</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">struts</span> <span style="color: #0000ff">&gt;</span> </div>
<p>至于Timer.jsp可以随意写些什么到里面。发布运行应用程序，在浏览器的地址栏键入<a href="http://localhost:8080/Struts2_Interceptor/Timer.action">http://localhost:8080/Struts2_Interceptor/Timer.action</a>，在出现Timer.jsp页面后，查看服务器的后台输出。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">2006</span> <span style="color: #000000">-</span> <span style="color: #000000">12</span> <span style="color: #000000">-</span> <span style="color: #000000">6</span> <span style="color: #000000">14</span> <span style="color: #000000">:</span> <span style="color: #000000">27</span> <span style="color: #000000">:</span> <span style="color: #000000">32</span> <span style="color: #000000">com.opensymphony.xwork2.interceptor.TimerInterceptor doLog<br />
信息: Executed action </span><span style="font-weight: bold; color: #800000">[</span> <span style="color: #800000">//Timer!execute</span> <span style="font-weight: bold; color: #800000">]</span> <span style="color: #000000">took </span><span style="color: #000000">2859</span> <span style="color: #000000">ms.</span> </div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;在您的环境中执行Timer!execute的耗时，可能上述的时间有些不同，这取决于您PC的性能。但是无论如何，2859 ms与500 ms还是相差太远了。这是什么原因呢？其实原因是第一次加载Timer时，需要进行一定的初始工作。当你重新请求Timer.action时，以上输出会变为：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">2006</span> <span style="color: #000000">-</span> <span style="color: #000000">12</span> <span style="color: #000000">-</span> <span style="color: #000000">6</span> <span style="color: #000000">14</span> <span style="color: #000000">:</span> <span style="color: #000000">29</span> <span style="color: #000000">:</span> <span style="color: #000000">18</span> <span style="color: #000000">com.opensymphony.xwork2.interceptor.TimerInterceptor doLog<br />
信息: Executed action </span><span style="font-weight: bold; color: #800000">[</span> <span style="color: #800000">//Timer!execute</span> <span style="font-weight: bold; color: #800000">]</span> <span style="color: #000000">took </span><span style="color: #000000">500</span> <span style="color: #000000">ms.</span> </div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK，这正是我们期待的结果。上述例子演示了拦截器timer的用途——用于显示执行某个action方法的耗时，在我们做一个粗略的性能调试时，这相当有用。</p>
 <img src ="http://www.blogjava.net/supercrsky/aggbug/162770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 07:47 <a href="http://www.blogjava.net/supercrsky/articles/162770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2表单基本验证</title><link>http://www.blogjava.net/supercrsky/articles/162769.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 23 Nov 2007 23:42:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162769.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162769.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162769.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162769.html</trackback:ping><description><![CDATA[<p>Step 1:
<p><font color="#ff0000">创建输入页:index.jsp</font>
<pre><font color="#0070c0"><span>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Validation&nbsp;-&nbsp;Basic</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:head</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">b</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">What&nbsp;is&nbsp;your&nbsp;favorite&nbsp;color?</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">b</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">p</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:form&nbsp;</span><span style="color: #ff0000">method</span><span style="color: #0000ff">="post"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:textfield&nbsp;</span><span style="color: #ff0000">label</span><span style="color: #0000ff">="Name"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="name"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:textfield&nbsp;</span><span style="color: #ff0000">label</span><span style="color: #0000ff">="Age"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="age"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:textfield&nbsp;</span><span style="color: #ff0000">label</span><span style="color: #0000ff">="password"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="password"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:submit</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">s:form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
</span></font></pre>
<pre><span><font color="#002060">Step2:</font></span></pre>
<pre><span><font color="#ff0000">创建成功页:success.jsp</font></span></pre>
<pre><span><font color="#00b0f0"></font>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;%</span><span style="color: #000000">@&nbsp;page&nbsp;language</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">java</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;pageEncoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">GB18030</span><span style="color: #000000">"</span><span style="color: #000000">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;%</span><span style="color: #000000">@taglib&nbsp;prefix</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">s</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;uri</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/struts-tags</span><span style="color: #000000">"</span><span style="color: #000000">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000">validation&nbsp;test</span><span style="color: #000000">&lt;/</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">body</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Your&nbsp;name&nbsp;is&nbsp;:</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:property&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">name</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;Your&nbsp;age&nbsp;is&nbsp;:</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:property&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;Your&nbsp;age&nbsp;is&nbsp;:</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:property&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">password</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">body</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span></div>
<br />
</span></pre>
<pre><span>Step3:</span></pre>
<pre><span><font color="#ff0000">创建Action-Class:</font></span></pre>
<span>
<pre><font color="#002060">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com;<br />
<img id="Codehighlighter1_58_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_58_89_Open_Text.style.display='none'; Codehighlighter1_58_89_Closed_Image.style.display='inline'; Codehighlighter1_58_89_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_58_89_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_58_89_Closed_Text.style.display='none'; Codehighlighter1_58_89_Open_Image.style.display='inline'; Codehighlighter1_58_89_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.opensymphony.xwork2.ActionSupport;</span><span id="Codehighlighter1_58_89_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_58_89_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;*&nbsp;Action类&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;zdw&nbsp;*&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;QuizAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionSupport</span><span id="Codehighlighter1_135_641_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_135_641_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3124124L</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;password;<br />
<img id="Codehighlighter1_285_305_Open_Image" onclick="this.style.display='none'; Codehighlighter1_285_305_Open_Text.style.display='none'; Codehighlighter1_285_305_Closed_Image.style.display='inline'; Codehighlighter1_285_305_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_285_305_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_285_305_Closed_Text.style.display='none'; Codehighlighter1_285_305_Open_Image.style.display='inline'; Codehighlighter1_285_305_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getPassword()&nbsp;</span><span id="Codehighlighter1_285_305_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_285_305_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;password;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_349_378_Open_Image" onclick="this.style.display='none'; Codehighlighter1_349_378_Open_Text.style.display='none'; Codehighlighter1_349_378_Closed_Image.style.display='inline'; Codehighlighter1_349_378_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_349_378_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_349_378_Closed_Text.style.display='none'; Codehighlighter1_349_378_Open_Image.style.display='inline'; Codehighlighter1_349_378_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setPassword(String&nbsp;password)&nbsp;</span><span id="Codehighlighter1_349_378_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_349_378_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.password&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;password;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_405_421_Open_Image" onclick="this.style.display='none'; Codehighlighter1_405_421_Open_Text.style.display='none'; Codehighlighter1_405_421_Closed_Image.style.display='inline'; Codehighlighter1_405_421_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_405_421_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_405_421_Closed_Text.style.display='none'; Codehighlighter1_405_421_Open_Image.style.display='inline'; Codehighlighter1_405_421_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getName()&nbsp;</span><span id="Codehighlighter1_405_421_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_405_421_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;name;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_457_478_Open_Image" onclick="this.style.display='none'; Codehighlighter1_457_478_Open_Text.style.display='none'; Codehighlighter1_457_478_Closed_Image.style.display='inline'; Codehighlighter1_457_478_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_457_478_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_457_478_Closed_Text.style.display='none'; Codehighlighter1_457_478_Open_Image.style.display='inline'; Codehighlighter1_457_478_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setName(String&nbsp;name)&nbsp;</span><span id="Codehighlighter1_457_478_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_457_478_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_501_516_Open_Image" onclick="this.style.display='none'; Codehighlighter1_501_516_Open_Text.style.display='none'; Codehighlighter1_501_516_Closed_Image.style.display='inline'; Codehighlighter1_501_516_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_501_516_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_501_516_Closed_Text.style.display='none'; Codehighlighter1_501_516_Open_Image.style.display='inline'; Codehighlighter1_501_516_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getAge()&nbsp;</span><span id="Codehighlighter1_501_516_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_501_516_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;age;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_547_566_Open_Image" onclick="this.style.display='none'; Codehighlighter1_547_566_Open_Text.style.display='none'; Codehighlighter1_547_566_Closed_Image.style.display='inline'; Codehighlighter1_547_566_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_547_566_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_547_566_Closed_Text.style.display='none'; Codehighlighter1_547_566_Open_Image.style.display='inline'; Codehighlighter1_547_566_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setAge(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age)&nbsp;</span><span id="Codehighlighter1_547_566_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_547_566_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;age;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_620_639_Open_Image" onclick="this.style.display='none'; Codehighlighter1_620_639_Open_Text.style.display='none'; Codehighlighter1_620_639_Closed_Image.style.display='inline'; Codehighlighter1_620_639_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_620_639_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_620_639_Closed_Text.style.display='none'; Codehighlighter1_620_639_Open_Image.style.display='inline'; Codehighlighter1_620_639_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;@Override&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;execute()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_620_639_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_620_639_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;SUCCESS;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
Step4:</font></pre>
<pre><font color="#ff0000">配置Struts.xml(默认创建在src目录下):</font></pre>
<pre><font color="#ff0000"><font color="#00b050">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;</span><span style="color: #0000ff">?&gt;</span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;struts&nbsp;PUBLIC&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.0//EN"&nbsp;&nbsp;&nbsp;&nbsp;"http://struts.apache.org/dtds/struts-2.0.dtd"</span><span style="color: #0000ff">&gt;<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">package&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="com"</span><span style="color: #ff0000">&nbsp;extends</span><span style="color: #0000ff">="struts-default"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="validation"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.QuizAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;input&nbsp;&amp;&nbsp;result不能少&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="input"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/index.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/success.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;<br />
</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">package</span><span style="color: #0000ff">&gt;<br />
&lt;/</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;</span></div>
&nbsp;</font> </font></pre>
<pre><font color="#ff0000">Step5:</font></pre>
<pre><font color="#ff0000">配置web.xml,加入Filter:</font></pre>
<pre><font color="#00b050">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-app&nbsp;</span><span style="color: #ff0000">version</span><span style="color: #0000ff">="2.4"</span><span style="color: #ff0000">&nbsp;xmlns</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/j2ee"</span><span style="color: #ff0000">&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000">&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/j2ee&nbsp;&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.FilterDispatcher&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">welcome-file-list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">index.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file-list</span><span style="color: #0000ff">&gt;<br />
&lt;/</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span></div>
<br />
</font></pre>
<pre><font color="#ff0000">Step6:</font></pre>
<pre><font color="#ff0000">加入Validators.默认和你的Action建一个包下,其命名规则为&lt;ActionClassName&gt;-validation.xml</font></pre>
<pre><font color="#ff0000">或是&lt;ActionClassName&gt;-&lt;ActionAliasName&gt;-validation.xml.</font></pre>
<pre><font color="#ff0000">在本例中名称为:QuizAction-validation.xml</font></pre>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;validators&nbsp;PUBLIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"-//OpenSymphony&nbsp;Group//XWork&nbsp;Validator&nbsp;1.0.2//EN"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;此xml的DTD声明可以到xwork包下的xwork-validator-1.0.2.dtd里面复制&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">validators</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;对应Action类里面的属性&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">field&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="name"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">field-validator&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="requiredstring"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">name&nbsp;is&nbsp;required</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">field-validator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">field</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">field&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="age"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">field-validator&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="int"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="min"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="max"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">10</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">between&nbsp;2&nbsp;and&nbsp;10&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">field-validator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">field</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">Plain&nbsp;validator&nbsp;Syntax</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&lt;field&nbsp;name="password"&gt;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&lt;field-validator&nbsp;type="stringlength"&gt;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&lt;param&nbsp;name="minLength"&gt;4&lt;/param&gt;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&lt;param&nbsp;name="maxLength"&gt;10&lt;/param&gt;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&lt;param&nbsp;name="trim"&gt;true&lt;/param&gt;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&lt;message&gt;require&nbsp;between&nbsp;4&nbsp;and&nbsp;10&lt;/message&gt;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&lt;/field-validator&gt;&nbsp;&lt;/field&gt;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Field&nbsp;validator&nbsp;Syntax&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">validator&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="stringlength"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="fieldName"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">password</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="minLength"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">4</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="maxLength"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">10</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="trim"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">true</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">require&nbsp;between&nbsp;4&nbsp;and&nbsp;10</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">validator</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">validators</span><span style="color: #0000ff">&gt;</span></div>
<br />
</pre>
<pre><font color="#c00000">源码可在网盘下载,在struts2_source-&gt;Struts2基本表单验证.rar</font></pre>
</span>
 <img src ="http://www.blogjava.net/supercrsky/aggbug/162769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 07:42 <a href="http://www.blogjava.net/supercrsky/articles/162769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义拦截器</title><link>http://www.blogjava.net/supercrsky/articles/162768.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 23 Nov 2007 23:32:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162768.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162768.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162768.html</trackback:ping><description><![CDATA[作为&#8220;框架（framework）&#8221;，可扩展性是不可或缺的，因为世上没有放之四海而皆准的东西。虽然，Struts 2为我们提供如此丰富的拦截器实现，但是这并不意味我们失去创建自定义拦截器的能力，恰恰相反，在Struts 2自定义拦截器是相当容易的一件事。
<p>
<table style="border-right: #f0c000 1px solid; border-top: #f0c000 1px solid; margin-top: 8px; margin-bottom: 8px; border-left: #f0c000 1px solid; border-bottom: #f0c000 1px solid; background-color: #ffffce; text-align: left" cellspacing="0" cellpadding="0" border="0">
    <tbody>
        <tr>
            <td style="padding-right: 4px; padding-left: 4px; padding-bottom: 4px; padding-top: 4px">&nbsp;
            <td style="padding-right: 4px; padding-left: 4px; padding-bottom: 4px; padding-top: 4px; font-family: 黑体, 宋体, Tahoma, Arial">大家在开始着手创建自定义拦截器前，切记以下原则：<br />
            拦截器必须是无状态的，不要使用在API提供的ActionInvocation之外的任何东西。</td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;要求拦截器是无状态的原因是Struts 2不能保证为每一个请求或者action创建一个实例，所以如果拦截器带有状态，会引发并发问题。
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所有的Struts 2的拦截器都直接或间接实现接口com.opensymphony.xwork2.interceptor.Interceptor。除此之外，大家可能更喜欢继承类com.opensymphony.xwork2.interceptor.AbstractInterceptor。
<p>以下例子演示通过继承AbstractInterceptor，实现授权拦截器。
<p>首先，创建授权拦截器类tutorial.AuthorizationInterceptor，代码如下： </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee">&nbsp;<span style="color: #0000ff">package</span> <span style="color: #000000">tutorial;<br />
<br />
</span>&nbsp;<span style="color: #0000ff">import</span> <span style="color: #000000">java.util.Map;<br />
<br />
</span>&nbsp;<span style="color: #0000ff">import</span> <span style="color: #000000">com.opensymphony.xwork2.Action;<br />
</span>&nbsp;<span style="color: #0000ff">import</span> <span style="color: #000000">com.opensymphony.xwork2.ActionInvocation;<br />
</span>&nbsp;<span style="color: #0000ff">import</span> <span style="color: #000000">com.opensymphony.xwork2.interceptor.AbstractInterceptor;<br />
<br />
</span>&nbsp;<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> <span style="color: #000000">AuthorizationInterceptor </span><span style="color: #0000ff">extends</span> <span style="color: #000000">AbstractInterceptor&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">String intercept(ActionInvocation ai) </span><span style="color: #0000ff">throws</span> <span style="color: #000000">Exception&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map session </span><span style="color: #000000">=</span> <span style="color: #000000">ai.getInvocationContext().getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String role </span><span style="color: #000000">=</span> <span style="color: #000000">(String) session.get(</span> <span style="color: #000000">"</span> <span style="color: #000000">ROLE</span> <span style="color: #000000">"</span> <span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">if</span> <span style="color: #000000">(</span> <span style="color: #0000ff">null</span> <span style="color: #000000">!=</span> <span style="color: #000000">role)&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object o </span><span style="color: #000000">=</span> <span style="color: #000000">ai.getAction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">if</span> <span style="color: #000000">(o </span><span style="color: #0000ff">instanceof</span> <span style="color: #000000">RoleAware)&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RoleAware action </span><span style="color: #000000">=</span> <span style="color: #000000">(RoleAware) o;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action.setRole(role);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">ai.invoke();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="color: #0000ff">else</span>&nbsp;<span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">Action.LOGIN;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span><span style="color: #000000"><br />
<br />
}</span> </span></div>
<p>以上代码相当简单，我们通过检查session是否存在键为&#8220;ROLE&#8221;的字符串，判断用户是否登陆。如果用户已经登陆，将角色放到Action中，调用Action；否则，拦截直接返回Action.LOGIN字段。为了方便将角色放入Action，我定义了接口tutorial.RoleAware，代码如下： </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee">&nbsp;<span style="color: #0000ff">package</span> <span style="color: #000000">tutorial;<br />
<br />
</span>&nbsp;<span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span> <span style="color: #000000">RoleAware&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">void</span> <span style="color: #000000">setRole(String role);<br />
}</span> </span></div>
<p>接着，创建Action类tutorial.AuthorizatedAccess模拟访问受限资源，它作用就是通过实现RoleAware获取角色，并将其显示到ShowUser.jsp中，代码如下： </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee">&nbsp;<span style="color: #0000ff">package</span> <span style="color: #000000">tutorial;<br />
<br />
</span>&nbsp;<span style="color: #0000ff">import</span> <span style="color: #000000">com.opensymphony.xwork2.ActionSupport;<br />
<br />
</span>&nbsp;<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> <span style="color: #000000">AuthorizatedAccess </span><span style="color: #0000ff">extends</span> <span style="color: #000000">ActionSupport </span><span style="color: #0000ff">implements</span> <span style="color: #000000">RoleAware&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">private</span> <span style="color: #000000">String role;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> <span style="color: #000000">setRole(String role)&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.role </span><span style="color: #000000">=</span> <span style="color: #000000">role;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">String getRole()&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">role;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span><span style="color: #000000"><br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">String execute()&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">SUCCESS;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="color: #000000"><br />
}</span> </span></div>
<p>以下是ShowUser.jsp的代码： </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000; background-color: #ffff00">&lt;%</span> <span style="color: #000000; background-color: #f5f5f5">@ page &nbsp;contentType</span> <span style="color: #000000; background-color: #f5f5f5">=</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #f5f5f5">text/html; charset=UTF-8</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #ffff00">%&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #000000; background-color: #ffff00">&lt;%</span> <span style="color: #000000; background-color: #f5f5f5">@taglib prefix</span> <span style="color: #000000; background-color: #f5f5f5">=</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #f5f5f5">s</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #f5f5f5">uri</span> <span style="color: #000000; background-color: #f5f5f5">=</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #f5f5f5">/struts-tags</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #ffff00">%&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">html</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">head</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">title</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">Authorizated User</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">title</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">head</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">body</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">h1</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">Your role is: </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">s:property </span><span style="color: #ff0000">value</span> <span style="color: #0000ff">="role"</span> <span style="color: #0000ff">/&gt;&lt;/</span> <span style="color: #800000">h1</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">body</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">html</span> <span style="color: #0000ff">&gt;</span> </div>
<p>然后，创建tutorial.Roles初始化角色列表，代码如下： </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee">&nbsp;<span style="color: #0000ff">package</span> <span style="color: #000000">tutorial;<br />
<br />
</span>&nbsp;<span style="color: #0000ff">import</span> <span style="color: #000000">java.util.Hashtable;<br />
</span>&nbsp;<span style="color: #0000ff">import</span> <span style="color: #000000">java.util.Map;<br />
<br />
<br />
</span>&nbsp;<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> <span style="color: #000000">Roles&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">Map</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">String, String</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">getRoles()&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">String, String</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">roles </span><span style="color: #000000">=</span> <span style="color: #0000ff">new</span> <span style="color: #000000">Hashtable</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">String, String</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">(</span> <span style="color: #000000">2</span> <span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;roles.put(</span> <span style="color: #000000">"</span> <span style="color: #000000">EMPLOYEE</span> <span style="color: #000000">"</span> <span style="color: #000000">, </span><span style="color: #000000">"</span> <span style="color: #000000">Employee</span> <span style="color: #000000">"</span> <span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;roles.put(</span> <span style="color: #000000">"</span> <span style="color: #000000">MANAGER</span> <span style="color: #000000">"</span> <span style="color: #000000">, </span><span style="color: #000000">"</span> <span style="color: #000000">Manager</span> <span style="color: #000000">"</span> <span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">roles;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span><span style="color: #000000"><br />
}</span> </span></div>
<p>接下来，新建Login.jsp实例化tutorial.Roles，并将其roles属性赋予&lt;s:radio&gt;标志，代码如下： </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000; background-color: #ffff00">&lt;%</span> <span style="color: #000000; background-color: #f5f5f5">@ page &nbsp;contentType</span> <span style="color: #000000; background-color: #f5f5f5">=</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #f5f5f5">text/html; charset=UTF-8</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #ffff00">%&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #000000; background-color: #ffff00">&lt;%</span> <span style="color: #000000; background-color: #f5f5f5">@taglib prefix</span> <span style="color: #000000; background-color: #f5f5f5">=</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #f5f5f5">s</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #f5f5f5">uri</span> <span style="color: #000000; background-color: #f5f5f5">=</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #f5f5f5">/struts-tags</span> <span style="color: #000000; background-color: #f5f5f5">"</span> <span style="color: #000000; background-color: #ffff00">%&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">html</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">head</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">title</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">Login</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">title</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">head</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">body</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">h1</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">Login</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">h1</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; Please select a role below:<br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">s:bean </span><span style="color: #ff0000">id</span> <span style="color: #0000ff">="roles"</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="tutorial.Roles"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">s:form </span><span style="color: #ff0000">action</span> <span style="color: #0000ff">="Login"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">s:radio </span><span style="color: #ff0000">list</span> <span style="color: #0000ff">="#roles.roles"</span> <span style="color: #ff0000">value</span> <span style="color: #0000ff">="EMPLOYEE"</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="role"</span> <span style="color: #ff0000">label</span> <span style="color: #0000ff">="Role"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">s:submit </span><span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">s:form</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">body</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">html</span> <span style="color: #0000ff">&gt;</span> </div>
<p>创建Action类tutorial.Login将role放到session中，并转到Action类tutorial.AuthorizatedAccess，代码如下： </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee">&nbsp;<span style="color: #0000ff">package</span> <span style="color: #000000">tutorial;<br />
<br />
</span>&nbsp;<span style="color: #0000ff">import</span> <span style="color: #000000">java.util.Map;<br />
<br />
</span>&nbsp;<span style="color: #0000ff">import</span> <span style="color: #000000">org.apache.struts2.interceptor.SessionAware;<br />
<br />
</span>&nbsp;<span style="color: #0000ff">import</span> <span style="color: #000000">com.opensymphony.xwork2.ActionSupport;<br />
<br />
</span>&nbsp;<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> <span style="color: #000000">Login </span><span style="color: #0000ff">extends</span> <span style="color: #000000">ActionSupport </span><span style="color: #0000ff">implements</span> <span style="color: #000000">SessionAware&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">private</span> <span style="color: #000000">String role;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">private</span> <span style="color: #000000">Map session;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">String getRole()&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">role;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span><span style="color: #000000"><br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> <span style="color: #000000">setRole(String role)&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.role </span><span style="color: #000000">=</span> <span style="color: #000000">role;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> <span style="color: #000000">setSession(Map session)&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.session </span><span style="color: #000000">=</span> <span style="color: #000000">session;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span><span style="color: #000000"><br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">String execute()&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"> </span><span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.put(</span> <span style="color: #000000">"</span> <span style="color: #000000">ROLE</span> <span style="color: #000000">"</span> <span style="color: #000000">, role);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">SUCCESS;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
}</span> </span></div>
<p>最后，配置struts.xml文件，内容如下： </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">&lt;!</span> <span style="color: #ff00ff">DOCTYPE struts PUBLIC<br />
&nbsp; &nbsp; &nbsp; &nbsp; "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />
&nbsp; &nbsp; &nbsp; &nbsp; "http://struts.apache.org/dtds/struts-2.0.dtd"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">struts</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">include </span><span style="color: #ff0000">file</span> <span style="color: #0000ff">="struts-default.xml"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000">&nbsp; &nbsp;<br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">package </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="InterceptorDemo"</span> <span style="color: #ff0000">extends</span> <span style="color: #0000ff">="struts-default"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptors</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="auth"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="tutorial.AuthorizationInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">interceptors</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">action </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="Timer"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="tutorial.TimerInterceptorAction"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor-ref </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="timer"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">result</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">/Timer.jsp</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">result</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">action</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">action </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="Login"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="tutorial.Login"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">result </span><span style="color: #ff0000">type</span> <span style="color: #0000ff">="chain"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">AuthorizatedAccess</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">result</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">action</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">action </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="AuthorizatedAccess"</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="tutorial.AuthorizatedAccess"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">interceptor-ref </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="auth"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">result </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="login"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">/Login.jsp</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">result</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;</span> <span style="color: #800000">result </span><span style="color: #ff0000">name</span> <span style="color: #0000ff">="success"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">/ShowRole.jsp</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">result</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">action</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
&nbsp; &nbsp; </span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">package</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span> <span style="color: #800000">struts</span> <span style="color: #0000ff">&gt;</span> </div>
<p>发布运行应用程序，在浏览器地址栏中输入：<a href="http://localhost:8080/Struts2_Interceptor/AuthorizatedAccess.action"><u><font color="#0000ff">http://localhost:8080/Struts2_Interceptor/AuthorizatedAccess.action</font></u></a>。由于此时，session还没有键为&#8220;ROLE&#8221;的值，所以返回Login.jsp页面，如图2所示：
<p>&nbsp;<br />
<span style="font-size: smaller; font-style: italic"><font size="2">图２ Login.jsp</font></span>
<p>选中Employee，点击Submit，出现图3所示页面：<br />
&nbsp;<img height="305" alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/r_pic2.gif" width="269" border="0" />
<p>&nbsp;<span style="font-size: smaller; font-style: italic"><font size="2">图3 ShowRole.jsp</font></span>
<p><img height="305" alt="" src="http://www.java3z.com/cwbwebhome/article/article2/img1/r_pic3.gif " width="269" border="0" />
<h2>总结</h2>
<p>拦截器是Struts 2比较重要的一个功能。通过正确地使用拦截器，我们可以编写高可复用的代码。</p>
 <img src ="http://www.blogjava.net/supercrsky/aggbug/162768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 07:32 <a href="http://www.blogjava.net/supercrsky/articles/162768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2属性文件简单应用</title><link>http://www.blogjava.net/supercrsky/articles/162767.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 23 Nov 2007 23:29:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162767.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162767.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162767.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162767.html</trackback:ping><description><![CDATA[在包下建立名为pageckage.properties的文件.我这里的包是com.内容如下: <br />
<font color="#ff0000">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">requiredstring&nbsp;=&nbsp;$\{getText(fieldName)}&nbsp;is&nbsp;required.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />password&nbsp;=&nbsp;Password<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />username&nbsp;=&nbsp;User&nbsp;Name</span></div>
<br />
</font><font color="#002060">这里我们需要改一下我们的LoginAction-validation.xml:</font><font color="#002060">
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Username&nbsp;is&nbsp;required</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">message&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="requiredstring"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Password&nbsp;is&nbsp;required</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">message</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">message&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="requiredstring"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>红色-号标志的为原先内容,+号内容为现在修改后的内容.
<p>login.jsp: </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;%</span><span style="color: #000000">@&nbsp;page&nbsp;language</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">java</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;pageEncoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">GB18030</span><span style="color: #000000">"</span><span style="color: #000000">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;%</span><span style="color: #000000">@taglib&nbsp;prefix</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">s</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;uri</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/struts-tags</span><span style="color: #000000">"</span><span style="color: #000000">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000">My&nbsp;JSP&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">login</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;starting&nbsp;page</span><span style="color: #000000">&lt;/</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">body</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:form&nbsp;action</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">login</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;method</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">post</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:textfield&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">username</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;label</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">%{getText('username')}</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:textfield&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">password</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;label</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">%{getText('password')}</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:submit&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">s:form</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">body</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>struts.xml文件: <font color="#ff0000"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">package&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="com"</span><span style="color: #ff0000">&nbsp;extends</span><span style="color: #0000ff">="struts-default"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.LoginAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="input"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/login.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/success.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">package</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">struts</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
<p></font><font color="#00b050">LoginAction文件:</font> </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.opensymphony.xwork2.ActionSupport;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;LoginAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionSupport<br />
<img id="Codehighlighter1_110_676_Open_Image" onclick="this.style.display='none'; Codehighlighter1_110_676_Open_Text.style.display='none'; Codehighlighter1_110_676_Closed_Image.style.display='inline'; Codehighlighter1_110_676_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_110_676_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_110_676_Closed_Text.style.display='none'; Codehighlighter1_110_676_Open_Image.style.display='inline'; Codehighlighter1_110_676_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_110_676_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_110_676_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">4771028725069625041L</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;username;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;password;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getUsername()<br />
<img id="Codehighlighter1_266_288_Open_Image" onclick="this.style.display='none'; Codehighlighter1_266_288_Open_Text.style.display='none'; Codehighlighter1_266_288_Closed_Image.style.display='inline'; Codehighlighter1_266_288_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_266_288_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_266_288_Closed_Text.style.display='none'; Codehighlighter1_266_288_Open_Image.style.display='inline'; Codehighlighter1_266_288_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_266_288_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_266_288_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;username;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setUsername(String&nbsp;username)<br />
<img id="Codehighlighter1_333_364_Open_Image" onclick="this.style.display='none'; Codehighlighter1_333_364_Open_Text.style.display='none'; Codehighlighter1_333_364_Closed_Image.style.display='inline'; Codehighlighter1_333_364_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_333_364_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_333_364_Closed_Text.style.display='none'; Codehighlighter1_333_364_Open_Image.style.display='inline'; Codehighlighter1_333_364_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_333_364_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_333_364_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.username&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;username;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getPassword()<br />
<img id="Codehighlighter1_396_418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_396_418_Open_Text.style.display='none'; Codehighlighter1_396_418_Closed_Image.style.display='inline'; Codehighlighter1_396_418_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_396_418_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_396_418_Closed_Text.style.display='none'; Codehighlighter1_396_418_Open_Image.style.display='inline'; Codehighlighter1_396_418_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_396_418_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_396_418_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;password;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setPassword(String&nbsp;password)<br />
<img id="Codehighlighter1_463_494_Open_Image" onclick="this.style.display='none'; Codehighlighter1_463_494_Open_Text.style.display='none'; Codehighlighter1_463_494_Closed_Image.style.display='inline'; Codehighlighter1_463_494_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_463_494_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_463_494_Closed_Text.style.display='none'; Codehighlighter1_463_494_Open_Image.style.display='inline'; Codehighlighter1_463_494_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_463_494_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_463_494_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.password&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;password;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;@Override<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;execute()<br />
<img id="Codehighlighter1_533_674_Open_Image" onclick="this.style.display='none'; Codehighlighter1_533_674_Open_Text.style.display='none'; Codehighlighter1_533_674_Closed_Image.style.display='inline'; Codehighlighter1_533_674_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_533_674_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_533_674_Closed_Text.style.display='none'; Codehighlighter1_533_674_Open_Image.style.display='inline'; Codehighlighter1_533_674_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_533_674_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_533_674_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;System.out.println(getText(</span><span style="color: #000000">"</span><span style="color: #000000">username</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;username);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;System.out.println(getText(</span><span style="color: #000000">"</span><span style="color: #000000">password</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;password);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;SUCCESS;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
<span style="font-family: 宋体"><span style="color: #000000"><span style="font-family: Tahoma">properties文件的内容按以下顺序检索: </span></span></span>
<p><span style="font-family: 宋体"><span style="color: #000000"><span style="font-family: Tahoma">Resource bundles are searched in the following order: </span></span></span>
<p><span style="font-family: 宋体"><span style="color: #000000"></span></span>
<p><span style="font-family: 宋体"><span style="color: #000000"></span></span>
<ol>
    <li><span style="font-family: 宋体"><span style="color: #000000"><span style="font-family: Tahoma">ActionClass.properties </span></span></span>
    <li><span style="font-family: 宋体"><span style="color: #000000"><span style="font-family: Tahoma">BaseClass.properties (all the way to Object.properties) </span></span></span>
    <li><span style="font-family: 宋体"><span style="color: #000000"><span style="font-family: Tahoma">Interface.properties (every interface and sub-interface) </span></span></span>
    <li><span style="font-family: 宋体"><span style="color: #000000"><span style="font-family: Tahoma">ModelDriven's model (if implements ModelDriven), for the model object repeat from 1 </span></span></span>
    <li><span style="font-family: 宋体"><span style="color: #000000"><span style="font-family: Tahoma">package.properties (of the directory where class is located and every parent directory all the way to the root directory) </span></span></span>
    <li><span style="font-family: 宋体"><span style="color: #000000"><span style="font-family: Tahoma">search up the i18n message key hierarchy itself </span></span></span>
    <li><span style="font-family: 宋体"><span style="color: #000000"><span style="font-family: Tahoma">global resource properties </span></span></span></li>
</ol>
<p><span style="font-family: 宋体"><span style="color: #000000"><span style="font-family: Tahoma">源码请在我的网盘下</span></span></span></p>
</font>
 <img src ="http://www.blogjava.net/supercrsky/aggbug/162767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 07:29 <a href="http://www.blogjava.net/supercrsky/articles/162767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>