﻿<?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/yzth/</link><description>Struts2+Spring+Ibatis</description><language>zh-cn</language><lastBuildDate>Fri, 17 Apr 2026 22:40:25 GMT</lastBuildDate><pubDate>Fri, 17 Apr 2026 22:40:25 GMT</pubDate><ttl>60</ttl><item><title>Struts2 核心文件Web.xml的配置</title><link>http://www.blogjava.net/yzth/archive/2008/04/05/190941.html</link><dc:creator>怡众科技</dc:creator><author>怡众科技</author><pubDate>Sat, 05 Apr 2008 08:52:00 GMT</pubDate><guid>http://www.blogjava.net/yzth/archive/2008/04/05/190941.html</guid><wfw:comment>http://www.blogjava.net/yzth/comments/190941.html</wfw:comment><comments>http://www.blogjava.net/yzth/archive/2008/04/05/190941.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yzth/comments/commentRss/190941.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yzth/services/trackbacks/190941.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Filter是Strusts2中非常重要的机制，而Filter的配置就放在Web.xml文件中，如下:<br />
<br />
<p><font style="background-color: #c7edcc">&lt;?xml version="1.0" encoding="GBK"?&gt;<br />
&lt;web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"<br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <br />
&nbsp;xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;</font></p>
<font style="background-color: #c7edcc">
<p>&nbsp;&lt;!-- 定义Struts2的FilterDispathcer的Filter --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter&gt;</p>
<p>&nbsp;&lt;!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;<br />
&lt;/web-app&gt;</font></p>
<img src ="http://www.blogjava.net/yzth/aggbug/190941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yzth/" target="_blank">怡众科技</a> 2008-04-05 16:52 <a href="http://www.blogjava.net/yzth/archive/2008/04/05/190941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>所有的成功都是抵抗诱惑的结果</title><link>http://www.blogjava.net/yzth/archive/2007/12/07/166087.html</link><dc:creator>怡众科技</dc:creator><author>怡众科技</author><pubDate>Fri, 07 Dec 2007 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/yzth/archive/2007/12/07/166087.html</guid><wfw:comment>http://www.blogjava.net/yzth/comments/166087.html</wfw:comment><comments>http://www.blogjava.net/yzth/archive/2007/12/07/166087.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yzth/comments/commentRss/166087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yzth/services/trackbacks/166087.html</trackback:ping><description><![CDATA[随着阿里巴巴在香港的上市，今年冬天，马云注定将成为最引人瞩目的中国企业家。在《阿里巴巴：天下没有难做的生意》一书的序言写道：&#8220;如果说杨致远是互联网领域里第一个世界级的华人企业家，那么马云就可能是下一个。杨致远是商业的天才，他发现了互联网搜索的价值，而马云则是天才的商人，他把一团让人手足无措的乱麻织成了一匹锦绣。&#8221;今天，很多人坚持这样的判断。 <br />
　　要总结马云的成功秘诀，应该可以罗列出20条以上，其中包括他的奇异长相和一口流利的英语。不过，在众多答案中，第一条更为专注。 <br />
　　1999年的春天，马云从北京铩羽回到杭州，在城郊的湖畔花园的家里创办阿里巴巴网站。公司成立的那一天，家里的墙壁突然渗水了，他对大家说，我出去找点材料。过一会儿，他抱了一大卷旧报纸回来，然后大家一起把它们贴在墙上，就这样开始了公司的第一天。 <br />
　　阿里巴巴当时总共18个人，马云对全体员工发表开业演讲：&#8220;我们要办的是一家电子商务公司，我们的目标有三个。&#8221;马云的演讲很能煽动人，&#8220;第一，我们要建立一家生存80年的公司。&#8221; <br />
　　大家一边鼓掌，一边想：&#8220;反正能不能活到80年，我们可能谁也看不到。&#8221; <br />
　　&#8220;第二，我们要建设一家为中国中小企业服务的电子商务公司。&#8221;大家鼓掌，在这一点上谁也没有疑问。 <br />
　　&#8220;第三，我们要建成世界上最大的电子商务公司，要进入全球网站排名前十位。&#8221;大家你看我，我看你，每个人的心里都在犯嘀咕，&#8220;这个目标太具体化了，就凭我们这几杆枪？&#8221; <br />
　　后来马云告诉我，他搞电子商务，从那一天起就铁了心。 <br />
　　2001年，全球互联网遭遇大寒流，那年冬天，他飞赴日本向投资阿里巴巴的软银总裁孙正义汇报公司情况，那些日子，孙正义投资的上百家互联网公司乱成了一团，大家都不知道未来的出路在哪里。那天，前来汇报的各国CEO一个接一个地进去出来，轮到马云了，当他简短地讲完阿里巴巴的境况后，孙正义幽幽地说：&#8220;今天前来汇报的CEO，所说的话都与我当年投资他们时说的不一样了，只有你还在说当年说过的话。&#8221;当时，曾经当过一天世界首富的孙正义的资产已缩水95％，很多投资项目早已面目全非，只有阿里巴巴还是那间他当初投资的电子商务公司，也是软银最成功的投资项目之一。 <br />
　　时间又转到了2002年底，互联网世界开始回暖。中国著名的网络公司如新浪、搜狐等相继实现盈利，而一些颇有市场前景的互联网项目也初露端倪，当时阿里巴巴的网商用户已经超过400万家，马云面临新的诱惑。 <br />
　　&#8220;阿里巴巴拥有那么多有价值的注册客户，具备了开拓任何领域的最佳条件。&#8221;几乎所有的人都这么认为。当时，摆在马云面前的道路有三条。 <br />
　　第一条道路，是发展短信业务，以搜狐、网易为代表的中国门户网站均在这个聚宝盆里淘到了大金块，短信市场已非常成熟，阿里巴巴完全有抢夺蛋糕的能力。 <br />
　　第二条道路，是投身网络游戏领域，当时全中国还没有一家大型网络游戏公司，陈天桥的盛大才刚刚起步，如果阿里巴巴转投此领域，应当会有大作为。 <br />
　　第三条道路，是继续在尚未成熟的电子商务的&#8220;老路&#8221;上走下来。 <br />
　　马云的抉择是，不改初衷，一条道走到黑。今天，阿里巴巴没有成为另一家网易，马云也失去了成为&#8220;中国首富&#8221;的机遇。但是，在电子商务领域，阿里巴巴一路狂奔，无人可追。 <br />
　　所有的成功都是抵抗诱惑的结果。马云的专注包括三个词，一是电子商务，二是中国市场，三是中小经营者。目前，阿里巴巴旗下的所有业务，包括淘宝网、支付宝莫不如此，甚至在我看来，他两年前出手收购的雅虎如果要获得复苏，其战略起点也还是要从自己的专注优势中去寻找。阿里巴巴上市后，马云手握重金，又有了一次讨伐四野的机遇，不过，&#8220;钱多了，犯错误的机会也就多了&#8221;，不知道马云还记得当年在旧报纸糊成的墙下说过的那席话吗？1947年6月6日，亨利 &#183; 福特去世的时候，《纽约时报》撰文说：&#8220;当他来到人世时，这个世界还是马车的时代，当他离开人世时，这个世界已经成了汽车世界。&#8221;汽车其实不是福特发明的，不过他让它成为了一个改变美国的工具。今天的马云其实也有这样的机会，电子商务不是他发明的，不过阿里巴巴可能成为改变中国商品和&#8220;中国制造&#8221;命运的重要推力之一。<br />
<img src ="http://www.blogjava.net/yzth/aggbug/166087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yzth/" target="_blank">怡众科技</a> 2007-12-07 16:44 <a href="http://www.blogjava.net/yzth/archive/2007/12/07/166087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于Struts 2 Ajax实现的Login应用 </title><link>http://www.blogjava.net/yzth/archive/2007/12/05/165346.html</link><dc:creator>怡众科技</dc:creator><author>怡众科技</author><pubDate>Tue, 04 Dec 2007 16:01:00 GMT</pubDate><guid>http://www.blogjava.net/yzth/archive/2007/12/05/165346.html</guid><wfw:comment>http://www.blogjava.net/yzth/comments/165346.html</wfw:comment><comments>http://www.blogjava.net/yzth/archive/2007/12/05/165346.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yzth/comments/commentRss/165346.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yzth/services/trackbacks/165346.html</trackback:ping><description><![CDATA[<p>Struts 2内嵌了Dojo工具包，实现对Ajax的支持。下面是一个用户名和密码都是Admin的Login应用。</p>
<p>&nbsp;1、在struts.xml中加入一个Action mapping</p>
<div class="code_title">xml 代码</div>
<p>&nbsp;</p>
<div class="dp-highlighter" style="width: 99%; height: 193px">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">action</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"showAjaxLoginForm"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span class="tag">&gt;</span><span>/pages/ajaxlogin.jsp</span><span class="tag"><span class="tag-name">result</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span class="tag"><span class="tag-name">action</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">action</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"ajaxLogin"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"net.roseindia.Login"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"input"</span><span class="tag">&gt;</span><span>/pages/ajaxlogin.jsp</span><span class="tag"><span class="tag-name">result</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"error"</span><span class="tag">&gt;</span><span>/pages/ajaxlogin.jsp</span><span class="tag"><span class="tag-name">result</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">result</span><span class="tag">&gt;</span><span>/pages/ajaxloginsuccess.jsp</span><span class="tag"><span class="tag-name">result</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span class="tag"><span class="tag-name"><span class="tag">&gt;</span><span>&nbsp;</span></span> </span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>&nbsp;2、用Ajax编写一个Login页面ajaxlogin.jsp</p>
<p><font face="Arial">&nbsp;这个页面使用了<S:DIV> 标签, 这个标签能通过Ajax tags载入页面内容。jsp页面还使用了<S:SUBMIT>标签，这个标签可以利用Ajax来更形页面元素和提交一个form。</S:SUBMIT></S:DIV><S:DIV><S:SUBMIT><S:ACTIONERROR><S:FIELDERROR></S:FIELDERROR></S:ACTIONERROR></S:SUBMIT></S:DIV></font><font face="Arial">当出现错误是，<S:ACTIONERROR>和<S:FIELDERROR>标签执行并显示错误信息。</S:FIELDERROR></S:ACTIONERROR></font></p>
<div class="code_title">xml 代码&nbsp;</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span>%@&nbsp;taglib&nbsp;</span><span class="attribute">prefix</span><span>=</span><span class="attribute-value">"s"</span><span>&nbsp;</span><span class="attribute">uri</span><span>=</span><span class="attribute-value">"/struts-tags"</span><span>%</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span class="tag">&lt;</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</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="attribute">debug</span><span>=</span><span class="attribute-value">"true"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> 
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">s:div</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">"loginDiv"</span><span>&nbsp;</span><span class="attribute">theme</span><span>=</span><span class="attribute-value">"ajax"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">style</span><span>=</span><span class="attribute-value">"width:&nbsp;300px;border-style:&nbsp;solid"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">s:form</span><span>&nbsp;</span><span class="attribute">action</span><span>=</span><span class="attribute-value">"ajaxLogin"</span><span>&nbsp;&nbsp;</span><span class="attribute">validate</span><span>=</span><span class="attribute-value">"true"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">td</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">"2"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Login &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">td</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">tr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">td</span><span>&nbsp;</span><span class="attribute">colspan</span><span>=</span><span class="attribute-value">"2"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">s:actionerror</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">s:fielderror</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">td</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">tr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">s:textfield</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"username"</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">"Login&nbsp;name"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">s:password</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"password"</span><span>&nbsp;</span><span class="attribute">label</span><span>=</span><span class="attribute-value">"Password"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">s:submit</span><span>&nbsp;</span><span class="attribute">theme</span><span>=</span><span class="attribute-value">"ajax"</span><span>&nbsp;</span><span class="attribute">targets</span><span>=</span><span class="attribute-value">"loginDiv"</span><span>&nbsp;</span><span class="attribute">notifyTopics</span><span>=</span><span class="attribute-value">"/ajaxLogin"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">s:form</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">s:div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span class="tag"><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>&nbsp;3、编写一个验证用户名和密码的Action类Login.java</p>
<p>如果验证成功返回SUCCESS，失败就返回ERROR</p>
<div class="code_title">java 代码&nbsp;</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;net.roseindia; &nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;</span> 
    <li class=""><span class="keyword">import</span><span>&nbsp;com.opensymphony.xwork2.ActionSupport; &nbsp;&nbsp;</span>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.util.Date; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span> 
    <li class=""><span class="comment">/** </span>&nbsp;
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;Validate&nbsp;a&nbsp;user&nbsp;login.&nbsp;</span>&nbsp;</span>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Login&nbsp;</span><span class="keyword">extends</span><span>&nbsp;ActionSupport&nbsp;{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;execute()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"Validating&nbsp;login&nbsp;...&nbsp;..."</span><span>); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"User&nbsp;=&nbsp;"</span><span>&nbsp;+&nbsp;getUsername()); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(!getUsername().equals(</span><span class="string">"Admin"</span><span>)&nbsp;||&nbsp;!getPassword().equals(</span><span class="string">"Admin"</span><span>))&nbsp;{ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"Validating&nbsp;error&nbsp;!&nbsp;User&nbsp;=&nbsp;"</span><span>&nbsp;+&nbsp;getUsername()); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addActionError(</span><span class="string">"Invalid&nbsp;user&nbsp;name&nbsp;or&nbsp;password!&nbsp;Please&nbsp;try&nbsp;again!"</span><span>); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;ERROR; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"Validating&nbsp;success&nbsp;!"</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;SUCCESS; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;----&nbsp;Username&nbsp;property&nbsp;---- </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Field&nbsp;to&nbsp;store&nbsp;User&nbsp;username.</span>&nbsp;</span>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;username&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getUsername()&nbsp;{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;username; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUsername(String&nbsp;value)&nbsp;{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username&nbsp;=&nbsp;value; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;----&nbsp;Username&nbsp;property&nbsp;---- </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Field&nbsp;to&nbsp;store&nbsp;User&nbsp;password.</span>&nbsp;</span>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;password&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getPassword()&nbsp;{ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;password; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setPassword(String&nbsp;value)&nbsp;{ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password&nbsp;=&nbsp;value; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>}&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;4、编写一个登录成功页面<font face="Arial">ajaxloginsuccess.jsp</font></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">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">title</span><span class="tag">&gt;</span><span>Login&nbsp;Success</span><span class="tag"><span class="tag-name">title</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">p</span><span>&nbsp;</span><span class="attribute">align</span><span>=</span><span class="attribute-value">"center"</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">font</span><span>&nbsp;</span><span class="attribute">color</span><span>=</span><span class="attribute-value">"#000080"</span><span>&nbsp;</span><span class="attribute">size</span><span>=</span><span class="attribute-value">"5"</span><span class="tag">&gt;</span><span>Login&nbsp;Successful&nbsp;!</span><span class="tag"><span class="tag-name">font</span><span class="tag">&gt;</span><span class="tag"><span class="tag-name">p</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">h1</span><span class="tag">&gt;</span><span>&nbsp;Welcome&nbsp;to&nbsp;</span><span class="tag">&lt;</span><span>%=request.getParameter("username")%</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">h1</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span class="tag"><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>5、访问下面连接 <font face="Arial">http://localhost:8080/s2ajax/showAjaxLoginForm.action</font></p>
<img src ="http://www.blogjava.net/yzth/aggbug/165346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yzth/" target="_blank">怡众科技</a> 2007-12-05 00:01 <a href="http://www.blogjava.net/yzth/archive/2007/12/05/165346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE相关站点</title><link>http://www.blogjava.net/yzth/archive/2007/12/04/165331.html</link><dc:creator>怡众科技</dc:creator><author>怡众科技</author><pubDate>Tue, 04 Dec 2007 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/yzth/archive/2007/12/04/165331.html</guid><wfw:comment>http://www.blogjava.net/yzth/comments/165331.html</wfw:comment><comments>http://www.blogjava.net/yzth/archive/2007/12/04/165331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yzth/comments/commentRss/165331.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yzth/services/trackbacks/165331.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>http://www.theserverside.com<br />
权威的的J2EE站点，有最新的消息发布和很多技术文章以及很好的论坛，进行J2EE相关技术<br />
的全方位的讨论，也有电子书可以下载。</p>
<p>http://www.javaworld.com<br />
很著名的国外的java技术站点。有一段时间由于一些原因停止了更新，不过不久前有开始了<br />
更新的工作。</p>
<p>http://www-900.ibm.com/developerWorks/cn/java/index.shtml<br />
IBM公司的developerWorks Java技术专区，有很多关于J2EE的技术文章，并且文章的质量很<br />
高。</p>
<p>http://www.jdon.com<br />
国内不错的J2EE技术站点，有很多技术文章和源代码。以前推出过汉化的JIVE版本，现在有<br />
了自己的J2EE框架产品。</p>
<p>http://www.huihoo.com<br />
专注于中间件技术的站点和论坛，国内开源软件做的相当不错的组织，推出了自己的J2EE服<br />
发信人: petbear (雨中的人), 信区: J2EE<br />
标&nbsp; 题: J2EE学习经验和流程<br />
发信人: oosky (天天), 信区: J2EE<br />
标&nbsp; 题: J2EE站点资源<br />
发信站: BBS 水木清华站 (Wed Mar 31 17:23:27 2004), 转信</p>
<p><br />
Java Ftp<br />
ftp://java:java@219.224.190.248:4021 (欢迎大家使用)<br />
很多JAVA资源，感谢前辈的工作:)</p>
<p>务器产品JFox以及相关的<br />
OpenSource 产品。</p>
<p>http://gceclub.sun.com.cn<br />
SUN的中文技术社区，有SUN 的技术人员的支持维护，很多不错的文章，在线讲堂栏目办的<br />
很有特色。推出了新<br />
版的技术论坛，但是人气一直不是很旺。</p>
<p>http://www.cnjsp.org<br />
以前做过JSP的论坛，现在定位于Java技术服务，提供一些J2EE的技术文章，还不错。</p>
<p>http://www.chinajavaworld.net<br />
应该是国内最著名和热门的java技术站点了，有很j2ee的信息和技术文章和很好的论坛。</p>
<p>http://www.csdn.net<br />
程序员都知道的网站:)也把它列进来。有最新的java业界动态和技术文章可以查找。<br />
http://cwiki.apache.org/S2WIKI/projects-using-webwork-or-struts2.html<br />
自己喜欢的地方，收藏<br />
http://sourceforge.net<br />
很不错的开源社区</p>
<img src ="http://www.blogjava.net/yzth/aggbug/165331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yzth/" target="_blank">怡众科技</a> 2007-12-04 23:15 <a href="http://www.blogjava.net/yzth/archive/2007/12/04/165331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Web层的下一个王者是谁？</title><link>http://www.blogjava.net/yzth/archive/2007/12/04/165329.html</link><dc:creator>怡众科技</dc:creator><author>怡众科技</author><pubDate>Tue, 04 Dec 2007 15:05:00 GMT</pubDate><guid>http://www.blogjava.net/yzth/archive/2007/12/04/165329.html</guid><wfw:comment>http://www.blogjava.net/yzth/comments/165329.html</wfw:comment><comments>http://www.blogjava.net/yzth/archive/2007/12/04/165329.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yzth/comments/commentRss/165329.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yzth/services/trackbacks/165329.html</trackback:ping><description><![CDATA[<p align="center">作者：<a href="http://www.jdon.com/jivejdon/profile.jsp?user=40488"><strong>lgx522</strong></a> 发表时间：2007年04月19日 18:04 <a href="http://www.jdon.com/jivejdon/message/messageReplyAction.shtml?parentMessage.messageId=23105466&amp;forum.forumId=16"><img height="17" alt="回复此消息" hspace="3" src="http://www.jdon.com/article/images/reply.gif" width="17" border="0" />回复</a> <br />
<center>原贴网址：<a href="http://www.jdon.com/jivejdon/thread/31553.html"> http://www.jdon.com/jivejdon/thread/31553.html</a> </center>
<p>&nbsp;</p>
<p class="article">经过数年的&#8220;框架大战&#8221;，Java界的各种框架找到了自己应有的位置。<br />
<br />
Spring+Hibernate+Struts已成为Java开发的主流体系。在这个体系中，Spring+Hibernate的地位应该说短期内是难以撼动了。除了新兴的Jboss Seam作为挑战者之外，几乎难有劲敌。有趣的是当初<a title="??" href="http://www.jdon.com/dl/best/spring.htm" target="_blank"><strong>Spring</strong></a>、Hibernate作为挑战者，将官方的<a title="??" href="http://www.jdon.com/jivejdon/key/ejb" target="_blank"><strong>EJB</strong></a>成功挑落马下；这次反倒是官方的EBJ3成了挑战者，不知结局如何。<br />
<br />
Java B/S编程中历来战火最激烈的其实还在Web层，框架的数量最多，争议最大。 <br />
一切由<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>而起，而<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>最终也坐稳了第一个时代的王座。在技术层面，Struts 1.x已经被无数人抱怨过、批评过，但终于还是稳坐王位，这充分说明了习惯的力量。&#8220;稳定压倒一切&#8221;，这句话在IT技术领域仍旧适用。 <br />
其实IT应用技术，什么新鲜玩意并不难学。难的是标准化和规范化。每个程序员都有自己的思路和习惯，写出来的代码自然是五花八门。Java何以成为编程界的老大，很重要的一点在于Java的规范化。这种规范化很高的语言适用于多人合作的大型项目，便于沟通和理解，也就便于集成和维护。Java世界为什么会框架横飞，说到底还是规范化的需要。纯JSP和<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>写Web谁快，摆明了是JSP。那撑饱了用<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>？原因在于100个人写出来的JSP，有100种写法；而100个人写出来的<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>，基本相似。Struts之成功，正缘于其在Java Web层的规范化方面所做出的贡献。<br />
<br />
然而长江后浪推前浪，Struts 1.x的技术缺陷毕竟是隐患。 <br />
Sun力推JSF，打算一雪Web层框架缺失之耻。可惜JSF既要沿用Swing的技术路线，又要学ASP.NET，还要照顾产商的IDE，结果搞了个四不象，弄得里外不是人。当然Sun的技术实力毕竟是超强的，只要别重蹈<a title="??" href="http://www.jdon.com/jivejdon/key/ejb" target="_blank"><strong>EJB</strong></a>的覆辙，拿出点专断的精神（像这两年的NetBeans），做出像Swing那样水准的东西，JSF当大有作为。JSF现在比较有优势的是对Ajax的集成，这一点走在了其他框架的前面。<br />
<br />
而<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>就更没有志气了，把WebWork换了个标签，凑出个<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>2，Bug多多。说实在话，根本不如原版的WebWork。如果不是靠了原先的fans捧场，根本就没得混。不过<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>原本就不是以技术取胜的，靠的是抢占先机带来的习惯优势。如果原先的fans们在这两年内都能转到<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>2，那么<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>二世仍将雄霸天下。<br />
<br />
综上所述，未来两年，JSF与<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>将展开Java Web框架的最终战争。 <br />
以笔者愚见，结局有二：一是不论<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>还是JSF获胜，Java Web层都将结束混战的局面，这对Java Web开发的标准化是非常有利的，并有助于巩固Java在B/S界的地位；二是<a title="??" href="http://www.jdon.com/dl/best/struts.htm" target="_blank"><strong>Struts</strong></a>1.x、Struts2、JSF三分天下，必然从整体上削弱Java在B/S界的竞争力，并将进一步被RoR、ASP.NET、PHP所蚕食。<br />
</p>
<img src ="http://www.blogjava.net/yzth/aggbug/165329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yzth/" target="_blank">怡众科技</a> 2007-12-04 23:05 <a href="http://www.blogjava.net/yzth/archive/2007/12/04/165329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于设计模式应用的意义</title><link>http://www.blogjava.net/yzth/archive/2007/12/04/165326.html</link><dc:creator>怡众科技</dc:creator><author>怡众科技</author><pubDate>Tue, 04 Dec 2007 14:48:00 GMT</pubDate><guid>http://www.blogjava.net/yzth/archive/2007/12/04/165326.html</guid><wfw:comment>http://www.blogjava.net/yzth/comments/165326.html</wfw:comment><comments>http://www.blogjava.net/yzth/archive/2007/12/04/165326.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yzth/comments/commentRss/165326.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yzth/services/trackbacks/165326.html</trackback:ping><description><![CDATA[<p>
<table style="table-layout: fixed" cellspacing="2" cellpadding="2" width="100%" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word"><span class="tpc_content">Design Pattern Practice<br />
            <br />
            1．序<br />
            本文从一个简单的多列排序的例子入手，由浅入深地讲解Design Pattern（设计模式）的目的、分析和实践。<br />
            文中的例子用到Compositor Pattern和Decorator Pattern。<br />
            同时，文中的例子也提供了一类问题（条件组合问题）的解决方案。<br />
            <br />
            2．问题的引入<br />
            Design Pattern（设计模式）的目标是，把共通问题中的不变部分和变化部分分离出来。不变的部分，就构成了Design Pattern（设计模式）。这一点和Framework（框架）有些象。<br />
            下面举个排序的例子，说明如何抽取问题中的不变部分。<br />
            假设一个Java类Record有field1，field2，field3等字段。<br />
            <br />
            <pre><br />
            <strong>public</strong> <strong>class</strong> Record{<br />
            <strong>public</strong> <strong>int</strong> field1;<br />
            <strong>public</strong> <strong>long</strong> field2;<br />
            <strong>public</strong> <strong>double</strong> filed3;<br />
            };<br />
            </pre>
            <br />
            <br />
            我们还有一个Record对象的数组Record[] records。我们需要对这个数组按照不同的条件排序。<br />
            首先，按照field1的大小从小到大进行升序排序。<br />
            排序函数如下：<br />
            <br />
            <pre><br />
            <strong>void</strong> sort(Record[] records){<br />
            <strong>for</strong>(<strong>int</strong> i =&#8230;){<br />
            <strong>for</strong>(<strong>int</strong> j=&#8230;){<br />
            <strong>if</strong>(records[ i ].field1 &gt; records[ j ].field1)<br />
            </font><font color="#0000aa"><em>// swap records[ i ] and records[ j ]</font></em><font color="black"><br />
            }<br />
            }<br />
            }<br />
            </pre>
            <br />
            <br />
            其次，按照field2的大小从小到大进行升序排序。<br />
            <pre><br />
            <strong>void</strong> sort(Record[] records){<br />
            <strong>for</strong>(<strong>int</strong> i =&#8230;){<br />
            <strong>for</strong>(<strong>int</strong> j=&#8230;){<br />
            <strong>if</strong>(records[ i ].field2 &gt; records[ j ].field2)<br />
            </font><font color="#0000aa"><em>// swap records[ i ] and records[ j ]</font></em><font color="black"><br />
            }<br />
            }<br />
            }<br />
            </pre>
            <br />
            <br />
            再次，按照field3的大小从小到大进行升序排序。<br />
            ...<br />
            这种要求太多了，我们写了太多的重复代码。我们可以看到，问题的变化部分，只有判断条件部分（黑体的if条件判断语句）。<br />
            我们可以引入一个Comparator接口，把这个变化的部分抽取出来。<br />
            <pre><br />
            <strong>public</strong> <strong>interface</strong> Comparator(){<br />
            <strong>public</strong> <strong>boolean</strong> greaterThan(Record a, Record b);<br />
            };<br />
            </pre>
            <br />
            <br />
            sort函数就可以这样写（把判断条件作为参数）：<br />
            <br />
            <pre><br />
            <strong>void</strong> sort(Record[] records, Comparator compare){<br />
            <strong>for</strong>(<strong>int</strong> i =&#8230;.){<br />
            <strong>for</strong>(<strong>int</strong> j=&#8230;.){<br />
            <strong>if</strong>(compare.greaterThen(records[ i ], records[ j ]))<br />
            </font><font color="#0000aa"><em>// swap records[ i ] and records[ j ]</font></em><font color="black"><br />
            }<br />
            }<br />
            }<br />
            </pre>
            <br />
            <br />
            这样，对应第一个要求――对records数组按照field1的大小排序。<br />
            我们可以做一个实现Comparator接口的CompareByField1类。<br />
            <br />
            <pre><br />
            <strong>public</strong> <strong>class</strong> CompareByField1 implements Comparator{<br />
            <strong>public</strong> <strong>boolean</strong> greaterThan(Record a, Record b){<br />
            <strong>if</strong>(a.filed1 &gt; b.filed1){<br />
            <strong>return</strong> ture;<br />
            }<br />
            <strong>return</strong> false;<br />
            }<br />
            }<br />
            </pre>
            <br />
            <br />
            sort函数的调用为：<br />
            <pre><br />
            sort(records, <strong>new</strong> CompareByField1());<br />
            </pre>
            <br />
            <br />
            这样，对应第一个要求――对records数组按照field2的大小排序。<br />
            我们可以做一个实现Comparator接口的CompareByField2类。<br />
            <pre><br />
            <strong>public</strong> <strong>class</strong> CompareByField2 implements Comparator{<br />
            <strong>public</strong> <strong>boolean</strong> greaterThan(Record a, Record b){<br />
            <strong>if</strong>(a.filed2 &gt; b.filed2){<br />
            <strong>return</strong> ture;<br />
            }<br />
            <strong>return</strong> false;<br />
            }<br />
            }<br />
            [code]<br />
            <br />
            sort函数的调用为：<br />
            [code]<br />
            sort(records, <strong>new</strong> CompareByField2());<br />
            </pre>
            <br />
            <br />
            按照C++ STL的叫法，这里的sort称为算法（Algorithm），records称为容器（集合），Comparator称为函数对象（Function Object）。<br />
            <br />
            JDK的java.util.Collections类的sort方法和java.util.Comparator接口就是按照这样的思路设计的。下面我们来看看如何应用sort和Comparator解决多列排序问题。<br />
            <br />
            </span></font></td>
        </tr>
    </tbody>
</table>
<a name="6876971"></a>
<table cellspacing="0" cellpadding="0" width="100%" align="center" bgcolor="#cccccc" border="0">
    <tbody>
        <tr>
            <td>
            <table cellspacing="1" cellpadding="4" width="100%" bgcolor="#cccccc" border="0">
                <tbody>
                    <tr bgcolor="#eae9ea">
                        <td valign="top" width="1%" rowspan="2">
                        <table cellspacing="0" cellpadding="0" width="120" border="0">
                            <tbody>
                                <tr>
                                    <td><span id="menu_6876971" onmouseover="showMenu(this.id,'/jivejdon/account/accountProfile.shtml?winwidth=160&amp;userId=42319','URL:200:200')"><a href="http://www.jdon.com/jivejdon/profile.jsp?user=42319"><strong>buaawhl</strong></a> <span><br />
                                    <br />
                                    <a href="http://www.jdon.com/jivejdon/query/threadViewQuery.shtml?queryType=userMessageQueryAction&amp;user=42319" target="_blank">发表文章: 18</a> <br />
                                    注册时间: 2004年07月06日 10:53 </span></span></td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                        <td>
                        <table cellspacing="1" cellpadding="1" width="100%">
                            <tbody>
                                <tr>
                                    <td width="97%"><strong>Re: 这么多设计模式，我的看法和理解</strong> </td>
                                    <td noWrap width="1%">发表: 2004年07月09日 18:37 </td>
                                    <td noWrap align="center" width="1%"><a href="http://www.jdon.com/jivejdon/message/messageReplyAction.shtml?parentMessage.messageId=6876971&amp;forum.forumId=91">回复</a> </td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                    <tr bgcolor="#eae9ea">
                        <td valign="top" width="99%" colspan="4">
                        <table style="table-layout: fixed" cellspacing="2" cellpadding="2" width="100%" border="0">
                            <tbody>
                                <tr>
                                    <td style="word-wrap: break-word"><span class="tpc_content">3．多列排序问题<br />
                                    <br />
                                    3.1排序条件的数量<br />
                                    <br />
                                    我们知道，SQL语句能够实现强大的排序功能，能够按照不同字段的排列进行排序，也能够按照升序，降序排序。比如下面的语句。<br />
                                    order by field1 asc, field2 asc, field3 desc。<br />
                                    <br />
                                    这个排序条件按照field1的升序，field2的升序，field3的降序排序。<br />
                                    注意，排在前面的字段具有较高的优先级。<br />
                                    比如，两条纪录A和B，满足如下条件：<br />
                                    （1）A.field1 &gt; B.field1，（2）A.field2 &lt; B.field2。<br />
                                    这时如果按照order by field1, field2语句排序，那么 A &gt; B。<br />
                                    如果上述条件中的（1）A.field1 &gt; B.field1变化为A.field1 == B.field1。这时，条件（2）就会起作用。这时，A &lt; B。<br />
                                    <br />
                                    我们来看看在Java中如何实现这种灵活而强大的排序。<br />
                                    我们还是以上一节的Record类为例。Record类有3个字段，我们来看一看，有多少种可能的排序条件。<br />
                                    （1）按field1排序。（2）按field2排序。（3）按field3排序。（4）按field1，field2排序。（5）按field1升序，按field2降序排序&#8230;...<br />
                                    <br />
                                    各种排序条件的排列组合，大概共有30种。而且，随着字段个数的增长，排序条件的个数呈幂级数的增长。<br />
                                    按照上一节的sort和Comparator方法，如果我们需要达到按照任意条件进行排序的目的，那么我们需要为每一个排序条件提供一个Comparator，我们需要30个Comparator类。:-)<br />
                                    <br />
                                    当然，我们不会这么做，我们能够进一步提取这个问题中的相同重复部分，优化我们的解决方案。<br />
                                    <br />
                                    3.2 问题分析<br />
                                    我们来分析这个问题中变化的部分和不变的部分。<br />
                                    上面所有的排序条件中，不变的部分有3部分：<br />
                                    （1）A.field1和B.field1的比较，<br />
                                    （2）A.field2和B.field2的比较，<br />
                                    （3）A.field3和B.field3的比较；<br />
                                    <br />
                                    变化的部分有两部分，<br />
                                    （1）这三种比较条件的任意组合排列，<br />
                                    （2）升序和降序。<br />
                                    <br />
                                    根据这段分析，我们引入两个类，ReverseComparator类和CompositeComparator类。<br />
                                    CompositeComparator类用来解决字段的组合排列问题。<br />
                                    ReverseComparator类用来解决字段的升序、降序问题。<br />
                                    <br />
                                    3.3 ReverseComparator类的代码<br />
                                    <pre><br />
                                    <strong>import</strong> java.util.Comparator;<br />
                                    <br />
                                    <strong>public</strong> <strong>class</strong> ReverseComparator implements Comparator{<br />
                                    </font><font color="#0000aa"><em>/** the original comparator*/</font></em><font color="black"><br />
                                    <strong>private</strong> Comparator originalComparator = <strong>null</strong>;<br />
                                    <br />
                                    </font><font color="#0000aa"><em>/** constructor takes a comparator as parameter */</font></em><font color="black"><br />
                                    <strong>public</strong> ReverseComparator(Comparator comparator){<br />
                                    originalComparator = comparator;<br />
                                    }<br />
                                    <br />
                                    </font><font color="#0000aa"><em>/** reverse the result of the original comparator */</font></em><font color="black"><br />
                                    <strong>public</strong> <strong>int</strong> compare(Object o1, Object o2){<br />
                                    <strong>return</strong> - originalComparator.compare(o1, o2);<br />
                                    }<br />
                                    }<br />
                                    </pre>
                                    <br />
                                    <br />
                                    3.4 CompositeComparator类的代码<br />
                                    <pre><br />
                                    <strong>import</strong> java.util.Comparator;<br />
                                    <strong>import</strong> java.util.Iterator;<br />
                                    <strong>import</strong> java.util.List;<br />
                                    <strong>import</strong> java.util.LinkedList;<br />
                                    <br />
                                    <strong>public</strong> <strong>class</strong> CompositeComparator implements Comparator{<br />
                                    </font><font color="#0000aa"><em>/** in the condition list, comparators' priority decrease from head to tail */</font></em><font color="black"><br />
                                    <strong>private</strong> List comparators = <strong>new</strong> LinkedList();<br />
                                    <br />
                                    </font><font color="#0000aa"><em>/** get the comparators, you can manipulate it as need.*/</font></em><font color="black"><br />
                                    <strong>public</strong> List getComparators(){<br />
                                    <strong>return</strong> comparators;<br />
                                    }<br />
                                    <br />
                                    </font><font color="#0000aa"><em>/** add a batch of comparators to the condition list */</font></em><font color="black"><br />
                                    <strong>public</strong> <strong>void</strong> addComparators(Comparator[] comparatorArray){<br />
                                    <strong>if</strong>(comparatorArray == <strong>null</strong>){<br />
                                    <strong>return</strong>;<br />
                                    }<br />
                                    <br />
                                    <strong>for</strong>(<strong>int</strong> i = 0; i &lt; comparatorArray.length; i++){<br />
                                    comparators.add(comparatorArray[i]);<br />
                                    }<br />
                                    }<br />
                                    <br />
                                    </font><font color="#0000aa"><em>/** compare by the priority */</font></em><font color="black"><br />
                                    <strong>public</strong> <strong>int</strong> compare(Object o1, Object o2){<br />
                                    <strong>for</strong>(Iterator iterator = comparators.iterator(); iterator.hasNext();){<br />
                                    Comparator comparator = (Comparator)iterator.next();<br />
                                    <br />
                                    <strong>int</strong> result = comparator.compare(o1, o2);<br />
                                    <br />
                                    <strong>if</strong>(result != 0){<br />
                                    <strong>return</strong> result;<br />
                                    }<br />
                                    }<br />
                                    <br />
                                    <strong>return</strong> 0;<br />
                                    }<br />
                                    }<br />
                                    </pre>
                                    <br />
                                    <br />
                                    3.5 Comparator的组合应用<br />
                                    这一节讲述上面两个类的用法。<br />
                                    对应前面的排序问题，我们只需要3个Comparator类：<br />
                                    （1）Field1Comaprator；<br />
                                    （2）Field2Comaprator；<br />
                                    （3）Field3Comaprator。<br />
                                    <br />
                                    下面举例说明，如何组合这些Comparator实现不同的排序条件。<br />
                                    （1）order by field1, field2<br />
                                    <br />
                                    <pre><br />
                                    CompoiComparator myComparator = <strong>new</strong> CompoiComparator();<br />
                                    myComparator. addComparators(<br />
                                    <strong>new</strong> Comparator[]{<br />
                                    <strong>new</strong> Field1Comaprator (),  <strong>new</strong> Field2Comaprator ()};<br />
                                    );<br />
                                    <br />
                                    </font><font color="#0000aa"><em>// records is a list of Record</font></em><font color="black"><br />
                                    Collections.sort(records,  myComparator);<br />
                                    <br />
                                    （1）order by field1 desc, field2<br />
                                    <br />
                                    CompoiComparator myComparator = <strong>new</strong> CompoiComparator();<br />
                                    myComparator. addComparators(<br />
                                    <strong>new</strong> Comparator[]{<br />
                                    <strong>new</strong> ReverseComparator(<strong>new</strong> Field1Comaprator ()),  <br />
                                    <strong>new</strong> Field2Comaprator ()};<br />
                                    );<br />
                                    <br />
                                    </font><font color="#0000aa"><em>// records is a list of Record</font></em><font color="black"><br />
                                    Collections.sort(records,  myComparator);<br />
                                    <br />
                                    </pre>
                                    <br />
                                    <br />
                                    这里提供的ReverseComparator类和CompositeComparator类都采用了Decorator Pattern。<br />
                                    CompositeComparator类同时也是Composite Pattern。<br />
                                    <br />
                                    4．过滤条件的排列组合<br />
                                    过滤条件问题也属于条件组合问题的范畴。比如JDK提供的java.io.File类提供了一个文件过滤方法listFile(FileFilter)，用户可以定制不同的FileFilter，实现不同的过滤条件，比如文件时间在某个范围内；文件后缀名，文件名符合某种模式；是目录，还是文件，等等。<br />
                                    同样，我们可以应用上述的解决方法，实现灵活的过滤条件组合――用一个CompositeFilter类任意组合过滤条件，用一个ReverseFilter类作为排除条件。<br />
                                    <br />
                                    4.1 CompositeFilter类的代码<br />
                                    <pre><br />
                                    <strong>import</strong> java.io.FileFilter;<br />
                                    <strong>import</strong> java.io.File;<br />
                                    <br />
                                    <strong>import</strong> java.util.Iterator;<br />
                                    <strong>import</strong> java.util.List;<br />
                                    <strong>import</strong> java.util.LinkedList;<br />
                                    <br />
                                    <strong>public</strong> <strong>class</strong> CompositeFilter implements FileFilter {<br />
                                    <br />
                                    </font><font color="#0000aa"><em>/** in the filter list, every condition should be met. */</font></em><font color="black"><br />
                                    <strong>private</strong> List filters = <strong>new</strong> LinkedList();<br />
                                    <br />
                                    </font><font color="#0000aa"><em>/** get the filters, you can manipulate it as need.*/</font></em><font color="black"><br />
                                    <strong>public</strong> List getFilters(){<br />
                                    <strong>return</strong> filters;<br />
                                    }<br />
                                    <br />
                                    </font><font color="#0000aa"><em>/** add a batch of filters to the condition list */</font></em><font color="black"><br />
                                    <strong>public</strong> <strong>void</strong> addComparators(FileFilter[] filterArray){<br />
                                    <strong>if</strong>(filterArray == <strong>null</strong>){<br />
                                    <strong>return</strong>;<br />
                                    }<br />
                                    <br />
                                    <strong>for</strong>(<strong>int</strong> i = 0; i &lt; filterArray.length; i++){<br />
                                    filters.add(filterArray[i]);<br />
                                    }<br />
                                    }<br />
                                    <br />
                                    </font><font color="#0000aa"><em>/** must meet all the filter condition */</font></em><font color="black"><br />
                                    <strong>public</strong> <strong>boolean</strong> accept(File pathname) {<br />
                                    <strong>for</strong>(Iterator iterator = filters.iterator(); iterator.hasNext();){<br />
                                    FileFilter filter = (FileFilter)iterator.next();<br />
                                    <br />
                                    <strong>boolean</strong> result = filter.accept(pathname);<br />
                                    <br />
                                    </font><font color="#0000aa"><em>// if any condition can not be met, return false.</font></em><font color="black"><br />
                                    <strong>if</strong>(result == false){<br />
                                    <strong>return</strong> false;<br />
                                    }<br />
                                    }<br />
                                    <br />
                                    </font><font color="#0000aa"><em>// all conditions are met, return true.</font></em><font color="black"><br />
                                    <strong>return</strong> <strong>true</strong>;<br />
                                    }<br />
                                    }<br />
                                    </pre>
                                    <br />
                                    <br />
                                    4.2 ReverseFilter类的代码<br />
                                    <br />
                                    <pre><br />
                                    <strong>import</strong> java.util.Comparator;<br />
                                    <br />
                                    <strong>public</strong> <strong>class</strong> ReverseComparator implements Comparator{<br />
                                    </font><font color="#0000aa"><em>/** the original comparator*/</font></em><font color="black"><br />
                                    <strong>private</strong> Comparator originalComparator = <strong>null</strong>;<br />
                                    <br />
                                    </font><font color="#0000aa"><em>/** constructor takes a comparator as parameter */</font></em><font color="black"><br />
                                    <strong>public</strong> ReverseComparator(Comparator comparator){<br />
                                    originalComparator = comparator;<br />
                                    }<br />
                                    <br />
                                    </font><font color="#0000aa"><em>/** reverse the result of the original comparator */</font></em><font color="black"><br />
                                    <strong>public</strong> <strong>int</strong> compare(Object o1, Object o2){<br />
                                    <strong>return</strong> - originalComparator.compare(o1, o2);<br />
                                    }<br />
                                    }<br />
                                    </pre>
                                    </span></font></td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
