﻿<?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-sakrua`s java 世界 </title><link>http://www.blogjava.net/sakrua/</link><description>struts hibernate spring  web2.0 ajax</description><language>zh-cn</language><lastBuildDate>Sat, 20 Jun 2026 15:52:22 GMT</lastBuildDate><pubDate>Sat, 20 Jun 2026 15:52:22 GMT</pubDate><ttl>60</ttl><item><title>hurt</title><link>http://www.blogjava.net/sakrua/articles/252165.html</link><dc:creator>风の使者</dc:creator><author>风の使者</author><pubDate>Wed, 21 Jan 2009 00:45:00 GMT</pubDate><guid>http://www.blogjava.net/sakrua/articles/252165.html</guid><wfw:comment>http://www.blogjava.net/sakrua/comments/252165.html</wfw:comment><comments>http://www.blogjava.net/sakrua/articles/252165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sakrua/comments/commentRss/252165.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sakrua/services/trackbacks/252165.html</trackback:ping><description><![CDATA[<img height="20" src="http://www.blogjava.net/Emoticons/QQ/10.gif" width="20" border="0"  alt="" />
<img src ="http://www.blogjava.net/sakrua/aggbug/252165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sakrua/" target="_blank">风の使者</a> 2009-01-21 08:45 <a href="http://www.blogjava.net/sakrua/articles/252165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很久前写的一个javascript 拖动类 </title><link>http://www.blogjava.net/sakrua/articles/166294.html</link><dc:creator>风の使者</dc:creator><author>风の使者</author><pubDate>Sat, 08 Dec 2007 07:56:00 GMT</pubDate><guid>http://www.blogjava.net/sakrua/articles/166294.html</guid><wfw:comment>http://www.blogjava.net/sakrua/comments/166294.html</wfw:comment><comments>http://www.blogjava.net/sakrua/articles/166294.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sakrua/comments/commentRss/166294.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sakrua/services/trackbacks/166294.html</trackback:ping><description><![CDATA[在web 2.0 的今天，经常用在web页面中拖动页面中的元素。例如，<a href="http://www.google.com/ig">www.google.com/ig</a> .那当然，我们baidu空间后台的操作也用到了，在word press中也可以看到！下面show一下代码：在后面提供代码的完整下载
<p>说说为什么会用图片，因为是用live writer 发布再到其它的blog的，帖代码不好看，反正提供代码下载！哈哈！
<p>下次改用qqmail 发看看效果
<p><a href="http://vzzrda.bay.livefilestore.com/y1p3Z-d0h5oz15tpjzRU-Rs23BR0OZSABj8z3v6Ig0AMJciVI1wjcnc1oqblhL6cPQcfUWaNYPKMZfGfOyfESJtEw?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="503" alt="image" src="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPyi4I_4VUNVmnEDWgTIJZ9ShS_KOxg6HUspSTMXwOoirHkePztIiy4DFUZ3BH1sdfU3KHK-BydNCYbRKlOEC30m?PARTNER=WRITER" width="646" border="0" /></a>
<p><a href="http://by1.storage.msn.com/y1p04t0TR1P2tsdyPN55rxF119MZobe0ECOc_qgPJ1xbM4hBY19paEbYyguv_g5UCUXKdKnABsWEq0XezDgHa33p0sy2MHmg64r?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="503" alt="image" src="http://by1.storage.msn.com/y1p04t0TR1P2ts14l_eI8gWpU4eSo6p8WbhPdqq6Sa6cROB-JQHr5FNm87BqZpReKt-o98MXqUWA7K4DyLPSFtvYe87owMxUoxw?PARTNER=WRITER" width="634" border="0" /></a>
<p><a href="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPx6HMr5Rk8Y1CPcm3Fu-Ov4kqS1jPV2vwZoGN-4W_ly1z-glULUbHN_eagwb7G_rd-OnJlQJGa2WYNIrCzuzCtr?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="450" alt="image" src="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPzuMASoX7-06BBIIW9fzgpbvf__iX5WDlda60x_auqibh2WEPtEBtNIALpeah7JFgP068j-q4qTffNvWQqnz9Sf?PARTNER=WRITER" width="646" border="0" /></a>
<p><a href="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPxQ34sjLV9KvSj17k6cJ_9lD7C5lxywZtNgTgJftj4DJbEpu2QV-wCSwA7eZz217taM5xL2XkXQKqVstYEaV9sp?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="457" alt="image" src="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPxfKa-5wLfeyXtkjMA6fZolhyihVbMCZy5VjRfl6JKEyzBwNuT3ky-EcxF25TUbWxzlVpdkJnZ5CYu2807BDEnO?PARTNER=WRITER" width="646" border="0" /></a>
<p><a href="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPxAe0zbpFPLL_SrxZNTSzuwv4cnOET8ZBaDxCZk7C0bZpj_5KC8EsjnAwS185UMq6-N6MTNm4Jr-nfZR18PhYPn?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="503" alt="image" src="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPxrJFJkhCM31t5uwecx8j1wXtpAHqC9ifE5VcZh8Nstx4k4IAs8ZaJmikTNAUgivKXQXC58Jmp3MJUUZqi9c-js?PARTNER=WRITER" width="642" border="0" /></a>
<p><a href="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPxBV39LO7q2RigOCv42oaOw1ovNV5z9XTd9tNVYhIOfZf-egGY1aAuP3sthPHGNHiLYawtEkAt2Mh0VMmELUs3g?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="image" src="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPxiJ4y_SHlikm9DdQmng56nsOA8pRPh1aDK2oy2E6TkKKTnilJHYVeV5nSrMfNfQzkkdYFWmY-4DZkjI7B-uql5?PARTNER=WRITER" width="646" border="0" /></a>
<p>页面测试的部分代码
<p><a href="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPyenWu2tyA1ii6wjx6dlJ0gL-I0WxKqoppy4pzY746qcUetrn8M1tp2NK4JjkUIExBAwJd0W8QWDyF88jrl2dCj?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="423" alt="image" src="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPyLB_EQhx7IfMbugiH5NfiEpycVzaZjFy4EOFwA0mN2BEA5YXiac2tmQZAtbejV3pijG48Xq-nsGjJ1tijzEIuT?PARTNER=WRITER" width="643" border="0" /></a> </p>
<p>&nbsp;
<blockquote>
<p>下面为代码测试页面　<a title="http://winds8.googlepages.com/drag.html" href="http://winds8.googlepages.com/drag.html">http://winds8.googlepages.com/drag.html</a>
<p><a href="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPxao22FRFMIp_MUFKt2hyctEkB7dv-2o7W0JFgE_Glq5-j9TKVepLvhT-mfEFAvhbvrHOTk51iVFPjLwr5FG4RK?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="486" alt="image" src="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPxKTTJFOngs1ZpcjFKaLrrpTc2mKbUm0B1c_ZkMqzFW4lYwRWtUFe4HHcCAxYEeKnXIGTFAhL77oGyViUKgbl6j?PARTNER=WRITER" width="646" border="0" /></a></p>
</blockquote>
 <img src ="http://www.blogjava.net/sakrua/aggbug/166294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sakrua/" target="_blank">风の使者</a> 2007-12-08 15:56 <a href="http://www.blogjava.net/sakrua/articles/166294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有空写了一个javascript 操作cookie的类－用javascript 控制cookie</title><link>http://www.blogjava.net/sakrua/articles/163043.html</link><dc:creator>风の使者</dc:creator><author>风の使者</author><pubDate>Sun, 25 Nov 2007 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/sakrua/articles/163043.html</guid><wfw:comment>http://www.blogjava.net/sakrua/comments/163043.html</wfw:comment><comments>http://www.blogjava.net/sakrua/articles/163043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sakrua/comments/commentRss/163043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sakrua/services/trackbacks/163043.html</trackback:ping><description><![CDATA[<blockquote>
<p>在web2.0的时代，Ajax技术的应用，我们经常会用到用javascript 用读写cookie,下面先来介绍一下，什么是cookies
<p>味道以怎样的（有点饿了）：
<p>一.什么是Cookies?
<p>你会问，什么是cookies呢? cookie 是浏览器保存在用户计算机上的少量数据。它与特定的WEB页或WEB站点关联起来，自动地在WEB浏览器和WEB服务器之间传递。比如，如果你运行的是Windows操作系统，使用Internet Explorer上网，那么你会发现在你的&#8220;Windows&#8221;目录下面有一个子目录，叫做&#8220;Temporary Internet Files&#8221;。如果你有空看看这个目录，就会发现里面有一些文件，文件名称看起来就象电子邮件地址。比如在我机器上的这个目录里，就有<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#8220;&#88;&#88;&#64;&#115;&#117;&#112;&#112;&#111;&#114;&#116;&#46;&#109;&#105;&#99;&#114;&#111;&#115;&#111;&#102;&#116;&#46;&#99;&#111;&#109;">&#8220;XX@support.microsoft.com</a>&#8221;这样的文件。这是一个cookie 文件，这个文件从哪来呢？猜一猜，它来自微软的支持站点。对于管理细小的、不重要的、不想保存在中央数据库里的细节信息，Cookies 是个很不错的方案。（这不是说大家的名字不重要。）比如，目前网站上不断增长的自定义服务，可以为每个用户定制他们要看的内容。如果你设计的就是这样一个站点，那么你怎么来管理这样的信息：一个用户喜欢绿色的菜单条，而另一个喜欢红色的。确实是个累人的问题。不过，这样的信息，可以很安全地记录到cookie，并保存在用户的计算机上，而你自己的数据库空间可以留给更长久更有意义的数据。
<p>二.Cookie的构成
<p>Cookies最初设计时，是为了CGI编程。但是，我们也可以使用Javascript脚本来操纵cookies。
<p>在Javascript脚本里，一个cookie 实际就是一个字符串属性。当你读取cookie的值时，就得到一个字符串，里面当前WEB页使用的所有cookies的名称和值。每个cookie除了name名称和value值这两个属性以外，还有四个属性。这些属性是： expires过期时间、 path路径、 domain域、以及 secure安全。
<p><strong>1.Expires&#8211;过期时间</strong>
<p>指定cookie的生命期。具体是值是过期日期。如果想让cookie的存在期限超过当前浏览器会话时间，就必须使用这个属性。当过了到期日期时，浏览器就可以删除cookie文件，没有任何影响。
<p><strong>2.Path&#8211;路径</strong>
<p>指定与cookie关联的WEB页。值可以是一个目录，或者是一个路径。
<p><strong>3.Domain&#8211;域</strong>
<p>指定关联的WEB服务器或域。值是域名，比如microsoft.com。这是对path路径属性的一个延伸。如果我们想让 catalog.mycompany.com 能够访问shoppingcart.mycompany.com设置的cookies，该怎么办? 我们可以把domain属性设置成&#8220;mycompany.com&#8221;，并把path属性设置成&#8220;/&#8221;。FYI：不能把cookies域属性设置成与设置它的服务器的所在域不同的值。
<p><strong>4.Secure&#8211;安全</strong>
<p>指定cookie的值通过网络如何在用户和WEB服务器之间传递。这个属性的值或者是&#8220;secure&#8221;，或者为空。缺省情况下，该属性为空，也就是使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure，那么，它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过，设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说，把cookie设置为secure，只保证cookie与WEB服务器之间的数据传输过程加密，而保存在本地的cookie文件并不加密。如果想让本地cookie也加密，得自己加密数据。
<p>三.操作Cookies
<p>请记住，cookie就是文档的一个字符串属性。要保存cookie，只要建立一个字符串，格式是name=（名称＝值），然后把文档的 document.cookie 设置成与它相等即可。比如，假设想保存表单接收到的用户名，那么代码看起来就象这样：
<p>代码
<p>document.cookie = "username=" + escape(form.username.value);
<p>在这里，使用 escape() 编码函数非常重要，因为cookie值里可能包含分号、逗号或者空格。这就是说，在读取cookie值时，必须使用对应的unescape()函数给值解码。
<p><strong>1.cookie的四个属性</strong>
<p>name=[; expires=][; domain=][; path=][; secure]
<p>名称=&lt;值&gt;[; expires=&lt;日期&gt;][; domain=&lt;域&gt;][; path=&lt;路径&gt;][; 安全], 和 应当用对应的值替换。
<p><strong>2.应当使用GMT格式</strong><br />
可以使用Javascript脚本语言的日期类Date的.toGMTString() 方法得到这一GMT格式的日期值。
<p><strong>3.方括号代表这项是可选的</strong><br />
比如在 [; secure]两边的方括号代表要想把cookie设置成安全的，就需要把"; secure" 加到cookie字符串值的后面。如果"; secure" 没有加到cookie字符串后面，那么这个cookie就是不安全的。
<p><strong>4.不要把尖括号&lt;&gt; 和方括号[] 加到cookie里</strong><br />
（除非它们是某些值的内容）设置属性时，不限属性，可以用任何顺序设置。
<p>四.Cookies 的隐患
<p><strong>1.Cookies 安全性</strong><br />
因为某些原因Cookies 的名声很不好。许多人利用cookies做一些卑鄙的事情，比如流量分析、点击跟踪。Cookies 也不是非常安全，特别是没有secure属性的cookies。不过，即使你用了安全的cookies，如果你和别人共用计算机，比如在网吧，那么别人就可以窥探计算机硬盘上未加密保存的cookie文件，也就有可能窃取你的敏感信息。所以，如果你是一个WEB开发人员，那么你要认真考虑这些问题。不要滥用cookies。不要把用户可能认为是敏感的数据保存在cookies里。如果把用户的社会保险号、信用卡号等保存在cookie里，等于把这些敏感信息放在窗户纸下，无异于把用户投到极大危险之中。一个好的原则是，如果你不想陌生人了解你的这些信息，那就不要把它们保存在cookies里。
<p><strong>2.cookies还有一些实际的限制</strong><br />
Cookies保留在计算机上，不跟着用户走。如果用户想换计算机，那么新计算机无法得到原来的cookie。甚至用户在同一台计算机上使用不同浏览器，也得不到原来的cookie：Netscape 不能读取Internet Explorer 的cookies。
<p><strong>3.用户不愿意接受cookies</strong><br />
所以不要以为所有的浏览器都能接受你发出的cookies。如果浏览器不接受cookies，你要保证自己的WEB站点不致因此而崩溃或中断。
<p><strong>4.WEB 浏览器能保留的cookies不一定能超过300个</strong><br />
也没有标准规定浏览器什么时候、怎么样作废cookies。所以达到限制时，浏览器能够有效地随机删除cookies。浏览器保留的来自一个WEB服务器上的cookies，不超过20个，每个cookie的数据（包括名称和值），不超过4K字节.
<p>[b]总之，注意保持cookie简单。不要依赖cookies的存在，不要在每个cookie里保存太多信息。不要保存太多的cookes。但是，抛除这些限制，在技巧高超的WEB管理员手里，cookie的概念是一个有用的工具。
<p>好，对上面有了了解后，我们来看看我写的代码：有100行左右，不会好长，但是以前写的，有点记不得了：
<p><a href="http://vzzrda.bay.livefilestore.com/y1p3Z-d0h5oz17IKsWIYls-3mLenPuI7yOl21E26BOL6_Wtrk9w4J0bEhXMStDjQkDIUTTliD_hFvmAiKs0OH6HLg?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="387" alt="image" src="http://by1.storage.msn.com/y1p04t0TR1P2ttSa3_oo1mB6XYhORYzbqQP_qOlfvXi0HwjZbNtKgQhW28Mj-EkfgCV4zUaPkBdAG-w-jQiGykpNas4xqeLVjV2?PARTNER=WRITER" width="585" border="0" /></a>
<p><a href="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPzeYrRFRcuQ-po3Bv-wXddCrY6Jj5katFcOrJr-zu6Xv8kI9ej6dOdBHd79AsLHv4ssQuv6MrI3loTyCSqMncUt?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="510" alt="image" src="http://by1.storage.msn.com/y1p04t0TR1P2tvPW-_2Fv3DiOi4v2msDvGg7BhUfdQ21T7F975fXJ3CJPtLqFhTW7ECwOysRCgax7nXmSlTk0AkgOGgDYGlNKnu?PARTNER=WRITER" width="574" border="0" /></a>
<p><a href="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPzjXkCitmmmM2ZilGuLDBW7o2_Sns3mzNFsihVp-7TUXGXXW5c1Cr3dtHJGoUra7clQjC0bcX6nsJjfRVu9lr6X?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="515" alt="image" src="http://by1.storage.msn.com/y1p04t0TR1P2tv4fLEhLhpnN3rtewyNKXqJgBow6OaH1kIrSVtafRmGOhkB9Blub2NIPQxypfXTIqcdxs2K_FAfZDKfeoCsHcN8?PARTNER=WRITER" width="569" border="0" /></a>
<p><a href="http://by1.storage.msn.com/y1p04t0TR1P2ttZcKLX4Wm9yjRhldWi_rk85MiYAwaIoNXP5FCgFaaMnB2Gypw8yz8G_43nYIutArl6EdnA0U902gqpxbJNk8bB?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="599" alt="image" src="http://by1.storage.msn.com/y1p04t0TR1P2tu-BUZB4o8UYLYQAJo5X393WdtJEg45XWsVY4bjPbzL6YQQK_ZucMX-Ecjd7IE_31dxbrv2GlYtx65ond2GGWeZ?PARTNER=WRITER" width="574" border="0" /></a>
<p>这个在firefox ie opera 中测试成功的，大家也可以试试，下面讲一下代码的使用方法
<p><a href="http://by1.storage.msn.com/y1p04t0TR1P2tsiUaLZWLiptm3f_Wyiwlq1yLhXRNLuhcHAl6aa2OUo3t08wP9zLnJp6uMkR_6ayCwoDUB_tX04j5vnjiLCqrBe?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="495" alt="image" src="http://by1.storage.msn.com/y1p04t0TR1P2tsnre6823sQiDFfucclafnAHpcs6ratOeFVGpjej430gS4qbufS96rXhMhJyyQiwV9ZqDVfCVmYbVZKNqzczd-p?PARTNER=WRITER" width="527" border="0" /></a>
<p>是不是好简单</p>
</blockquote>
<img src ="http://www.blogjava.net/sakrua/aggbug/163043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sakrua/" target="_blank">风の使者</a> 2007-11-25 22:31 <a href="http://www.blogjava.net/sakrua/articles/163043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 面向对象程序设计 Ajax的必由之路（1）</title><link>http://www.blogjava.net/sakrua/articles/163039.html</link><dc:creator>风の使者</dc:creator><author>风の使者</author><pubDate>Sun, 25 Nov 2007 14:21:00 GMT</pubDate><guid>http://www.blogjava.net/sakrua/articles/163039.html</guid><wfw:comment>http://www.blogjava.net/sakrua/comments/163039.html</wfw:comment><comments>http://www.blogjava.net/sakrua/articles/163039.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sakrua/comments/commentRss/163039.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sakrua/services/trackbacks/163039.html</trackback:ping><description><![CDATA[<blockquote>
<p>这次我来讲一下javascript的程序设计。
<p>在当今的Web2.0的时代，Ajax已成为的它的代名词.无可否定，javascript&nbsp; 是其中的一个非常重要的内容。</p>
</blockquote>
<p>下面为wiki 的说明
<p><strong>AJAX</strong>全称为&#8220;Asynchronous JavaScript and XML&#8221;（异步JavaScript和XML），是一种创建交互式网页应用的网页开发技术。根據Ajax提出者Jesse James Garrett建議<sup>[1]</sup>，它：
<ul>
    <li>使用XHTML+CSS来表示信息；
    <li>使用JavaScript操作DOM（Document Object Model）进行动态显示及交互；
    <li>使用XML和XSLT进行数据交换及相关操作；
    <li>使用XMLHttpRequest对象与Web服务器进行异步数据交换；
    <li>使用JavaScript将所有的东西绑定在一起。
    <li>使用SOAP以XML的格式来传送方法名和方法参数。 </li>
</ul>
<p>类似于DHTML或LAMP，AJAX不是指一种单一的技术，而是有机地利用了一系列相关的技术。事实上，一些基于AJAX的&#8220;派生/合成&#8221;式（derivative/composite）的技术正在出现，如&#8220;AFLAX&#8221;。
<p>AJAX的应用使用支持以上技术的Web浏览器作为运行平台。这些浏览器目前包括：Mozilla、Firefox、Internet Explorer、Opera、Konqueror及Mac OS的Safari。
<p>&nbsp;
<p>因此学习Ajax首先就要学习javascript,好下面我来讲讲javascript的面向对象的程序设计。
<blockquote>
<p>本身，对于javascript 来说，它不支持面向对象的，但我们可以用其它的一些方法来模拟其的实现，下面先看一段小代码</p>
</blockquote>
<blockquote>
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqHaOM9oOaylqPoM5c4hAM6s6az6haTc6CO3viHIfb8T1DIC4PcVoZE2sDjwNAp207w?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="120" alt="image" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqF1EqN1qDMYz9fpinvriLhDZ6tZKyxsdejuJeDBnISmJZyV6fg1QNv3nIfV5lz3rXk?PARTNER=WRITER" width="244" border="0" /></a>
<p>这段小代码定义了一个函数，我们把它放到HTML中可以查看它的运行效果
<p>刚才说javascript 本身是不支持面向对象的，但它给我们流下了function ,下面就用它来构造一个类，请看下面的代码：
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqEzQ2UfYfLZdK5_4iRe8xGpehmCme06HVxXVkaNIHHTrgdynCgwdawbGypRRkwReVY?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="401" alt="image" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqGwSDFiIJlOSu6iV8Hh5mY2LG3b3WKKdkIeM_15XtNTuDk4AH4xMIiV35mlSwIlEC0?PARTNER=WRITER" width="387" border="0" /></a>
<p>在上面的代码中我们定义了一个叫做class1的类，同时我们发现，定义类的方法跟定义函数的方法是一样的，下面来讲一下javascript的一个重要的特性：prototype （是不是很熟啊，我们的prototype.js有一样的名字，现在大家也可以猜到作者为什么要用这个名字了吧。好再看看下面的代码：
<p><a href="http://vzzrda.bay.livefilestore.com/y1p3Z-d0h5oz17PK7XAl7v7SfTJQMeVx1sHIHs67Gysvpj66kVrefY6PZI0s2Iw0WEhXyGpGaIrg2UgQ3qFd2Sv1A?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="462" alt="image" src="http://by1.storage.msn.com/y1p04t0TR1P2tsNXzMnxX-JQxn_HCO2WY3RgIyOmaRsJ7-kpj6CILim28oxXpEkUbZlrV9topaIQIBb5ozb5MIPDDIquuwAk6qf?PARTNER=WRITER" width="587" border="0" /></a>
<p>跟上面的代码有一样的运行效果。
<p>下面来重点讲一下代码吧
<p>在javascript中，由于没有象java ,c#中的class的定义的关键字，因此我们要定义一个类时，就要用到function这个关键字，在javascript中，其实function也就是一个类（一个只有运行代码的类），但注意的是用typeof 时，函数是返回function的,面类是返回object的
<p>产生一个类的对象，跟java一样是用new 的关键字的。大家再看看上面的代码，可以发现我在定义函数和属性时用了this这个关键字，这样是让代码在其的实验中可以引用，相当于我们的公共的方法和属性，当然用var 定义会产生一个private的属性（其实是由于作用域的问题，这个在后面的问题我再说）
<p>跟java不一样的是prototype 这个是一个非常重要的属性，大家要记好。这个定义的格式也要记好。
<p>下面我们来写一个例子程序。看看自己学会了多少（别以为自己学会了，要学的还有好多，&#8220;这个游戏才刚刚开始&#8221;－－不知道谁说的）：
<p><a href="http://vzzrda.bay.livefilestore.com/y1pHpiMaOJeBPy1LQuG1X_Ek8JxTzPjbLPXBV-bbGFe5HuuMBfhjtZ15Atg1D1jFiaKT6xy8i4mPS32At1ldsNbeWomatwoDKgA?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="523" alt="image" src="http://by1.storage.msn.com/y1p04t0TR1P2tsQDBjUctdd6mzdpXSP1VgXbx_jlhBSQ2evb2yzP5UA8WEzBWVmAtYxckJS_6duQW_oIUZaWWuPPrFsFgcCBbop?PARTNER=WRITER" width="548" border="0" /></a>
<p>下次讲讲Ajax了，当然javascript 还有很多要讲的，会讲Ajax 中提到</p>
</blockquote>
<img src ="http://www.blogjava.net/sakrua/aggbug/163039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sakrua/" target="_blank">风の使者</a> 2007-11-25 22:21 <a href="http://www.blogjava.net/sakrua/articles/163039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跟菜鸟学Struts(4)-action</title><link>http://www.blogjava.net/sakrua/articles/161385.html</link><dc:creator>风の使者</dc:creator><author>风の使者</author><pubDate>Sun, 18 Nov 2007 05:32:00 GMT</pubDate><guid>http://www.blogjava.net/sakrua/articles/161385.html</guid><wfw:comment>http://www.blogjava.net/sakrua/comments/161385.html</wfw:comment><comments>http://www.blogjava.net/sakrua/articles/161385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sakrua/comments/commentRss/161385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sakrua/services/trackbacks/161385.html</trackback:ping><description><![CDATA[在以前的例子中，我们每一个action都只有一个动作，例如execute函数，那么有没有其它的方法让一个Action有多个动作昵，
<p>当然那些设计者也不是SB，那么我们看看API文档，在包org.apache.struts.actions中我们会发现有很多的Action
<blockquote>
<p><a href="http://w-inds8.spaces.live.com/org/apache/struts/actions/package-summary.html">org.apache.struts.actions</a>
<p>Interfaces<br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/DownloadAction.StreamInfo.html"><em>DownloadAction.StreamInfo</em></a>
<p>Classes<br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/ActionDispatcher.html">ActionDispatcher</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/BaseAction.html">BaseAction</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/DispatchAction.html">DispatchAction</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/DownloadAction.html">DownloadAction</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/DownloadAction.FileStreamInfo.html">DownloadAction.FileStreamInfo</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/DownloadAction.ResourceStreamInfo.html">DownloadAction.ResourceStreamInfo</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/EventActionDispatcher.html">EventActionDispatcher</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/EventDispatchAction.html">EventDispatchAction</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/ForwardAction.html">ForwardAction</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/IncludeAction.html">IncludeAction</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/LocaleAction.html">LocaleAction</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/LookupDispatchAction.html">LookupDispatchAction</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/MappingDispatchAction.html">MappingDispatchAction</a><br />
<a href="http://w-inds8.spaces.live.com/mmm2007-10-25_18.59/SwitchAction.html">SwitchAction</a></p>
</blockquote>
<p>我们从字面的意思看上去，好像第三个有的像，那么我们来看看 <strong>org.apache.struts.actions.DispatchAction</strong>
<p>来看看下面的英文注解：
<blockquote>
<p>An abstract <strong>Action</strong> that dispatches to a public method that is named by the request parameter whose name is specified by the <code>parameter</code> property of the corresponding ActionMapping. This Action is useful for developers who prefer to combine many similar actions into a single Action class, in order to simplify their application design.
<p>To configure the use of this action in your <code>struts-config.xml</code> file, create an entry like this:
<p><code>&lt;action path="/saveSubscription" type="org.apache.struts.actions.DispatchAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="method"/&gt; </code>
<p>which will use the value of the request parameter named "method" to pick the appropriate "execute" method, which must have the same signature (other than method name) of the standard Action.execute method. For example, you might have the following three methods in the same action:
<ul>
    <li>public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
    <li>public ActionForward insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
    <li>public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception </li>
</ul>
<p>and call one of the methods with a URL like this:
<p><code>http://localhost:8080/myapp/saveSubscription.do?method=update </code>
<p><strong>NOTE</strong> - All of the other mapping characteristics of this action must be shared by the various handlers. This places some constraints over what types of handlers may reasonably be packaged into the same <code>DispatchAction</code> subclass.
<p><strong>NOTE</strong> - If the value of the request parameter is empty, a method named <code>unspecified</code> is called. The default action is to throw an exception. If the request was cancelled (a <code>html:cancel</code> button was pressed), the custom handler <code>cancelled</code> will be used instead. You can also override the <code>getMethodName</code> method to override the action's default handler selection.
<p>从第一段可以知道，这就是我们所要找的那个它了，
<p><code>&lt;action path="/saveSubscription" type="org.apache.struts.actions.DispatchAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="method"/&gt; </code>
<p><code>还有这里有一个配置的例子 ，它的意思就是说，这个Action提供了一个方法让我们跟椐parameter="method" （这里是method）让我们调用Action中的不同的方法，当然这些方法跟我们的execute是一样的只是名字不一样。例如下面：</code>
<p>public ActionForward execute(ActionMapping arg0, ActionForm arg1,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {<br />
&nbsp;&nbsp;&nbsp; return super.execute(arg0, arg1, arg2, arg3);<br />
}<br />
//跟上面对比一下，是不是一样呢<br />
public ActionForward sayHello(ActionMapping arg0, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request, HttpServletResponse response) throws Exception {<br />
&nbsp;&nbsp;&nbsp; response.getWriter().write("Hello ! DidpatchAction");<br />
&nbsp;&nbsp;&nbsp; response.flushBuffer();<br />
&nbsp;&nbsp;&nbsp; return null;<br />
}
<p>public ActionForward closeWindow(ActionMapping arg0, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request, HttpServletResponse response) throws Exception {<br />
&nbsp;&nbsp;&nbsp; String str ="IE Will Close&lt;script language=\"javascript\"&gt;window.close();&lt;/script&gt;";<br />
&nbsp;&nbsp;&nbsp; response.getWriter().write(str);<br />
&nbsp;&nbsp;&nbsp; response.flushBuffer();<br />
&nbsp;&nbsp;&nbsp; return null;
<p>好下面我们在以前的例子的基础上完成这次的例子
<p>新建一个struts-config-action.xml文件，下面为文件的内容：
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;!DOCTYPE struts-config PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href='http://struts.apache.org/dtds/struts-config_1_3.dtd"' href_cetemp='http://struts.apache.org/dtds/struts-config_1_3.dtd"'>http://struts.apache.org/dtds/struts-config_1_3.dtd"</a>&gt;
<p>&lt;struts-config&gt;
<p>&nbsp;&nbsp;&nbsp; &lt;action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/testAction" validate="false" parameter="method"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="org.action.struts.DidpatchActionTest"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action-mappings&gt;<br />
&lt;/struts-config&gt;
<p>是不是看不习惯呢，没有Action的也没有forward。不过现在我告诉你这是完全可以的
<p>我们把这个配置文件加到web.xml文件中
<p>&lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xml,/WEB-INF/struts-config-file.xml,/WEB-INF/struts-config-action.xml&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqGHs69xr7T7fTAUCXOdwmvI0fFxo6MiCWcdXntYMXh3Vc0pf9taQp90UrvHhCFMdkE?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="58" alt="image" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqGMTIv5FN8rkvKfOrbF2zyvQLzw3ap9nyNCKhhtFBgx12My6rCXkpCtBcAfyFMPtPI?PARTNER=WRITER" width="196" border="0" /></a>
<p>以这种目录结构建一个index.jsp文件
<p>下面为jsp的内容：
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-bean"' href_cetemp='http://struts.apache.org/tags-bean"'>http://struts.apache.org/tags-bean"</a> prefix="bean" %&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-html"' href_cetemp='http://struts.apache.org/tags-html"'>http://struts.apache.org/tags-html"</a> prefix="html" %&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"' href_cetemp='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"'>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt;<br />
&lt;html xmlns="<a href='http://www.w3.org/1999/xhtml"' href_cetemp='http://www.w3.org/1999/xhtml"'>http://www.w3.org/1999/xhtml"</a>&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;<br />
&lt;title&gt;Action Test&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;a href="../testAction.do?method=sayHello"&gt;sayHello&lt;/a&gt;<br />
&lt;a href="../testAction.do?method=closeWindow"&gt;closeWindow&lt;/a&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
<p>没有什么好说的。
<p>下面我们建一个Action，当然基类是<strong>org.apache.struts.actions.DispatchAction</strong>
<p>下面为Action的内容：
<p>package org.action.struts;
<p>import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;<br />
import org.apache.struts.action.ActionForm;<br />
import org.apache.struts.action.ActionForward;<br />
import org.apache.struts.action.ActionMapping;<br />
import org.apache.struts.actions.DispatchAction;
<p>public class DidpatchActionTest extends DispatchAction {
<p>&nbsp;&nbsp;&nbsp; public ActionForward execute(ActionMapping arg0, ActionForm arg1,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return super.execute(arg0, arg1, arg2, arg3);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //跟上面对比一下，是不是一样呢<br />
&nbsp;&nbsp;&nbsp; public ActionForward sayHello(ActionMapping arg0, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request, HttpServletResponse response) throws Exception {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.getWriter().write("&lt;script language=\"javascript\"&gt;alert('Hello ! DidpatchAction');&lt;/script&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.flushBuffer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp;&nbsp;&nbsp; }
<p>&nbsp;&nbsp;&nbsp; public ActionForward closeWindow(ActionMapping arg0, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request, HttpServletResponse response) throws Exception {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str ="IE Will Close&lt;script language=\"javascript\"&gt;window.close();&lt;/script&gt;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.getWriter().write(str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.flushBuffer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp;&nbsp;&nbsp; }
<p>}
<p>我们用response对象来输出页面的内容（这个与jsp的response对象是一样的);
<p>下面为运行的结果
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqHVv-8bfI9EIsPe0VFFeinD1UnVJjdpY7HKzxVf21cNSlrjFfaRRIVkgqzcXcdyoqE?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="219" alt="image" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqF7M0yJzI2lJdPrZFovSQ2C7LYQ2XJXqvlql1DxZ_4cH8k6OWyt4vyL191lkXihGro?PARTNER=WRITER" width="211" border="0" /></a>
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqFBj_xpQYul4rFMgfq7lhkGpGqmlGgZQiiFH8Y9Wk4yotJb2m69sBpamqJG_X7wYU8?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="254" alt="image" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqH2b0-7byUSQ8NrACzvcsbH5g-ln07HL9TBEV6-deTH9u4zIRlKMRtSwbGewT46cm4?PARTNER=WRITER" width="375" border="0" /></a>
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqEg5RdQ56vPdgTVymt2uzi79IDsFluGzUGx8xm2UAMwiUU3_nezfrCaO2gMhaX2Cwo?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="264" alt="image" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqE-RkCM1zKTlxuFXOq9_gxKy-cresNnv14SEmcHHOsr_rAAMnxMdbgwiiNFfeRW0Ig?PARTNER=WRITER" width="465" border="0" /></a>
<p>大家看到了没有，<a title="http://localhost:8080/Struts_HelloWorld/testAction.do?method=closeWindow" href="http://localhost:8080/Struts_HelloWorld/testAction.do?method=closeWindow">http://localhost:8080/Struts_HelloWorld/testAction.do?method=closeWindow</a>
<p>它会跟椐method中的参数来调用不同的函数</p>
</blockquote>
<div class="footerLinks"><nobr>18:51</nobr>&nbsp;| <nobr><a id="blogAddComment0" href="http://w-inds8.spaces.live.com/blog/cns!4D28F2F74B328142!429.entry#post" bvitemtype="post">添加评论</a></nobr>&nbsp;| <nobr><a id="blogSendMessage0" title="给作者发送消息" href="http://spaces.live.com/api.aspx?wx_action=sendMessage&amp;wxp_toCid=5559960883921322306&amp;wx_ru=http%3a%2f%2fw-inds8.spaces.live.com%2fdefault.aspx%3fwa%3dwsignin1.0&amp;wxp_subject=%e7%ad%94%e5%a4%8d%ef%bc%9a%e6%82%a8%e7%9a%84%e6%97%a5%e5%bf%97%e2%80%9c%e8%b7%9f%e8%8f%9c%e9%b8%9f%e5%ad%a6Struts(4)-action%e2%80%9d&amp;wxp_body=%3cdiv%3e%3cbr+%2f%3e%3cbr+%2f%3e%3chr+%2f%3e%e6%9f%a5%e7%9c%8b%e6%97%a5%e5%bf%97%ef%bc%9a%3ca+href%3d%22http%26%2358%3b%26%2347%3b%26%2347%3bw-inds8.spaces.live.com%26%2347%3bblog%26%2347%3bcns%26%2333%3b4D28F2F74B328142%26%2333%3b429.entry%22%3ehttp%26%2358%3b%26%2347%3b%26%2347%3bw-inds8.spaces.live.com%26%2347%3bblog%26%2347%3bcns%26%2333%3b4D28F2F74B328142%26%2333%3b429.entry%3c%2fa%3e%3c%2fdiv%3e">发送消息</a></nobr>&nbsp;| <nobr><a id="blogPermalink0" title="此日志的固定链接" href="http://w-inds8.spaces.live.com/blog/cns!4D28F2F74B328142!429.entry">固定链接</a></nobr>&nbsp;| <nobr><a id="blogTrackbacks0" href="http://w-inds8.spaces.live.com/blog/cns!4D28F2F74B328142!429.entry#trackback" bvitemtype="trackback">查看引用通告 (0)</a></nobr>&nbsp;| <nobr><a id="blogThis0" title="写入您的共享空间日志" href="javascript:BlogIt('cns!4D28F2F74B328142!429');">写入日志</a></nobr></div>
<div class="footer"></div>
<div class="bvEntry" id="entrycns!4D28F2F74B328142!420" bv:cns="cns!4D28F2F74B328142!420" bv:ca="true" bv:cat="">
<h4 class="TextColor1" id="subjcns!4D28F2F74B328142!420" style="margin-bottom: 0px"><a href="http://w-inds8.spaces.live.com/blog/cns!4D28F2F74B328142!420.entry">跟菜鸟学struts (3) - actionFrom</a></h4>
<div class="bvMsg" id="msgcns!4D28F2F74B328142!420">
<blockquote>
<p>通常我们在Struts中是使用ActionForm来传送jsp页面的form中提交的数据的，在前面的例子中我们也用到了一个
<p>ActionForm它们都是从org.apache.struts.action.ActionForm中继承来的，那么Struts就行帮我们把提交的数
<p>据自动入到这个Form 中，我们在Action中就可以用form.getXXX()和form.setXXX()来处理数据了，好！下面我
<p>们来做一下这个例子
<p>新建一个文件struts-config-formtest.xml ，下面为文件的内容：
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;!DOCTYPE struts-config PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href='http://struts.apache.org/dtds/struts-config_1_3.dtd"' href_cetemp='http://struts.apache.org/dtds/struts-config_1_3.dtd"'>http://struts.apache.org/dtds/struts-config_1_3.dtd"</a>&gt;
<p>&lt;struts-config&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form-beans&gt;<br />
&nbsp; <font color="#ff2828">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><u>&lt;form-bean name="testForm" type="org.form.struts.form.NormalForm"&nbsp; &gt;&lt;/form-bean&gt;</u></strong></font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-bean name="dynaTestForm" type="org.apache.struts.action.DynaActionForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="userName" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="passWorld" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="sex" type="byte" initial="0"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="email" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="phoneNum" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="age" type="int" initial="12"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form-bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form-beans&gt;
<p>&nbsp;&nbsp;&nbsp; &lt;action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/formTest"&nbsp; name="testForm" type="org.form.struts.action.NormalFormAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/normalsuccess.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/dynaformTest"&nbsp; name ="dynaTestForm" type="org.form.struts.action.dynaFormAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/dynasuccess.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/gotoaction" type="org.form.struts.action.GotoAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/index.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action-mappings&gt;<br />
&lt;/struts-config&gt;
<p>现在我们只要看到这一句就足够了，动态Form我们会在下面讲解
<p><font color="#ff2828">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><u>&lt;form-bean name="testForm" type="org.form.struts.form.NormalForm"&nbsp; &gt;&lt;/form-bean&gt;</u></strong></font>
<p>相信朋友们都清楚这个用来做什么的吧，不知道就看看我先前的文章。
<p>下面为NormalForm.java的内容
<p>package org.form.struts.form;
<p>import org.apache.struts.action.ActionForm;
<p>public class NormalForm extends ActionForm {<br />
&nbsp;&nbsp;&nbsp; private static final long serialVersionUID = -4017195510815090304L;
<p>&nbsp;&nbsp;&nbsp; private String userName;<br />
&nbsp;&nbsp;&nbsp; private String passWorld;<br />
&nbsp;&nbsp;&nbsp; private byte sex;<br />
&nbsp;&nbsp;&nbsp; private String email;<br />
&nbsp;&nbsp;&nbsp; private String phoneNum;<br />
&nbsp;&nbsp;&nbsp; private int age;<br />
&nbsp;&nbsp;&nbsp; public String getUserName() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return userName;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setUserName(String userName) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userName = userName;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public String getPassWorld() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return passWorld;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setPassWorld(String passWorld) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.passWorld = passWorld;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public byte getSex() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sex;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setSex(byte sex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.sex = sex;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public String getEmail() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return email;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setEmail(String email) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.email = email;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public String getPhoneNum() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return phoneNum;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setPhoneNum(String phoneNum) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.phoneNum = phoneNum;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public int getAge() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return age;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setAge(int age) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.age = age;<br />
&nbsp;&nbsp;&nbsp; }<br />
}
<p>我们可以看到这个只是个从ActionForm派生来的javabean,下面把jsp页面也帖出来
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-bean"' href_cetemp='http://struts.apache.org/tags-bean"'>http://struts.apache.org/tags-bean"</a> prefix="bean" %&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-html"' href_cetemp='http://struts.apache.org/tags-html"'>http://struts.apache.org/tags-html"</a> prefix="html" %&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"' href_cetemp='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"'>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt;<br />
&lt;html xmlns="<a href='http://www.w3.org/1999/xhtml"' href_cetemp='http://www.w3.org/1999/xhtml"'>http://www.w3.org/1999/xhtml"</a>&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;<br />
&lt;title&gt;请选择你要测试的form&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;html:form action="formTest" styleId="testform" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userName:&lt;html:text property="userName"&gt;&lt;/html:text&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; passWorld:&lt;html:password property="passWorld"&gt;&lt;/html:password&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sex&lt;html:radio property="sex" value="0" title="男"&gt;男&lt;/html:radio&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:radio property="sex" value="1" title="女"&gt;女&lt;/html:radio&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; email&lt;html:text property="email"&gt;&lt;/html:text&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; phoneNum&lt;html:text property="phoneNum"&gt;&lt;/html:text&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; age&lt;html:text property="age"&gt;&lt;/html:text&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; normalForm submit&lt;html:submit onclick="submit(0);return false;"&gt;&lt;/html:submit&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dynaForm submit&lt;html:submit &gt;&lt;/html:submit&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/html:form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
<p>这次不会讲它的目录结构，在最后我会放出下载地址
<p>好，我们拉着反struts动态from也讲完再来看运行效果：
<p>动态Form是什么意思呢，好就是让我们不用写上面的javabean面直接在xml配置文件中配置，下面为代码，其实上面也已经把代码帖出来了，下面我再帖一次，请注意高亮部分
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;!DOCTYPE struts-config PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href='http://struts.apache.org/dtds/struts-config_1_3.dtd"' href_cetemp='http://struts.apache.org/dtds/struts-config_1_3.dtd"'>http://struts.apache.org/dtds/struts-config_1_3.dtd"</a>&gt;
<p>&lt;struts-config&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form-beans&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-bean name="testForm" type="org.form.struts.form.NormalForm"&nbsp; &gt;&lt;/form-bean&gt;<br />
<font color="#ff0909"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-bean name="dynaTestForm" type="org.apache.struts.action.DynaActionForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="userName" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="passWorld" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="sex" type="byte" initial="0"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="email" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="phoneNum" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="age" type="int" initial="12"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form-bean&gt;</strong></font><br />
&nbsp;&nbsp;&nbsp; &lt;/form-beans&gt;
<p>&nbsp;&nbsp;&nbsp; &lt;action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/formTest"&nbsp; name="testForm" type="org.form.struts.action.NormalFormAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/normalsuccess.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/dynaformTest"&nbsp; name ="dynaTestForm" type="org.form.struts.action.dynaFormAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/dynasuccess.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/gotoaction" type="org.form.struts.action.GotoAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/index.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action-mappings&gt;<br />
&lt;/struts-config&gt;
<p>我们可以看到form中的所有的内容都在xml文件中写出来了，
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="sex" type="byte" initial="0"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="email" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
看看上面的两行有什么不一样，它们都是用&lt;form-property&gt;来定义的都有name (相当于javabean中的一个property)
<p>type 不用说了吧就是它的类型，不同的是在第一行中多了一个initial="0" 为什么呢，请记住在基本数据成员是要初始化的
<p>就像局部变量一样。
<p>其实这个东东没什么难度吧，下面讲一个我们初学者都出现的问题，
<p>我们可以先找找这个关键字Cannot retrieve mapping for action 了解一下
<p>下面我们进入正题吧：
<p>web.xml的内容
<p>&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;<br />
<font color="#000000">&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xm&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config/formtest&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config-formtest.xml&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;</font><br />
&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;
<p>我们可以看到这里有两个模块，问题就在这里了，（如果不清楚struts多个配置文件的使用可以看我另一个文章）
<p>在配置文件中你们可以看到我们多了模块，在直接访问jsp文件时，struts只会在默认的模块中找Action所以我们只能
<p>通过一个Action来做连接（好不爽啊）。
<p>下面帖运行效果出来：
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqG4-6gzHFnvSmDM_DLtoqiaTA1yNbVEldx5pqOdi1JvZZpm_Qfaqv1DXkjmIpSbQAg?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="image" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqFokPoNRswRq2GmG5ePTKXm60nbL5flxLF71oM-EuNidckjfaCDkVIAzmrpmcoiVEI?PARTNER=WRITER" width="293" border="0" /></a>
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqGlWkvaKc6RBnzLtBnvqu0wlIByKeUiFGemIH1NaU4RMAio4Yxs5IP0ah8TXWJCMFM?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="247" alt="image" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqHFvNyXawN6i00RwM4uCH8d-dl2s9HmUhEePjN0X3gJeeCgxeQOqnMD4z2mrF_087U?PARTNER=WRITER" width="208" border="0" /></a>
<p>下面这个是找不到Action的效果
<p><a href="http://vzzrda.bay.livefilestore.com/y1p3Z-d0h5oz15dy8Bom5NIowAcgVaefXQSRmdWr-5OHVC_eGJS3z5fkE5z_mMZuC95Lp88AF1BaVCtvyY2BkUBjw?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="278" alt="image" src="http://by1.storage.msn.com/y1p04t0TR1P2tu-E1wU52N3DumGDK42C3CDHDKg-k9Y2Ji0A_qrrM91za2Tqg3BvYtn8q-J1_SYXdCv91hkby0fbHJ8xau99xBM?PARTNER=WRITER" width="519" border="0" /></a>
<p>&nbsp;&nbsp; &lt;!-- 动态Form用这个 --&gt;
<p>&lt;html:form action="formTest" styleId="testform" &gt;<br />
&lt;!--&lt;html:form action="dynaformTest" styleId="testform" &gt;--&gt;
<p>下载地址
<p><a title="Click to view this file" href="http://winds8.googlepages.com/Struts_HelloWorld.war">Click to view this file</a></p>
</blockquote></div>
</div>
<img src ="http://www.blogjava.net/sakrua/aggbug/161385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sakrua/" target="_blank">风の使者</a> 2007-11-18 13:32 <a href="http://www.blogjava.net/sakrua/articles/161385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跟菜鸟学struts (3) - actionFrom</title><link>http://www.blogjava.net/sakrua/articles/161369.html</link><dc:creator>风の使者</dc:creator><author>风の使者</author><pubDate>Sun, 18 Nov 2007 04:12:00 GMT</pubDate><guid>http://www.blogjava.net/sakrua/articles/161369.html</guid><wfw:comment>http://www.blogjava.net/sakrua/comments/161369.html</wfw:comment><comments>http://www.blogjava.net/sakrua/articles/161369.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sakrua/comments/commentRss/161369.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sakrua/services/trackbacks/161369.html</trackback:ping><description><![CDATA[<blockquote>
<p>通常我们在Struts中是使用ActionForm来传送jsp页面的form中提交的数据的，在前面的例子中我们也用到了一个
<p>ActionForm它们都是从org.apache.struts.action.ActionForm中继承来的，那么Struts就行帮我们把提交的数
<p>据自动入到这个Form 中，我们在Action中就可以用form.getXXX()和form.setXXX()来处理数据了，好！下面我
<p>们来做一下这个例子
<p>新建一个文件struts-config-formtest.xml ，下面为文件的内容：
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;!DOCTYPE struts-config PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href='http://struts.apache.org/dtds/struts-config_1_3.dtd"' href_cetemp='http://struts.apache.org/dtds/struts-config_1_3.dtd"'>http://struts.apache.org/dtds/struts-config_1_3.dtd"</a>&gt;
<p>&lt;struts-config&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form-beans&gt;<br />
&nbsp; <font color="#ff2828">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><u>&lt;form-bean name="testForm" type="org.form.struts.form.NormalForm"&nbsp; &gt;&lt;/form-bean&gt;</u></strong></font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-bean name="dynaTestForm" type="org.apache.struts.action.DynaActionForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="userName" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="passWorld" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="sex" type="byte" initial="0"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="email" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="phoneNum" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="age" type="int" initial="12"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form-bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form-beans&gt;
<p>&nbsp;&nbsp;&nbsp; &lt;action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/formTest"&nbsp; name="testForm" type="org.form.struts.action.NormalFormAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/normalsuccess.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/dynaformTest"&nbsp; name ="dynaTestForm" type="org.form.struts.action.dynaFormAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/dynasuccess.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/gotoaction" type="org.form.struts.action.GotoAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/index.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action-mappings&gt;<br />
&lt;/struts-config&gt;
<p>现在我们只要看到这一句就足够了，动态Form我们会在下面讲解
<p><font color="#ff2828">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><u>&lt;form-bean name="testForm" type="org.form.struts.form.NormalForm"&nbsp; &gt;&lt;/form-bean&gt;</u></strong></font>
<p>相信朋友们都清楚这个用来做什么的吧，不知道就看看我先前的文章。
<p>下面为NormalForm.java的内容
<p>package org.form.struts.form;
<p>import org.apache.struts.action.ActionForm;
<p>public class NormalForm extends ActionForm {<br />
&nbsp;&nbsp;&nbsp; private static final long serialVersionUID = -4017195510815090304L;
<p>&nbsp;&nbsp;&nbsp; private String userName;<br />
&nbsp;&nbsp;&nbsp; private String passWorld;<br />
&nbsp;&nbsp;&nbsp; private byte sex;<br />
&nbsp;&nbsp;&nbsp; private String email;<br />
&nbsp;&nbsp;&nbsp; private String phoneNum;<br />
&nbsp;&nbsp;&nbsp; private int age;<br />
&nbsp;&nbsp;&nbsp; public String getUserName() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return userName;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setUserName(String userName) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userName = userName;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public String getPassWorld() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return passWorld;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setPassWorld(String passWorld) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.passWorld = passWorld;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public byte getSex() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sex;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setSex(byte sex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.sex = sex;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public String getEmail() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return email;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setEmail(String email) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.email = email;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public String getPhoneNum() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return phoneNum;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setPhoneNum(String phoneNum) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.phoneNum = phoneNum;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public int getAge() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return age;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setAge(int age) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.age = age;<br />
&nbsp;&nbsp;&nbsp; }<br />
}
<p>我们可以看到这个只是个从ActionForm派生来的javabean,下面把jsp页面也帖出来
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-bean"' href_cetemp='http://struts.apache.org/tags-bean"'>http://struts.apache.org/tags-bean"</a> prefix="bean" %&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-html"' href_cetemp='http://struts.apache.org/tags-html"'>http://struts.apache.org/tags-html"</a> prefix="html" %&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"' href_cetemp='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"'>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt;<br />
&lt;html xmlns="<a href='http://www.w3.org/1999/xhtml"' href_cetemp='http://www.w3.org/1999/xhtml"'>http://www.w3.org/1999/xhtml"</a>&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;<br />
&lt;title&gt;请选择你要测试的form&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;html:form action="formTest" styleId="testform" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userName:&lt;html:text property="userName"&gt;&lt;/html:text&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; passWorld:&lt;html:password property="passWorld"&gt;&lt;/html:password&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sex&lt;html:radio property="sex" value="0" title="男"&gt;男&lt;/html:radio&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:radio property="sex" value="1" title="女"&gt;女&lt;/html:radio&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; email&lt;html:text property="email"&gt;&lt;/html:text&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; phoneNum&lt;html:text property="phoneNum"&gt;&lt;/html:text&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; age&lt;html:text property="age"&gt;&lt;/html:text&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; normalForm submit&lt;html:submit onclick="submit(0);return false;"&gt;&lt;/html:submit&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dynaForm submit&lt;html:submit &gt;&lt;/html:submit&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/html:form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
<p>这次不会讲它的目录结构，在最后我会放出下载地址
<p>好，我们拉着反struts动态from也讲完再来看运行效果：
<p>动态Form是什么意思呢，好就是让我们不用写上面的javabean面直接在xml配置文件中配置，下面为代码，其实上面也已经把代码帖出来了，下面我再帖一次，请注意高亮部分
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;!DOCTYPE struts-config PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href='http://struts.apache.org/dtds/struts-config_1_3.dtd"' href_cetemp='http://struts.apache.org/dtds/struts-config_1_3.dtd"'>http://struts.apache.org/dtds/struts-config_1_3.dtd"</a>&gt;
<p>&lt;struts-config&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form-beans&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-bean name="testForm" type="org.form.struts.form.NormalForm"&nbsp; &gt;&lt;/form-bean&gt;<br />
<font color="#ff0909"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-bean name="dynaTestForm" type="org.apache.struts.action.DynaActionForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="userName" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="passWorld" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="sex" type="byte" initial="0"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="email" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="phoneNum" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="age" type="int" initial="12"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form-bean&gt;</strong></font><br />
&nbsp;&nbsp;&nbsp; &lt;/form-beans&gt;
<p>&nbsp;&nbsp;&nbsp; &lt;action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/formTest"&nbsp; name="testForm" type="org.form.struts.action.NormalFormAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/normalsuccess.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/dynaformTest"&nbsp; name ="dynaTestForm" type="org.form.struts.action.dynaFormAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/dynasuccess.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/gotoaction" type="org.form.struts.action.GotoAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/index.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action-mappings&gt;<br />
&lt;/struts-config&gt;
<p>我们可以看到form中的所有的内容都在xml文件中写出来了，
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="sex" type="byte" initial="0"&gt;&lt;/form-property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="email" type="java.lang.String"&gt;&lt;/form-property&gt;<br />
看看上面的两行有什么不一样，它们都是用&lt;form-property&gt;来定义的都有name (相当于javabean中的一个property)
<p>type 不用说了吧就是它的类型，不同的是在第一行中多了一个initial="0" 为什么呢，请记住在基本数据成员是要初始化的
<p>就像局部变量一样。
<p>其实这个东东没什么难度吧，下面讲一个我们初学者都出现的问题，
<p>我们可以先找找这个关键字Cannot retrieve mapping for action 了解一下
<p>下面我们进入正题吧：
<p>web.xml的内容
<p>&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;<br />
<font color="#000000">&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xm&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config/formtest&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config-formtest.xml&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;</font><br />
&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;
<p>我们可以看到这里有两个模块，问题就在这里了，（如果不清楚struts多个配置文件的使用可以看我另一个文章）
<p>在配置文件中你们可以看到我们多了模块，在直接访问jsp文件时，struts只会在默认的模块中找Action所以我们只能
<p>通过一个Action来做连接（好不爽啊）。
<p>下面帖运行效果出来：
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqG4-6gzHFnvSmDM_DLtoqiaTA1yNbVEldx5pqOdi1JvZZpm_Qfaqv1DXkjmIpSbQAg?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="image" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqFokPoNRswRq2GmG5ePTKXm60nbL5flxLF71oM-EuNidckjfaCDkVIAzmrpmcoiVEI?PARTNER=WRITER" width="293" border="0" /></a>
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqGlWkvaKc6RBnzLtBnvqu0wlIByKeUiFGemIH1NaU4RMAio4Yxs5IP0ah8TXWJCMFM?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="247" alt="image" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqHFvNyXawN6i00RwM4uCH8d-dl2s9HmUhEePjN0X3gJeeCgxeQOqnMD4z2mrF_087U?PARTNER=WRITER" width="208" border="0" /></a>
<p>下面这个是找不到Action的效果
<p><a href="http://vzzrda.bay.livefilestore.com/y1p3Z-d0h5oz15dy8Bom5NIowAcgVaefXQSRmdWr-5OHVC_eGJS3z5fkE5z_mMZuC95Lp88AF1BaVCtvyY2BkUBjw?PARTNER=WRITER"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="278" alt="image" src="http://by1.storage.msn.com/y1p04t0TR1P2tu-E1wU52N3DumGDK42C3CDHDKg-k9Y2Ji0A_qrrM91za2Tqg3BvYtn8q-J1_SYXdCv91hkby0fbHJ8xau99xBM?PARTNER=WRITER" width="519" border="0" /></a>
<p>&nbsp;&nbsp; &lt;!-- 动态Form用这个 --&gt;
<p>&lt;html:form action="formTest" styleId="testform" &gt;<br />
&lt;!--&lt;html:form action="dynaformTest" styleId="testform" &gt;--&gt;
<p>下载地址
<p><a title="Click to view this file" href="http://winds8.googlepages.com/Struts_HelloWorld.war">Click to view this file</a></p>
</blockquote>
<p><a href="http://w-inds8.spaces.live.com/blog/cns!4D28F2F74B328142!429.entry"></a>&nbsp;</p>
<img src ="http://www.blogjava.net/sakrua/aggbug/161369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sakrua/" target="_blank">风の使者</a> 2007-11-18 12:12 <a href="http://www.blogjava.net/sakrua/articles/161369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 进阶之 ActionServlet深入探讨</title><link>http://www.blogjava.net/sakrua/articles/159190.html</link><dc:creator>风の使者</dc:creator><author>风の使者</author><pubDate>Thu, 08 Nov 2007 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/sakrua/articles/159190.html</guid><wfw:comment>http://www.blogjava.net/sakrua/comments/159190.html</wfw:comment><comments>http://www.blogjava.net/sakrua/articles/159190.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sakrua/comments/commentRss/159190.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sakrua/services/trackbacks/159190.html</trackback:ping><description><![CDATA[<p><a href="http://by1.storage.msn.com/y1p04t0TR1P2ttv3ff5Qh1VN-VDLuuqBeaftS6YsJDPiVOpWmq2PteuXwkKnzvm7iAXK3lyjyD9ymkQzWZhX56BsZHIMpDoGy-v"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="153" alt="image" src="http://by1.storage.msn.com/y1p04t0TR1P2tsA5rBiNp5FS3wxkz9wOUwsgzoI_CbIDYQ54iWVoCOzYOGROuuqP19vDs3PX21xUFMr9ujsZLDLUlK4xesciUkc" width="515" border="0" /></a>
<blockquote>
<p>Struts提供了一个缺省版本的ActionServlet类，你可以继承这个类，覆盖其中的一些方法来达到你的特殊处理的需要。ActionServlet继承与javax.servlet.http.HttpServlet，所以在本质上它和一个普通的servlet没有区别，你完全可以把它当做一个servlet来看待，只是在其中完成的功能不同罢了。ActionServlet主要完成如下功能：</p>
</blockquote>
<ol>
    <ol>
        <li>将一个来自客户端的URI映射到一个相应的Action类
        <li>如果是这个Action类是第一次被调用，那么实例化一个并放入缓存
        <li>如果在配置文件(struts-config.xml)中指定了相应的ActionForm，那么从Request中抓取数据填充FormBean
        <li>调用这个Action类的perform()方法，传入ActionMapping的一个引用，对应的ActionForm、以及由容器传给ActionServlet的HttpServletRequest、HttpServletResponse对象。</li>
    </ol>
</ol>
<blockquote>
<p><br />
缺省版本的ActionServlet会从配置文件web.xml中读取如下初始化参数：
<ol>
    <li>application<br />
    应用使用的资源包(resources&nbsp;bundle)的基类
    <li>factory<br />
    用于创建应用的MessageResources对象的MessageResourcesFactory的类名。缺省是org.apache.struts.util.PropertyMessageResourcesFactory。
    <li>config<br />
    Struts的配置文件，缺省是/WEB-INF/struts-config.xml。注意这儿是与应用Context关联的相对路径。
    <li>content<br />
    定义了缺省的内容类型和编码格式，它会被自动地被设置到每个response中，如果JSP/Servlet中没有明确的设置。缺省是text/html。
    <li>debug<br />
    调试信息的级别。默认为0，比当前级别高的调试信息会被log到日志文件中。
    <li>detail<br />
    与debug的作用类似，只是这个detail是initMapping()时专用的。调试信息会被打印到System.out，而不是日志文件。
    <li>formBean<br />
    ActionFormBean的实现类，缺省为org.apache.struts.action.ActionFormBean
    <li>forward<br />
    应用中使用的ActionForward类，缺省是org.apache.struts.action.ActionForward。
    <li>locale<br />
    指定了缺省使用的Locale对象。设为true，当得到一个session时，会自动在session中存储一个以Action.LOCALE_KEY标示的Locale对象，如果session中还没有与Action.LOCALE_KEY绑定的Locale对象。
    <li>mapping<br />
    应用中使用的ActionMapping类，缺省是org.apache.struts.action.ActionMapping。
    <li>multipartClass<br />
    文件上传使用的MutipartRequestHandler的实现类。缺省为org.apache.struts.upload.DiskMultipartRequestHandler
    <li>nocache<br />
    如果设为true，那么ActionServlet会自动在每个到客户端的响应中添加nocache的HTML头，这样客户端就不会对应用中的页面进行缓存。缺省为false
    <li>null<br />
    如果设置为true，那么应用在得到一个未定义的message资源时，会返回null，而不是返回一个错误信息。缺省是true。
    <li>maxFileSize<br />
    文件上传的大小上限，缺省为250M
    <li>bufferSize<br />
    文件上传时的缓冲区的大小，缺省为4M
    <li>tempDir<br />
    设置用于上传时的临时目录。工作目录会作为一个Servlet环境（Context）的属性提供。
    <li>validate<br />
    Are&nbsp;we&nbsp;using&nbsp;the&nbsp;new&nbsp;configuration&nbsp;file&nbsp;format?缺省为true。
    <li>validating<br />
    在解析配置XML文件是是否进行有效性的验证。缺省为true<br />
    </li>
</ol>
</blockquote>
<blockquote>
<p>ActionServlet中应用了命令设计模式:</p>
</blockquote>
<blockquote>
<p>一个Servlet在由容器生成时，首先会调用init()方法进行初始化，在接到一个HTTP请求时，调用相应的方法进行处理；比如GET请求调用doGet()方法，POST请求调用doPost()方法。所以首先看看ActionServlet的init()方法，你就会很清楚为什么ActionServlet可以完成这些功能了。<br />
</p>
</blockquote>
<ul>
    <ul>
        <li>在它的init()方法中，ActionServlet依次调用如下protected的方法完成初始化：<br />
        initActions()&nbsp;－&nbsp;大家可能还曾有这个疑问：Struts为什么可以找到一个请求URI对应的action类呢？答案就在这儿，ActionServlet有一个actions属性，类型为org.apache.struts.util.FastHashMap，用于存储以类的全名为key的已实例化的Action类。在init()时首先调用的就是initActions()方法，在这个方法中只是简单的清除map中的所有的名值对，<br />
        synchronized&nbsp;(actions)&nbsp;{&nbsp;<br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actions.setFast(false);&nbsp;<br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actions.clear();&nbsp;<br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actions.setFast(true);&nbsp;<br />
        }&nbsp;<br />
        首先把actions设为slow模式，这时对FastHashMap的访问是线程同步的，然后清除actions中的所有的已存在的名/值对，最后再把actions的模式设为fast。由于FastHashMap是struts在java.util.HashMap的基础上的一个扩展类，是为了适应多线程、并且对HashMap的访问大部分是只读的特殊环境的需要。大家知道java.util.HashMap是非线程安全的，所以HashMap一般适用于单线程环境下。org.apache.struts.FastHashMap就是继承于java.util.HashMap，在其中添加多线程的支持产生的。在fast模式下的工作方式是这样的：读取是非线程同步的；写入时首先克隆当前map，然后在这个克隆上做写入操做，完成后用这个修改后的克隆版本替换原来的map。那么在什么时候会把Actions类添加到这个map中呢？我们已经提到了struts是动态的生成Action类的实例的，在每次ActionServlet接收到一个GET或POST的HTTP请求时，会在这个map中查找对应的Action类的实例，如果不存在，那么就实例化一个，并放入map中。可见这个actions属性起到了对Action类实例的缓存的作用。
        <li>initInternal()&nbsp;－&nbsp;初始化ActionServlet内部使用的资源包MessageResources，使用MessageResources.getMessageResources(internalName)得到&nbsp;internalName为"org.apache.struts.action.ActionResources"对应的ActionResources.properties文件。这个资源包主要用于ActionServlet处理过程中的用到的提示信息，这儿不展开讨论。
        <li>initDebug()&nbsp;－&nbsp;从web.xml中读取本应用的debug级别参数getServletConfig().getInitParameter("debug")，然后赋给debug属性。
        <li>initApplication()－&nbsp;初始化应用资源包，并放置入ServletContext中。<br />
        String&nbsp;factory&nbsp;=getServletConfig().getInitParameter(&#8220;factory&#8221;);&nbsp;<br />
        String&nbsp;oldFacory&nbsp;=&nbsp;MessageResourcesFactory.getFactoryClass();&nbsp;<br />
        if&nbsp;(factory&nbsp;!=null)&nbsp;<br />
        &nbsp;&nbsp;&nbsp;&nbsp; MessageResourcesFactory.setFactoryClass(factory);&nbsp;<br />
        String&nbsp;value&nbsp;=&nbsp;getServletConfig().getInitParameter("application");&nbsp;<br />
        MessageResourcesFactory&nbsp;factoryObject&nbsp;=&nbsp;MessageResourcesFactory.createFactory();&nbsp;<br />
        application&nbsp;=&nbsp;factoryObject.createResources(value);&nbsp;<br />
        MessageResourcesFactory.setFactory(oldFactory);&nbsp;<br />
        getServletContext().setAttribute(Action.MESSAGES_KEY,&nbsp;application);&nbsp;<br />
        <font color="#ff0000"><strong>说明：文中引用的代码片断可能会省略了一些例外检查等非主线的内容，敬请注意。</strong></font></li>
    </ul>
</ul>
<blockquote>
<p>首先从配置文件中读取factory参数，如果这个参数不为空，那么就在MessageResourcesFactory中使用这个指定的Factory类；否则，使用默认的工厂类org.apche.struts.util.PropertyMessageResourceFactory。然后调用MessageResourcesFactory的静态createFactory()方法，生成一个具体的MessageResourceFactory对象（注意：MessageResourcesFactory是抽象类）。这样就可以调用这个具体的MessageResourceFactory的createResource()方法得到配置文件(web.xml)中定义的资源文件了。<br />
上面的application对象类型为MessageResources。在web.xml中在配置ActionServlet时可以指定一个特定的工厂类。不能直接MessageResourcesFactory的createResources()方法，因为这个方法是abstract的。创建factoryObject的过程如下：<br />
MessageResourceFactory&nbsp;factoryObject=&nbsp;<br />
MessageResourcesFactory.createFactory();&nbsp;<br />
application&nbsp;=&nbsp;factoryObject.createResources(value);&nbsp;<br />
&lt;li&gt;initMapping()&nbsp;－&nbsp;为应用初始化mapping信息ActionServlet有一个protected的属性：mapping，封装了一个ActionMapping的对象集合，以便于管理、查找ActionMapping。mappings是org.apache.struts.action.ActionMappings类的实例。主要有两个方法：addMapping(ActionMapping&nbsp;mapping)和findMapping(String&nbsp;path)。ActionMapping也是使用上面提到的org.apache.struts.util.FastHashMap类来存储所有的ActionMapping对象。<br />
mappings.setServlet(this);&nbsp;<br />
&#8230;&#8230;&nbsp;<br />
//&nbsp;Initialize&nbsp;the&nbsp;name&nbsp;of&nbsp;our&nbsp;ActionFormBean&nbsp;implementation&nbsp;class&nbsp;<br />
value&nbsp;=&nbsp;getServletConfig().getInitParameter("formBean");&nbsp;<br />
if&nbsp;(value&nbsp;!=&nbsp;null)&nbsp;<br />
formBeanClass&nbsp;=&nbsp;value;&nbsp;<br />
//&nbsp;Initialize&nbsp;the&nbsp;name&nbsp;of&nbsp;our&nbsp;ActionForward&nbsp;implementation&nbsp;class&nbsp;<br />
value&nbsp;=&nbsp;getServletConfig().getInitParameter("forward");&nbsp;<br />
if&nbsp;(value&nbsp;!=&nbsp;null)&nbsp;<br />
forwardClass&nbsp;=&nbsp;value;&nbsp;<br />
//&nbsp;Initialize&nbsp;the&nbsp;name&nbsp;of&nbsp;our&nbsp;ActionMapping&nbsp;implementation&nbsp;class&nbsp;<br />
value&nbsp;=&nbsp;getServletConfig().getInitParameter("mapping");&nbsp;<br />
if&nbsp;(value&nbsp;!=&nbsp;null)&nbsp;<br />
mappingClass&nbsp;=&nbsp;value;&nbsp;<br />
在initMapping()中，首先链接mappings对象到本servlet实例。其实这句话的作用很简单，在ActionMappings中会有一个ActionServlet类型的属性，这个属性就界定了这个ActionMappings对象所属的ActionServlet。Struts的实现比较灵活，其中的ActionFormBean、ActionForward、ActionMapping类你完全可以使用自己实现的子类，来定制Struts的工作方式。上面的代码就从配置文件（web.xml）中读取formBean、forward、mapping参数，这些参数就是你定制的ActionFormBean、ActionForward、ActionMapping类名。<br />
//&nbsp;Initialize&nbsp;the&nbsp;context-relative&nbsp;path&nbsp;to&nbsp;our&nbsp;configuration&nbsp;resources&nbsp;<br />
value&nbsp;=&nbsp;getServletConfig().getInitParameter("config");&nbsp;<br />
if&nbsp;(value&nbsp;!=&nbsp;null)&nbsp;<br />
config&nbsp;=&nbsp;value;&nbsp;<br />
//&nbsp;Acquire&nbsp;an&nbsp;input&nbsp;stream&nbsp;to&nbsp;our&nbsp;configuration&nbsp;resource&nbsp;<br />
InputStream&nbsp;input&nbsp;=&nbsp;getServletContext().getResourceAsStream(config);&nbsp;<br />
Digester&nbsp;digester&nbsp;=&nbsp;null;&nbsp;<br />
digester&nbsp;=&nbsp;initDigester(detail);&nbsp;<br />
try&nbsp;{&nbsp;<br />
formBeans.setFast(false);&nbsp;<br />
forwards.setFast(false);&nbsp;<br />
mappings.setFast(false);&nbsp;<br />
digester.parse(input);&nbsp;<br />
mappings.setFast(true);&nbsp;<br />
forwards.setFast(true);&nbsp;<br />
formBeans.setFast(true);&nbsp;<br />
}&nbsp;catch&nbsp;(SAXException&nbsp;e)&nbsp;{&nbsp;<br />
throw&nbsp;new&nbsp;ServletException&nbsp;<br />
(internal.getMessage("configParse",&nbsp;config),&nbsp;e);&nbsp;<br />
}&nbsp;finally&nbsp;{&nbsp;<br />
input.close();&nbsp;<br />
}&nbsp;<br />
从web.xml读取Struts的配置文件的位置。使用org.apache.struts.digester.Digester解析config参数标示的配置文件，通常为&#8220;/WEB-INF/struts-config.xml&#8221;，解析出所有的data-source、form-bean、action-mapping、forward。从上面的程序片断看到，Digester仅仅调用了一个parse()方法，那么，Digester是怎样把解析struts-config.xml文件并把解析的结果form-bean等信息存储到属性变量formBeans等中的呢？你可以注意到在调用digester.parse(InputStream)之前，首先调用了initDigester()方法：<br />
Digester&nbsp;digester&nbsp;=&nbsp;new&nbsp;Digester();&nbsp;<br />
digester.push(this);&nbsp;<br />
digester.addObjectCreate("struts-config/action-mappings/action",&nbsp;<br />
mappingClass,&nbsp;"className");&nbsp;<br />
digester.addSetProperties("struts-config/action-mappings/action");&nbsp;<br />
digester.addSetNext("struts-config/action-mappings/action",&nbsp;<br />
"addMapping",&nbsp;<br />
"org.apache.struts.action.ActionMapping");&nbsp;<br />
digester.addSetProperty&nbsp;<br />
("struts-config/action-mappings/action/set-property",&nbsp;<br />
"property",&nbsp;"value");&nbsp;<br />
在这个方法中首先生成一个Digester对象，然后设置解析的规则和回调，如果你对XML、SAX不是很熟，这儿不必纠缠太深。要注意的是addSetNext()方法，设置了每一个要解析元素的Set&nbsp;Next回调方法，而这个方法就是由digester解析器的父提供的。上面的片断中的&#8220;addMapping&#8221;就是ActionServlet本身定义的一个方法，将由Digester回调。Digester就是籍此把解析出的每一个FormBean、ActionForward、ActionMapping等存储到属性变量formBeans、forwards、mappings等中的。<br />
initUpload()&nbsp;－&nbsp;初始化有关Upload的一些参数，比如：bufferSize、tempDir。<br />
initDataSource()&nbsp;－取出在initMapping()中从配置文件中读取的每一个DataSource，设置LogWriter，如果为GenericDataSource的实例，则打开数据源。然后，把每个dataSource放入Context中。<br />
dataSource.setLogWriter(scw)；<br />
((GenericDataSource)dataSource).open();<br />
getServletContext().setAttribute(key,dataSource);<br />
initOther()&nbsp;－&nbsp;设置其它尚未初始化的的参数（content、locale、nocache），并发布formBeans、forwards、mappings到Context：<br />
getServletContext().setAttribute(Action.FORM_BEANS_KEY,&nbsp;formBeans);<br />
getServletContext().setAttribute(Action.FORWARDS_KEY,&nbsp;forwards);<br />
getServletContext().setAttribute(Action.MAPPINGS_KEY,&nbsp;mappings);<br />
initServlet()&nbsp;－&nbsp;初始化Controller&nbsp;Servlet的Servlet&nbsp;Mapping。这儿也使用了Digester工具，扫描web.xml所有的&lt;web-app/servlet-mapping&gt;，寻找servlet-name与当前Servlet相同的mapping，置入Context。代码如下；<br />
Digester&nbsp;digester&nbsp;=&nbsp;new&nbsp;Digester();&nbsp;<br />
digester.push(this);&nbsp;<br />
digester.setDebug(debug);&nbsp;<br />
digester.setValidating(validating);&nbsp;<br />
digester.addCallMethod(&#8220;web-appservlet-mapping&#8221;,&#8220;addServletMapping&#8221;,&nbsp;2);&nbsp;<br />
digester.addCallParm(&#8220;web-appservlet-mappingservlet-name&#8221;,&nbsp;0);&nbsp;<br />
digester.addCallParm(&#8220;web-appservlet-mappingurl-pattern&#8221;,&nbsp;1);&nbsp;<br />
InputStream&nbsp;is&nbsp;=&nbsp;getServletContext().getResourceAsStream(&#8220;/WEB-INFweb.xml&#8221;);&nbsp;<br />
digester.parse(is);&nbsp;<br />
getServletContext().setAttribute(Action.SERVLET_KEY,servletMapping);</p>
</blockquote>
<img src ="http://www.blogjava.net/sakrua/aggbug/159190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sakrua/" target="_blank">风の使者</a> 2007-11-08 22:50 <a href="http://www.blogjava.net/sakrua/articles/159190.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 中配置到多个xml文件中</title><link>http://www.blogjava.net/sakrua/articles/159185.html</link><dc:creator>风の使者</dc:creator><author>风の使者</author><pubDate>Thu, 08 Nov 2007 14:47:00 GMT</pubDate><guid>http://www.blogjava.net/sakrua/articles/159185.html</guid><wfw:comment>http://www.blogjava.net/sakrua/comments/159185.html</wfw:comment><comments>http://www.blogjava.net/sakrua/articles/159185.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sakrua/comments/commentRss/159185.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sakrua/services/trackbacks/159185.html</trackback:ping><description><![CDATA[<blockquote>
<p>通常当我们的项目比较大，一个小的部分就会的struts配置文件的内容就会上百行，跟任何东西一样，一但多了，管理就会变得困难。因此在大型的项目中把配置文件分开更有利于管理和多人开发，下面我来讲讲在struts中是怎样实现的。
<p>通常有两个方法：
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一是像这样：
<p>&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xml , /WEB-INF/struts-config-dao.xml&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;
<p>不过这样有一个不好的地方，那就是两个配置文件都是全局的，因此在有相同路径的Action就会产生冲突</p>
</blockquote>
<blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 二是像这样
<p>&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xml &lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;
<p>&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config/dao&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config-dao.xml &lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;
<p>这样就不会出现那些问题了</p>
</blockquote>
<img src ="http://www.blogjava.net/sakrua/aggbug/159185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sakrua/" target="_blank">风の使者</a> 2007-11-08 22:47 <a href="http://www.blogjava.net/sakrua/articles/159185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跟菜鸟学STRUTS(2)</title><link>http://www.blogjava.net/sakrua/articles/159183.html</link><dc:creator>风の使者</dc:creator><author>风の使者</author><pubDate>Thu, 08 Nov 2007 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/sakrua/articles/159183.html</guid><wfw:comment>http://www.blogjava.net/sakrua/comments/159183.html</wfw:comment><comments>http://www.blogjava.net/sakrua/articles/159183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sakrua/comments/commentRss/159183.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sakrua/services/trackbacks/159183.html</trackback:ping><description><![CDATA[<p>上次刚完成了一个struts 的例子，大家都看到了，那么在上－次中我们到底做了什么呢，我现在为大家说说
<p>先来看看我们的web.xml文件
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;web-app id="WebApp_ID" version="2.4" xmlns="<a href='http://java.sun.com/xml/ns/j2ee"' href_cetemp='http://java.sun.com/xml/ns/j2ee"'>http://java.sun.com/xml/ns/j2ee"</a> xmlns:xsi="<a href='http://www.w3.org/2001/XMLSchema-instance"' href_cetemp='http://www.w3.org/2001/XMLSchema-instance"'>http://www.w3.org/2001/XMLSchema-instance"</a> xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a> <a href='http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"' href_cetemp='http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"'>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</a>&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;display-name&gt;Struts_HelloWorld by sakrua&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- the struts config --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/servlet&gt;
<p>&nbsp;&nbsp;&nbsp; &lt;!-- Standard Action Servlet Mapping --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- end struts config --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file-list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.html&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.htm&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/welcome-file-list&gt;<br />
&lt;/web-app&gt;
<p>我们在文件中定义了一个 servlet&nbsp; 我们来看看这个类&#8220;org.apache.struts.action.ActionServlet&#8221; 这个是struts 的核心类
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqEiM8qMcHHjZsV0uGaZMMgsLUySp_j_AM1J82-Ry6veLjbtlssyiE_CwK4zsuXY1g4"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="137" alt="image" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqHvGh9sDKyk6Gra6U84umKIpfbYxuiV5XuQNRYezbjpDwDZXIs1_n4Jxlfo4f3xjcw" width="458" border="0" /></a>
<p>我们看到它也是从HttpServlet中继成来的，它为struts 完成如下的任务：
<ol>
    <li>为到来的请求找到URI
    <li>URI映射到ActionMapping
    <li>创建或找到相关的ActionMapping 实例
    <li>如果有ActionFrom创建它
    <li>创建Action实例
    <li>最后execute返回ActionForwar </li>
</ol>
<blockquote>
<p>&nbsp;&lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<br />
&nbsp;&lt;/init-param&gt;
<p>接着我们用下面的方法关连到我们的struts-config.xml中</p>
</blockquote>
<p>看看我们的重点内容struts-config.xml文件
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;!DOCTYPE struts-config PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href='http://struts.apache.org/dtds/struts-config_1_3.dtd"' href_cetemp='http://struts.apache.org/dtds/struts-config_1_3.dtd"'>http://struts.apache.org/dtds/struts-config_1_3.dtd"</a>&gt;
<p>&lt;struts-config&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form-beans&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-bean name="helloWorldForm" type="org.helloWorld.struts.form.HelloWorldForm"&gt;&lt;/form-bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form-beans&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/hello" name="helloWorldForm" type="org.helloWorld.struts.action.HelloWorldAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/helloworld/success.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="fail" path="/helloworld/fail.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;message-resources parameter="org.helloWorld.struts.resource.ApplicationResources"&gt;&lt;/message-resources&gt;<br />
&lt;/struts-config&gt;
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;!DOCTYPE struts-config PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href='http://struts.apache.org/dtds/struts-config_1_3.dtd"' href_cetemp='http://struts.apache.org/dtds/struts-config_1_3.dtd"'>http://struts.apache.org/dtds/struts-config_1_3.dtd"</a>&gt;
<p>上面是固定的，但我们可以看到我用的是1.3的dtd文件，也就是说我用的是struts的1.3x
<p>&nbsp;&nbsp;&nbsp; &lt;form-beans&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-bean name="helloWorldForm" type="org.helloWorld.struts.form.HelloWorldForm"&gt;&lt;/form-bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form-beans&gt;<br />
<p>定义一个form-beans,在from-beans中我们可以定义很多的form-bean
<p>还记得我们的actionFrom吧，这里就是它的定义，在工作是struts 会为我们创建它
<p>这样的定义在大多数我情况下已经足够了，但还是有很多的其它的内容的，这个我以后再说了
<blockquote>
<p>&lt;action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/hello" name="helloWorldForm" type="org.helloWorld.struts.action.HelloWorldAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/helloworld/success.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="fail" path="/helloworld/fail.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&lt;/action-mappings&gt;</p>
</blockquote>
<p>再下来就是定义一个action了，action都要从struts的类中继承，例如<strong>org.apache.struts.action.Action</strong>
<p>我们的例子中用的就是这个下面来说一下这个
<p>在action中我们完成业务中的工作，其有一个execute方法,我们要重写这个方法来完成我们想做的事情
<p>例如我们的例子中的
<blockquote>
<p>package org.helloWorld.struts.action;
<p>import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;
<p>import org.apache.struts.action.Action;<br />
import org.apache.struts.action.ActionForm;<br />
import org.apache.struts.action.ActionForward;<br />
import org.apache.struts.action.ActionMapping;<br />
import org.helloWorld.struts.form.HelloWorldForm;<br />
/**<br />
&nbsp;* struts helloworld 的action form<br />
&nbsp;* @author sakrua<br />
&nbsp;* email :winds8@gmail.com&nbsp; msn:wind_s8@hotmail.com<br />
&nbsp;* 2007年11月5日<br />
&nbsp;*/<br />
public class HelloWorldAction extends Action {
<p>&nbsp;&nbsp;&nbsp; private static final String FAIL ="fail";<br />
&nbsp;&nbsp;&nbsp; private static final String SUCCESS ="success";<br />
&nbsp;&nbsp;&nbsp; //action中所有的请求都会由这个函数处理<br />
&nbsp;&nbsp;&nbsp; public ActionForward execute(ActionMapping mapping, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request, HttpServletResponse response)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws Exception {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //从actionForm 中取数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HelloWorldForm helloWorldForm =(HelloWorldForm)form;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String userName = helloWorldForm.getUserName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String worldToSay = helloWorldForm.getWorldToSay();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果没有协作输入转到错误页面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(userName.equals("")||worldToSay.equals("")){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return mapping.findForward(FAIL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //转到成功页面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return mapping.findForward(SUCCESS);<br />
&nbsp;&nbsp;&nbsp; }
<p>}
<p>&nbsp;</p>
</blockquote>
<p>在&nbsp;&lt;action-mappings&gt;中我们可以定义很多的action
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/hello" name="helloWorldForm" type="org.helloWorld.struts.action.HelloWorldAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/helloworld/success.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="fail" path="/helloworld/fail.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;
<p><strong>请注意的事在Action中定义是name是指向某个ActionFrom的，type才是指向我们的Action类</strong>
<p>在Action元素内我们定义了两个
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/helloworld/success.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="fail" path="/helloworld/fail.jsp"&gt;&lt;/forward&gt;
<p>与代码一同看，我们很容易想到这是让我们转到不同的页面中的
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果没有协作输入转到错误页面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(userName.equals("")||worldToSay.equals("")){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return mapping.findForward(FAIL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //转到成功页面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return mapping.findForward(SUCCESS)；
<p>下面现看看我们的页面吧，与其它的普通的HTML不一样的是我们这里多了struts的标签，来我们看一下例子
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
<p><strong>&lt;%@ taglib uri="</strong><a href='http://struts.apache.org/tags-bean"' href_cetemp='http://struts.apache.org/tags-bean"'><strong>http://struts.apache.org/tags-bean"</strong></a><strong> prefix="bean" %&gt;<br />
&lt;%@ taglib uri="</strong><a href='http://struts.apache.org/tags-html"' href_cetemp='http://struts.apache.org/tags-html"'><strong>http://struts.apache.org/tags-html"</strong></a><strong> prefix="html" %&gt;</strong>
<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"' href_cetemp='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"'>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt;<br />
&lt;html xmlns="<a href='http://www.w3.org/1999/xhtml"' href_cetemp='http://www.w3.org/1999/xhtml"'>http://www.w3.org/1999/xhtml"</a>&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;<br />
&lt;title&gt;Welcome　you to use this demo&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;
<p><strong>&lt;html:form action="/hello"&gt;<br />
请输入你的用户名：&nbsp;&nbsp;&nbsp; <br />
&lt;html:text property="userName"&gt;&lt;/html:text&gt;&lt;br /&gt;<br />
请输入你想说的话：<br />
&lt;html:textarea property="worldToSay"&gt;&lt;/html:textarea&gt;&lt;br /&gt;<br />
&lt;html:submit value="submit"&gt;&lt;/html:submit&gt;<br />
&lt;/html:form&gt;</strong>
<p>&lt;/body&gt;<br />
&lt;/html&gt;
<p>这个是index.jsp文件的代码，
<p>我们先来讲讲标签
<p><strong>&lt;%@ taglib uri="</strong><a href='http://struts.apache.org/tags-bean"' href_cetemp='http://struts.apache.org/tags-bean"'><strong>http://struts.apache.org/tags-bean"</strong></a><strong> prefix="bean" %&gt;<br />
&lt;%@ taglib uri="</strong><a href='http://struts.apache.org/tags-html"' href_cetemp='http://struts.apache.org/tags-html"'><strong>http://struts.apache.org/tags-html"</strong></a><strong> prefix="html" %&gt;</strong>
<p>这两句让我们导入了struts 的标签
<p>这样我拉就可以像下面一样使用了
<p><strong>&lt;html:form action="/hello"&gt;<br />
请输入你的用户名：&nbsp;&nbsp;&nbsp; <br />
&lt;html:text property="userName"&gt;&lt;/html:text&gt;&lt;br /&gt;<br />
请输入你想说的话：<br />
&lt;html:textarea property="worldToSay"&gt;&lt;/html:textarea&gt;&lt;br /&gt;<br />
&lt;html:submit value="submit"&gt;&lt;/html:submit&gt;<br />
&lt;/html:form&gt;</strong>
<p>也许有些人已经看到了一个东东，那就是标签中的property都与我们的ActionForm中定义的是一样的，
<p>没错，只要这样，在数据提交的时候Struts就会为我们把数据填入Form中
<p>再看回到struts-conf.xml文件
<p>我们可以发现
<p>&lt;message-resources parameter="org.helloWorld.struts.resource.ApplicationResources"&gt;&lt;/message-resources&gt;<br />
<p>这句话，这句定义了Struts的资源文件在国际化中我们会经常用到,同时在fail.jsp中我们也用到了
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-bean"' href_cetemp='http://struts.apache.org/tags-bean"'>http://struts.apache.org/tags-bean"</a> prefix="bean" %&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-html"' href_cetemp='http://struts.apache.org/tags-html"'>http://struts.apache.org/tags-html"</a> prefix="html" %&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"' href_cetemp='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"'>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt;<br />
&lt;html xmlns="<a href='http://www.w3.org/1999/xhtml"' href_cetemp='http://www.w3.org/1999/xhtml"'>http://www.w3.org/1999/xhtml"</a>&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;<br />
&lt;title&gt;请输入完整的信息&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;bean:message key="helloWorld.userNameRequire"/&gt;&lt;br /&gt;<br />
&lt;bean:message key="helloWorld.worldToSayRequire"/&gt;&lt;br /&gt;<br />
&lt;a href="index.jsp" &gt;转到转入页面&lt;/a&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
<p>&lt;bean:message key="helloWorld.userNameRequire"/&gt;&lt;br /&gt;<br />
&lt;bean:message key="helloWorld.worldToSayRequire"/&gt;&lt;br /&gt;
<p>下面为properties.文件的内容
<blockquote>
<p>helloWorld.userNameRequire=请填写用户名<br />
helloWorld.worldToSayRequire=请填写你想说的话</p>
</blockquote>
<p>key 与其是对应的
<p>到这里，我们大约看到了struts的一小部分的内容了，在后面我们会继续讲<br />
<br />
例子下载<br />
http://winds8.googlepages.com/Struts_HelloWorld.war<br />
http://winds8.googlepages.com/servlet_Test_project.war</p>
<img src ="http://www.blogjava.net/sakrua/aggbug/159183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sakrua/" target="_blank">风の使者</a> 2007-11-08 22:43 <a href="http://www.blogjava.net/sakrua/articles/159183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跟菜鸟学STRUTS（1）</title><link>http://www.blogjava.net/sakrua/articles/159181.html</link><dc:creator>风の使者</dc:creator><author>风の使者</author><pubDate>Thu, 08 Nov 2007 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/sakrua/articles/159181.html</guid><wfw:comment>http://www.blogjava.net/sakrua/comments/159181.html</wfw:comment><comments>http://www.blogjava.net/sakrua/articles/159181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sakrua/comments/commentRss/159181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sakrua/services/trackbacks/159181.html</trackback:ping><description><![CDATA[<p>Struts 的MVC
<p><a>1</a>．Model 1 和Model 2简介
<p>我们在开发Web应用时经常提到的一个概念是Model 1/Model 2，那么到底它是什么意思呢？其实它是对采用JSP技术构成Web应用的不同模型的描述。下面对这个概念做一个简单的介绍。
<p>Model 1
<p>在使用JAVA技术建立Web应用的实例中，由于JSP技术的发展，很快这种便于掌握和可实现快速开发的技术就成了创建Web应用的主要技术。JSP页面中可以非常容易地结合业务逻辑(jsp:useBean)、服务端处理过程（jsp:scriplet）和HTML(&lt;html&gt;)，在JSP页面中同时实现显示，业务逻辑和流程控制，从而可以快速地完成应用开发。现在很多的Web应用就是由一组JSP页面构成的。这种以JSP为中心的开发模型我们可以称之为Model 1。
<p>当然这种开发模式在进行快速和小规模的应用开发时，是有非常大的优势，但是从工程化的角度考虑，它也有一些不足之处：
<p>1. 应用的实现一般是基于过程的,一组JSP页面实现一个业务流程，如果要进行改动，必须在多个地方进行修改。这样非常不利于应用扩展和更新。
<p>2. 由于应用不是建立在模块上的, 业务逻辑和表示逻辑混合在JSP页面中没有进行抽象和分离。所以非常不利于应用系统业务的重用和改动。
<p>考虑到这些问题在开发大型的Web应用时必须采用不同的设计模式――这就是Model2
<p>Model 2
<p>Model 2 表示的是基于MVC模式的框架。MVC是Model－View－Controller的简写。"Model" 代表的是应用的业务逻辑（通过JavaBean，EJB组件实现）， "View" 是应用的表示面（由JSP页面产生），"Controller" 是提供应用的处理过程控制（一般是一个Servlet），通过这种设计模型把应用逻辑，处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。从而弥补了Model 1的不足。
<p>Model 2具有组件化的优点从而更易于实现对大规模系统的开发和管理，但是开发MVC系统比简单的JSP开发要复杂许多，它需要更多的时间学习和掌握。
<p>1. 必须基于MVC组件的方式重新思考和设计应用结构。原来通过建立一个简单的JSP页面就能实现的应用现在变成了多个步骤的设计和实现过程。
<p>2. 所有的页面和组件必须在MVC框架中实现，所以必须进行附加地开发工作。
<p>在开始讲struts 前,我们先了解一下servlet 为什么要看servlet 看到最后就知道了
<p>1、 环境的搭建就pass了
<p>2、 open eclipse and follow me
<p>create new project
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqFGrxwvykVOKzbU1Gn1_9phr7gX5iZXnDXRxsRhEpqBG3KtM_5vnSAOCjbVQqC3TZA"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="238" alt="clip_image002[5]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqFc5lwJYcfsxZ6WbSsJMlJVOAC7MduK51CpF098q_33PDs_NVHD1OrqKLZgwbnnJ_Q" width="388" border="0" /></a>
<p>新建一个Dynamic Web Project named servlet_Test_project
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqG11eTV-SLRR8RWR2hFp8utCiLMaILn8fGjXJUHUqWj90IawyUFV5NH1NPghsyoDaw"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="316" alt="clip_image0045" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqEKkVrCs5KZMz9jBNmsC4oGVV2hE6QSIOlBcJpkEDr8sTc5BGAlFRQF9JHF4T7tBvg" width="444" border="0" /></a>
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqE-0hxybL7pxg-9xQVf13UJfqB9GZttxMZRLd63dNk81AntVigLeZy5In1f8246cr0"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="316" alt="clip_image0065" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqHUVtuzKnDzhO2cBVbkudGjY4ZIH-qC_leXMjZkdHFgcCChPZ3GavZjVEcx_ohuwT8" width="460" border="0" /></a>
<p>我用的是jdk1.6
<p>接着next &#8230;.next完成
<p>转到PackageExplor 我们看一下project 的目录结构
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqHFUUDIrTpryoxmuv3b5_cg437owLD4RgVg08dBIhu5FJpy9IiQntX37dkHKLho3To"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="348" alt="clip_image008[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqFwmk5NRj2mnmH03sacS0k_yNbob566RH7t1l0Ab1iXUMzzwQXi40MuAeT_4LS_Xzo" width="358" border="0" /></a>
<p>两个jar的环境
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqFXm-mPdb21r0lbDt3EExBysFoFJt_rlDRMYqV-2EANnIJJStvJUqHVmfxp8B5Vo2Q"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="39" alt="clip_image010[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqFHTmZHggvk4vpPjbriBXYU8tJUZkB--yBTgBpDx7Gwd9mvv25kSAWP0UAGRZDiKL0" width="285" border="0" /></a>
<p>源文件目录
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqF3lAsJ7y2zChRC3RUcxwV7lpa8mfK4jn9ExefelIf-_pT8MKL34R3z0IWnvbscbps"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="17" alt="clip_image012[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqEcnIFtuHKK-7o_uS_At1dc9bkGuh46rhV-hL-noJ2H478MGWYe2mhexQma7WhL4qU" width="349" border="0" /></a>
<p>输出目录，也就是class的目录了（不多说了，不知道class是什么，学j2se吧）
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqEMHsSOYwXolhxuF32MlK6ZR8LBHQc8z9CvQNvXmo1R1bgiv1bBwMm_Zie92mtL_Og"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="clip_image014[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqGqHg7aKltFHmMma02dJLszsPFf1uIbaR3VHr7-_Kfr9NvOaeeKfSaVvAKA1du9PqU" width="373" border="0" /></a>
<p>Web目录
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqE9ZVDBQxz_vp8DWDlIzpQF0PREwH68onUmvhfqIKkDq1kKYisd9rzymPVXIKUXG_w"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="108" alt="clip_image016[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqHr0G0tVTfot6M5zclpTxaJ8UpvX7VI7et8RDei7VUECLYAbYzPQ6lycXCGJAxcb1k" width="351" border="0" /></a>
<p>其中jsp等文件放在WebContent目录内（下面两个Web-INF、META-INF除外）
<p>Lib目录为我们工程中用到的jar包的目录
<p>下面为Projct explor下看到的目录结构，我们可以看看他的不同
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqFy2fYe0MinRJYsR2V73rOeUdCQk2O9ov5NjzIHoEjQ6Li9uavZUO7t7mMDMtyLc2Q"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="348" alt="clip_image018[7]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqEHFYe5d5UbGQp4hvp8Li4dQ4wIWqKpYhnrtQBwog7JwWqG6mPzi_gMdgH5OnL6OLk" width="270" border="0" /></a>
<p>好，少来费话，新建一个servlet 先
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqFIXvPhcg3Vj8H3vz1P2icLm85ptS97CNB6J_PNmHxPymI-pmG4ncr14ib7wjkouxE"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="348" alt="clip_image020[7]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqGQYHCLu79_bS0rH1fMDBjBzzgkat2TCuyrfIxSdH7k7hdzOWg7ZexMeenpmTWIWZs" width="387" border="0" /></a>
<p>下面看图
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqFfTSguJ0UHSyavqI7u7UQq1DcnLqZS--oAs5o220gjjujRpSVS4DMsVh9gz5oL5AA"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="348" alt="clip_image022[5]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqHtDCu_E8B_Spp4UaHeMhpuH5SWsU6FKFOGgBkIwdFInFRja4Hezot0EfrP8rgis8Q" width="384" border="0" /></a>
<p>包名为sakrua ，lass名为ServletHelloWorld，Superclass 为javax.servlet.http.HttpServlet
<p>只有javax.servlet.http.HttpServlet这个父类吧，到下面再说
<p>接着 你可以点完成，我们next看看有什么
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqHfTrFZSU2zDi8sjvl2n2bMj9LyE3mwMCIU5Vhgl5fNqjZHZRPp0sUI895ScKT-6VA"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="316" alt="clip_image0244" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqEo5NYWoB_GpbdREnxlBnBTaIMMptRQ5LvOAfUDzIHVoeOMEd2VhLs2olmkgrzfy8M" width="381" border="0" /></a>
<p>呵呵 ，好像没有什么，我们点完成（是finish 不要告诉我找不到完成，<a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqHMt7Aci6gASshgX6fl7tKJ5Um-toI5pXXZ95f5lG_JjMjcy-ILM71aVsGbTAe8MXY"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="21" alt="clip_image026[6]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqE1guySF3a0u5HkCBccKaYuPfERUbiFrNW3nosHUdVxF1FRiCaBYp4gggVzV7MLto8" width="23" border="0" /></a>）
<p>好，eclipse 为我们已经完成了大部分的代码了，不过我们先不看代码先（习惯先在后了）
<p>我们再看看 Projct explor 有什么不同，不要让我说了，自己能看到的<a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqGmjwSvuXWtJHf64bS9G4VeCK0V-LJIts1d3CyyiZNoQANQ9EN0XxccsRnGiiBlIcU"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="21" alt="clip_image026[7]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqGIaPSXChsci8suDiVP5VsKZ5yI9Mi67PGervn_Ed5ZAumlLc9qV9mfCkrR8twnkmk" width="23" border="0" /></a>
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqG-aIZH30KclY7MXL3HLTKTpwhS95n3BbO2OWUaVRmmhOhENxbBQhZIb2J5vuugLX8"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="clip_image028[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqH0yMIpAQfzJECaA7YPEvxMUsegHHZjZrtYwKBpK6KCeywOjgk4sl62SSonDRRpSTI" width="368" border="0" /></a>
<p>其实这是web.xml文件中的内容，我们去 see see
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;web-app id="WebApp_ID" version="2.4" xmlns="<a href='http://java.sun.com/xml/ns/j2ee"' href_cetemp='http://java.sun.com/xml/ns/j2ee"'>http://java.sun.com/xml/ns/j2ee"</a> xmlns:xsi="<a href='http://www.w3.org/2001/XMLSchema-instance"' href_cetemp='http://www.w3.org/2001/XMLSchema-instance"'>http://www.w3.org/2001/XMLSchema-instance"</a> xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a> <a href='http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"' href_cetemp='http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"'>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</a>&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;display-name&gt;servlet_Test_project&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!--servlet 的--&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;sakrua 的第一个servlet&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;display-name&gt;ServletHelloWorld&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- servlet的名字 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;ServletHelloWorld&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- servlet 类 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;sakrua.ServletHelloWorld&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 跟上面对应的 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;ServletHelloWorld&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- ie中输入的访问路径 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/ServletHelloWorld&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- servlet 的 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- 其它的先不理 --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file-list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.html&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.htm&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/welcome-file-list&gt;<br />
&lt;/web-app&gt;
<p>应该中国人都看得明
<p>下面我们去看看Servlet 的代码
<p>package sakrua;
<p>import java.io.IOException;<br />
import java.io.PrintWriter;
<p>import javax.servlet.ServletException;<br />
import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;
<p>&nbsp;public class ServletHelloWorld extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {<br />
&nbsp;&nbsp; static final long serialVersionUID = 1L;<br />
&nbsp;&nbsp;&nbsp; public ServletHelloWorld() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super();<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
}
<p>好我们加点东西上去看看
<p>package sakrua;
<p>import java.io.IOException;<br />
import java.io.PrintWriter;
<p>import javax.servlet.ServletException;<br />
import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;
<p>&nbsp;public class ServletHelloWorld extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {<br />
&nbsp;&nbsp; static final long serialVersionUID = 1L;<br />
&nbsp;&nbsp;&nbsp; public ServletHelloWorld() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super();<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br />
<blockquote>
<p>PrintWriter out = response.getWriter(); <br />
out.println("&lt;html&gt;&lt;head&gt;&lt;title&gt;servlet Example by sakrua &lt;/title&gt;&lt;/head&gt;&lt;body&gt;"); <br />
out.println("&lt;h3&gt;&lt;font color=red&gt;servlet is here&lt;/font&gt;&lt;/h3&gt;"); <br />
out.println("&lt;/body&gt;&lt;/html&gt;");</p>
</blockquote>
<p><br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void destroy() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("It is destroy");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.destroy();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void init() throws ServletException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("It is started");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.init();<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
}
<p>右键选择
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqG8FV2aud0U9DAZVUFLaeUqI9P6FcEO2NYtq16kph4NI7PerjCWha0bGAUhnb68nqA"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="114" alt="clip_image030[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqGcBdRPPNwkHlDRKrfwvuIfxnyY9uqPMg9yz0rX1oVPvBUBO7jNt710RZmaSAqJf8k" width="388" border="0" /></a>
<p>在ie看到
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqE05yjtJdYfk6XjrJukJcT2o0aGEBsFibzkTkm2mVdHiELS_-LuRyOBFrhWi-BtM9o"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="225" alt="clip_image032[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqG689QiuD9CXPlC5MEvyn6ry1T-IYu8q-WuLpO6n7ERi70AEGuKl6C6gucKuCsYg00" width="382" border="0" /></a>
<p>Ok !
<p>下面我们具体说一下
<p>Servlet是一个接口，位于 javax.servlet.Servlet，它规定了每个Servlet所必须实现的方法。实际应用时我们需要从 javax.servlet.GenericServlet 和 javax.servlet.http.HttpServlet 两个抽象类继承出自己的Servlet类，并实现所需的功能。这几个类的关系如下（绿色斜体字为抽象类）：
<p><a href="http:///"><img height="292" alt="clip_image034[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqHjae8ACi7tU2bsx2MssYQoAs1uD3JoTuxJRD4brbYtmNy8Y5J58DWPvIFJI_N0KyA" width="388" /></a>
<p>上图中，Servlet依赖于ServletRequest和ServletResponse接口，这两个接口负责为Servlet接受和发送信息。 HttpServlet也类似。
<p><strong>Servlet</strong><strong>接口</strong>
<p>javax.servlet.Servlet接口包含以下的方法：
<p>init()
<p><strong>void init(ServletConfig config) throws ServletException</strong>
<p>init方法用于初始化，在Servlet启动时调用。
<p>service()
<p><strong>void service(ServletRequest req, ServiceResponse res) throws ServletException, IOException</strong>
<p>Servlet通过这个方法，从req获得客户端请求，处理并生成结果，再通过res发送给客户端。
<p>destroy()
<p><strong>void destroy()</strong>
<p>Servlet销毁时执行的方法。
<p>getServletInfo()
<p><strong>String getServletInfo()</strong>
<p>将Servlet的信息通过字符串返回。
<p>getServletConfig()
<p><strong>ServletConfig getServletConfig()</strong>
<p>获取包含Servlet各种信息的ServletConfig对象。
<p>当某个Servlet第一次被请求时，服务器（Servlet容器）会生成该Servlet并调用它的init()方法，再调用其service()方法处理请求。处理结束后该Servlet会常驻于容器中，下一个请求则不再重新生成Servlet，而是直接调用常驻的Servlet对象的service()方法。服务器停止时，会调用该Servlet的destroy()方法。
<p>因此，在Servlet的一个生命周期中，init()和destroy()仅会被调用一次，而service()则会被调用多次。
<p>―――
<p>好我们又看看这样
<p>package sakrua;
<p>import java.io.IOException;<br />
import java.io.PrintWriter;
<p>import javax.servlet.ServletException;<br />
import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;
<p>&nbsp;public class ServletHelloWorld extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {<br />
&nbsp;&nbsp; static final long serialVersionUID = 1L;<br />
&nbsp;&nbsp;&nbsp; public ServletHelloWorld() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super();<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintWriter out = response.getWriter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;html&gt;&lt;head&gt;&lt;title&gt;servlet Example by sakrua &lt;/title&gt;&lt;/head&gt;&lt;body&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;h3&gt;&lt;font color=red&gt;这就是Servlet 呵呵！&lt;/font&gt;&lt;/h3&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;/body&gt;&lt;/html&gt;");<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void destroy() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("It is destroy");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.destroy();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void init() throws ServletException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("It is started");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.init();<br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
}
<p>看看控制台，所有都ok（close 后才会看到 Is is Destroy）
<p>再看看ie，乱码了！晕
<p>―――
<p><strong>GenericServlet</strong><strong>抽象类</strong>
<p>javax.servlet.GenericServlet为我们实现了Servlet接口的大部分方法，除了service()方法之外。因此，我们在制作自己的Servlet时，只需要继承GenericServlet并重载service()方法即可。
<p><strong>HttpServlet</strong><strong>类</strong><strong></strong>
<p>HttpServlet继承了GenericServlet，不过它也是一个抽象类，不能直接使用，只能继承它。
<p>HttpServlet中常用的方法有两个：
<p>doGet
<p>void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
<p>当浏览器用GET方式访问时，该方法被调用。
<p>doPost
<p>void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
<p>当浏览器用POST方式访问时，该方法被调用。
<p>这两个函数内部的处理方法基本上与上一节介绍的GenericServlet.service()函数相同。
<p>另外其他的HTTP请求也都有相应的方法：
<p>HTTP请求类别
<p>HttpServlet的方法
<p>GET
<p>doGet()
<p>POST
<p>doPost()
<p>HEAD
<p>doHead()
<p>PUT
<p>doPut()
<p>DELETE
<p>doDelete()
<p><strong>HttpServletRequest</strong>
<p>doGet()和doPost()函数的两个参数为 HttpServletRequest和HttpServletResponse对象。
<p>HttpServletRequest接口表示浏览器请求，你可以通过这个类获取浏览器发送到服务器的任何信息。
<p>getParameter
<p>String getParameter(String name)
<p>获取指定变量名name所对应的参数值。该方法实际上为父接口 javax.servlet.ServletRequest的方法。如果是GET请求则获取查询字符串后的参数，POST请求则获取&lt;form&gt;表单中的参数。类似于PHP的$_GET和$_POST数组。
<p>getParameterValues
<p>String[] getParameterValues(String name)
<p>这个方法与getParameter()类似。当你要获取&lt;input type="check"&gt;这类会返回多个值的表单属性时，就应当用这个方法。
<p>getMethod
<p>String getMethod()
<p>返回字符串"GET"或"POST"。
<p>getRequestURI
<p>String getRequestURI()
<p>获取请求的URI（不包括查询字符串）。相当于PHP的$_SERVER['REQUEST_URI']。
<p>getServletPath
<p>String getServletPath()
<p>获取Servlet的路径。相当于PHP的$_SERVER['PHP_SELF']。
<p>getPathInfo
<p>String getPathInfo()
<p>获取PathInfo。相当于PHP的$_SERVER['PATH_INFO']。
<p>setCharacterEncoding
<p>void setCharacterEncoding(String new)
<p>设置请求的编码。需要处理汉字时务必要通过该方法设置正确的字符编码，否则将无法正确读取浏览器发过来的文字。
<p>还有好多有用的方法大家可以自己去参考接口文档。
<p><strong>HttpServletResponse</strong>
<p>HttpServletResponse接口则用于控制服务器发送给客户端的内容，相当于PHP的echo、header等函数。
<p>setContentType
<p>void setContentType(String type)
<p>设置返回值的类型。通常的HTML内容可设置为"text/html; charset=UTF-8"等，而动态生成的图片则可以设置为"image/gif"等。输出汉字之前，务必要通过该方法指定输出的字符编码。相当于在PHP中写 header("Content-Type: image/gif")。
<p>ServletOutputStream
<p>ServletOutputStream getOutputStream() throws IOException
<p>向客户端发送二进制数据时，需要通过此方法获取输出流。
<p>getWriter
<p>PrintWriter getWriter() throws IOException
<p>向客户端发送文本数据时，需要通过此方法获取输出流。
<p>看到这里应该知道为什么乱码了吧
<p>加上这两句
<p>response.setCharacterEncoding("GBK");
<p>response.setContentType("text/html; charset=GBK");
<p>几乎所有的Web开发语言都支持Session功能，Servlet也不例外。 Servlet/JSP中的Session功能是通过<strong>作用域</strong><strong>(scope)</strong>这个概念来实现的。
<p>作用域分为四种，分别为：
<p>page
<p>在当前页面有效(仅用于JSP中)
<p>request
<p>在当前请求中有效
<p>session
<p>在当前会话中有效
<p>application
<p>在所有应用程序中有效
<p>好，servlet 讲完了，为什么要讲这个呢，我们在以后才会体会到
<p>会到Struts 中，现在，struts 有两个版本 struts 1.x 和struts 2.x , 2 .x 是webwork 的化身,我们现在讲的是1.x .现在来一个struts 的hello world
<p>新建一个同样的工程(如果用myeclipse 有点不一样)
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqFeb8XeJ4TMXnPTkLcDNbm3b0MM9E9i71JRmt-Cb6ZnxhNXlM9q8looEXppub4f6_8"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="clip_image036[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqHD5gkMRKHTX5-uHgYrLPhdiIXzEWmDuahkbc3s1VOL8Ca2LGB7MLS0gPwy-Cw2zI8" width="311" border="0" /></a>
<p>把struts 的这些包copy到lib目录中
<p>下面是step by step
<p>1、修改web.xml文件
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;web-app id="WebApp_ID" version="2.4" xmlns="<a href='http://java.sun.com/xml/ns/j2ee"' href_cetemp='http://java.sun.com/xml/ns/j2ee"'>http://java.sun.com/xml/ns/j2ee"</a> xmlns:xsi="<a href='http://www.w3.org/2001/XMLSchema-instance"' href_cetemp='http://www.w3.org/2001/XMLSchema-instance"'>http://www.w3.org/2001/XMLSchema-instance"</a> xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a> <a href='http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"' href_cetemp='http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"'>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</a>&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;display-name&gt;Struts_HelloWorld by sakrua&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- the struts config --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/servlet&gt;
<p>&nbsp;&nbsp;&nbsp; &lt;!-- Standard Action Servlet Mapping --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- end struts config --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file-list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.html&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.htm&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/welcome-file-list&gt;<br />
&lt;/web-app&gt;
<p>看不了没，跟servlet 是不是有点相似昵，以后我们会看到更加清楚（struts 的本质，你可以自己想想）
<p>看到这里我们要有一个struts-config.xml文件, Now 我们来写一个
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;!DOCTYPE struts-config PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href='http://struts.apache.org/dtds/struts-config_1_3.dtd"' href_cetemp='http://struts.apache.org/dtds/struts-config_1_3.dtd"'>http://struts.apache.org/dtds/struts-config_1_3.dtd"</a>&gt;
<p>&lt;struts-config&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form-beans&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-bean name="helloWorldForm" type="org.helloWorld.struts.form.HelloWorldForm"&gt;&lt;/form-bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form-beans&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action path="/hello" name="helloWorldForm" type="org.helloWorld.struts.action.HelloWorldAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/helloworld/success.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="fail" path="/helloworld/fail.jsp"&gt;&lt;/forward&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;message-resources parameter="org.helloWorld.struts.resource.ApplicationResources"&gt;&lt;/message-resources&gt;<br />
&lt;/struts-config&gt;
<p>好，我们来看看这个XML文件，我们发现有&lt;form-bean&gt;和&lt;action&gt;现在我们先不理what is this
<p>我们看到type中都有一个类，我们先来完成这个类
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqHjRHiOTsapUPFNCTX-g-sqReJjJjg57Ssn4QxiFKLlcy4ZFf7wq-8ScWlkxjovCAc"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="348" alt="clip_image038[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqGYMKUnz2TrXZ-8KbZ7JRGo3oGcyRoi70S5sDWE4a6NQsfYMKSoFLUtN9-LmxJ-EAs" width="313" border="0" /></a>
<p>从ActionForm 类中继成
<p>package org.helloWorld.struts.form;
<p>import javax.servlet.http.HttpServletRequest;
<p>import org.apache.struts.action.ActionErrors;<br />
import org.apache.struts.action.ActionForm;<br />
import org.apache.struts.action.ActionMapping;
<p>/**<br />
&nbsp;* struts helloworld 的action form<br />
&nbsp;* @author sakrua<br />
&nbsp;* email :winds8@gmail.com&nbsp; msn:wind_s8@hotmail.com<br />
&nbsp;* 2007年11月5日<br />
&nbsp;*/<br />
public class HelloWorldForm extends ActionForm {
<p>&nbsp;&nbsp;&nbsp; private static final long serialVersionUID = -3372095237053639793L;
<p>&nbsp;&nbsp;&nbsp; //一个javabean 从ActionForm继成<br />
&nbsp;&nbsp;&nbsp; //用户名<br />
&nbsp;&nbsp;&nbsp; private String userName;<br />
&nbsp;&nbsp;&nbsp; //想说的话<br />
&nbsp;&nbsp;&nbsp; private String worldToSay;<br />
/*<br />
&nbsp;&nbsp;&nbsp; //validate <br />
&nbsp;&nbsp;&nbsp; public ActionErrors validate(ActionMapping mapping,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionErrors errors = new ActionErrors();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //暂时我们不理这个，以后再说<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(userName.equals("")){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(worldToSay.equals("")){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return super.validate(mapping, request);<br />
&nbsp;&nbsp;&nbsp; }<br />
*/<br />
&nbsp;&nbsp;&nbsp; //下面为set get function<br />
&nbsp;&nbsp;&nbsp; public String getUserName() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return userName;<br />
&nbsp;&nbsp;&nbsp; }
<p>&nbsp;&nbsp;&nbsp; public void setUserName(String userName) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userName = userName;<br />
&nbsp;&nbsp;&nbsp; }
<p>&nbsp;&nbsp;&nbsp; public String getWorldToSay() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return worldToSay;<br />
&nbsp;&nbsp;&nbsp; }
<p>&nbsp;&nbsp;&nbsp; public void setWorldToSay(String worldToSay) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.worldToSay = worldToSay;<br />
&nbsp;&nbsp;&nbsp; }<br />
}
<p>下面是action
<p>package org.helloWorld.struts.action;
<p>import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;
<p>import org.apache.struts.action.Action;<br />
import org.apache.struts.action.ActionForm;<br />
import org.apache.struts.action.ActionForward;<br />
import org.apache.struts.action.ActionMapping;<br />
import org.helloWorld.struts.form.HelloWorldForm;<br />
/**<br />
&nbsp;* struts helloworld 的action form<br />
&nbsp;* @author sakrua<br />
&nbsp;* email :winds8@gmail.com&nbsp; msn:wind_s8@hotmail.com<br />
&nbsp;* 2007年11月5日<br />
&nbsp;*/<br />
public class HelloWorldAction extends Action {
<p>&nbsp;&nbsp;&nbsp; private static final String FAIL ="fail";<br />
&nbsp;&nbsp;&nbsp; private static final String SUCCESS ="success";<br />
&nbsp;&nbsp;&nbsp; //action中所有的请求都会由这个函数处理<br />
&nbsp;&nbsp;&nbsp; public ActionForward execute(ActionMapping mapping, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request, HttpServletResponse response)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws Exception {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //从actionForm 中取数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HelloWorldForm helloWorldForm =(HelloWorldForm)form;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String userName = helloWorldForm.getUserName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String worldToSay = helloWorldForm.getWorldToSay();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果没有协作输入转到错误页面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(userName.equals("")||worldToSay.equals("")){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return mapping.findForward(FAIL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //转到成功页面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return mapping.findForward(SUCCESS);<br />
&nbsp;&nbsp;&nbsp; }
<p>}
<p>还有两个jsp
<p>Index.jsp
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
<p>&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-bean"' href_cetemp='http://struts.apache.org/tags-bean"'>http://struts.apache.org/tags-bean"</a> prefix="bean" %&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-html"' href_cetemp='http://struts.apache.org/tags-html"'>http://struts.apache.org/tags-html"</a> prefix="html" %&gt;
<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"' href_cetemp='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"'>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt;<br />
&lt;html xmlns="<a href='http://www.w3.org/1999/xhtml"' href_cetemp='http://www.w3.org/1999/xhtml"'>http://www.w3.org/1999/xhtml"</a>&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;<br />
&lt;title&gt;Welcome　you to use this demo&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;
<p>&lt;html:form action="/hello"&gt;<br />
请输入你的用户名：&nbsp;&nbsp;&nbsp; <br />
&lt;html:text property="userName"&gt;&lt;/html:text&gt;&lt;br /&gt;<br />
请输入你想说的话：<br />
&lt;html:textarea property="worldToSay"&gt;&lt;/html:textarea&gt;&lt;br /&gt;<br />
&lt;html:submit value="submit"&gt;&lt;/html:submit&gt;<br />
&lt;/html:form&gt;
<p>&lt;/body&gt;<br />
&lt;/html&gt;
<p>Fail.jsp
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-bean"' href_cetemp='http://struts.apache.org/tags-bean"'>http://struts.apache.org/tags-bean"</a> prefix="bean" %&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-html"' href_cetemp='http://struts.apache.org/tags-html"'>http://struts.apache.org/tags-html"</a> prefix="html" %&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"' href_cetemp='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"'>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt;<br />
&lt;html xmlns="<a href='http://www.w3.org/1999/xhtml"' href_cetemp='http://www.w3.org/1999/xhtml"'>http://www.w3.org/1999/xhtml"</a>&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;<br />
&lt;title&gt;请输入完整的信息&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;bean:message key="helloWorld.userNameRequire"/&gt;&lt;br /&gt;<br />
&lt;bean:message key="helloWorld.worldToSayRequire"/&gt;&lt;br /&gt;<br />
&lt;a href="index.jsp" &gt;转到转入页面&lt;/a&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
<p>Success.jsp
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-bean"' href_cetemp='http://struts.apache.org/tags-bean"'>http://struts.apache.org/tags-bean"</a> prefix="bean" %&gt;<br />
&lt;%@ taglib uri="<a href='http://struts.apache.org/tags-html"' href_cetemp='http://struts.apache.org/tags-html"'>http://struts.apache.org/tags-html"</a> prefix="html" %&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"' href_cetemp='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"'>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt;<br />
&lt;html xmlns="<a href='http://www.w3.org/1999/xhtml"' href_cetemp='http://www.w3.org/1999/xhtml"'>http://www.w3.org/1999/xhtml"</a>&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;<br />
&lt;title&gt;Welcome you &lt;bean:write name="helloWorldForm" property="userName" /&gt;&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;bean:write name="helloWorldForm" property="userName" /&gt; 你想对我们说的是&lt;bean:write name="helloWorldForm" property="worldToSay" /&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
<p>好写完了
<p>打开ie输入http://localhost:8080/Struts_HelloWorld/
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqEo3Wx1tXdqUKy8WvjQu37RTjT-nUFEtKXNw9sX2YiMZTrPWwQQQHsiRuFQ227DG8w"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="324" alt="clip_image040[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqEwE1Iwp3ca8uAUrOtzjMDFAoh9hCBNuvNRB_83Xj4fYpJ9pIB6BUUe4IR9AaXnXcY" width="369" border="0" /></a>
<p><a href="http://byfiles.storage.msn.com/y1pnnuPrErVqqE0YJNrOiAb4yW19wj1xPzhVilyt65i02AYT0rI9KPhZ2Sr4WdrKZlHvlKbaXrBg60"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="162" alt="clip_image042[4]" src="http://byfiles.storage.msn.com/y1pnnuPrErVqqFV3ARr9JlmXJQ5uXS8y4_53hsmfky025EDohttfD0h2JNx9NvghohA5RRu-N_cJOk" width="388" border="0" /></a>
<p>正常运行中
<p>在这个过程中我们做了什么呢，我们已经完成了我们的第一个struts 程序（废话）
<p>具体做了什么　
<p>To be continued</p>
 <img src ="http://www.blogjava.net/sakrua/aggbug/159181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sakrua/" target="_blank">风の使者</a> 2007-11-08 22:39 <a href="http://www.blogjava.net/sakrua/articles/159181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>