</p>
<img src ="http://www.blogjava.net/yzth/aggbug/165326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yzth/" target="_blank">怡众科技</a> 2007-12-04 22:48 <a href="http://www.blogjava.net/yzth/archive/2007/12/04/165326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>建立一个Struts2+ibatis应用程序(一)</title><link>http://www.blogjava.net/yzth/archive/2007/12/03/165008.html</link><dc:creator>怡众科技</dc:creator><author>怡众科技</author><pubDate>Mon, 03 Dec 2007 13:09:00 GMT</pubDate><guid>http://www.blogjava.net/yzth/archive/2007/12/03/165008.html</guid><wfw:comment>http://www.blogjava.net/yzth/comments/165008.html</wfw:comment><comments>http://www.blogjava.net/yzth/archive/2007/12/03/165008.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yzth/comments/commentRss/165008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yzth/services/trackbacks/165008.html</trackback:ping><description><![CDATA[<p>&nbsp; <br />
(1)部署lib库中文件Struts+ibatis,共6个。<br />
(2)配置struts2中的web.xml，目的是让Struts2来解释web应用。内容如下：<br />
&nbsp;&nbsp; &lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;web-app version="2.4" <br />
&nbsp;xmlns="http://java.sun.com/xml/ns/j2ee" <br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <br />
&nbsp;xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee <br />
&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;<br />
&nbsp;&lt;filter&gt; &lt;!--定义filter名称，制定filter使用的类 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.struts2.dispatcher.FilterDispatcher<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/filter-class&gt;<br />
&nbsp;&lt;/filter&gt;<br />
&nbsp;&lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&lt;!--定义filtemapping指定搜索路径为根路径开始--&gt;<br />
&nbsp;&lt;/filter-mapping&gt;<br />
&nbsp; &lt;welcome-file-list&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
&nbsp; &lt;/welcome-file-list&gt;<br />
&lt;/web-app&gt;</p>
<p><br />
(3)配置Struts2的Struts.xml文件，目的是建立struts2中逻辑调用机制。-----------------------改<br />
内容如下：===============================需要修改<br />
&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;!DOCTYPE struts PUBLIC<br />
&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />
&nbsp;&nbsp;&nbsp; "http://struts.apache.org/dtds/struts-2.0.dtd"&gt;<br />
&lt;struts&gt;<br />
&nbsp;&nbsp; &lt;package name="yzth" namespace="/" extends="struts-default"&gt;<br />
&nbsp;&nbsp;&lt;action name="hello" class="org.lxh.struts2.demo.HelloAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;result name="success"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;/hello.jsp<br />
&nbsp;&nbsp;&nbsp;&lt;/result&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;result name="error"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;/error.jsp<br />
&nbsp;&nbsp;&nbsp;&lt;/result&gt;<br />
&nbsp;&nbsp;&lt;/action&gt;<br />
&nbsp;&lt;/package&gt;<br />
&lt;/struts&gt;<br />
（4）配置Ibatis中的各个关键环节<br />
&nbsp; POJO类的建立&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *** 用于存储ORMapping映射后的数据记录，只包含get 和set 方法<br />
&nbsp; com.mydomain.jata中的<br />
&nbsp; Account.xml&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *** 最重要的ORMapping文件，存储了对数据访问的各种映射的SQL操作。<br />
&nbsp; SqlMapConfig.xml&nbsp; *** 存储连接数据的方法,配置数据连接池。<br />
（5）设计调用界面<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; index.jsp==&gt;hello.action==&gt;account.class(应该从hello.action中调用ormapping)==&gt;struts.xml==&gt;hello.jsp</p>
<p>（5.1）index.jsp使用S:标记传值给hello.action</p>
<p>&lt;%@ page language="java" import="java.util.*" pageEncoding="GBK"%&gt;<br />
&lt;form action="hello.action" method="post"&gt;<br />
&nbsp;&nbsp;&nbsp; 根据ID进行查询：&lt;input type="text" name="msg"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input type="submit" value="提交"&gt;<br />
&lt;/form&gt;</p>
<p>（5.2）hello.action使用Msg接收id后，调用account进行查询。<br />
===========================================================================<br />
这个过程没搞清楚，准备找1个struts2+ibatis的开源项目研究一下再继续。。。。</p>
<br />
<img src ="http://www.blogjava.net/yzth/aggbug/165008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yzth/" target="_blank">怡众科技</a> 2007-12-03 21:09 <a href="http://www.blogjava.net/yzth/archive/2007/12/03/165008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>专业探讨Struts2及相关技术进行J2EE项目开发的博客</title><link>http://www.blogjava.net/yzth/archive/2007/12/03/164984.html</link><dc:creator>怡众科技</dc:creator><author>怡众科技</author><pubDate>Mon, 03 Dec 2007 11:29:00 GMT</pubDate><guid>http://www.blogjava.net/yzth/archive/2007/12/03/164984.html</guid><wfw:comment>http://www.blogjava.net/yzth/comments/164984.html</wfw:comment><comments>http://www.blogjava.net/yzth/archive/2007/12/03/164984.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yzth/comments/commentRss/164984.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yzth/services/trackbacks/164984.html</trackback:ping><description><![CDATA[用心记录我们技术的成长过程。
 <img src ="http://www.blogjava.net/yzth/aggbug/164984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yzth/" target="_blank">怡众科技</a> 2007-12-03 19:29 <a href="http://www.blogjava.net/yzth/archive/2007/12/03/164984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>