﻿<?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-写写，看看</title><link>http://www.blogjava.net/dont-bird-me/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 08:13:11 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 08:13:11 GMT</pubDate><ttl>60</ttl><item><title>ActionServlet(2)</title><link>http://www.blogjava.net/dont-bird-me/articles/struts.html</link><dc:creator>lala</dc:creator><author>lala</author><pubDate>Thu, 13 Dec 2007 16:44:00 GMT</pubDate><guid>http://www.blogjava.net/dont-bird-me/articles/struts.html</guid><wfw:comment>http://www.blogjava.net/dont-bird-me/comments/167631.html</wfw:comment><comments>http://www.blogjava.net/dont-bird-me/articles/struts.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dont-bird-me/comments/commentRss/167631.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dont-bird-me/services/trackbacks/167631.html</trackback:ping><description><![CDATA[<p>本文按照1.构造函数-&gt;2.init()-&gt;3.do*()-&gt;4.destroy()的顺序，解析ActionServlet的工作原理。<br />
init()的初始化工作分为个步骤进行：<br />
1.initInternal()资源文件的初始化<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;String&nbsp;internalName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">org.apache.struts.action.ActionResources</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_105_197_Open_Image" onclick="this.style.display='none'; Codehighlighter1_105_197_Open_Text.style.display='none'; Codehighlighter1_105_197_Closed_Image.style.display='inline'; Codehighlighter1_105_197_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_105_197_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_105_197_Closed_Text.style.display='none'; Codehighlighter1_105_197_Open_Image.style.display='inline'; Codehighlighter1_105_197_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;initInternal()</span><span id="Codehighlighter1_105_197_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_105_197_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />internal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MessageResources.getMessageResources(internalName);</span><span style="color: #008000">//</span><span style="color: #008000">初始化资源文件信息，通过工厂模式取得一个单例的资源</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #000000">}</span></span></div>
<p><br />
internalName与initInternal()都是protected所以可以被子类重载。修改struts默认的资源文件信息。<br />
2.initOther()根据web.xml的配置参数执行不同的初始化,1.设置struts配置文件路径2.convertNull<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_50_748_Open_Image" onclick="this.style.display='none'; Codehighlighter1_50_748_Open_Text.style.display='none'; Codehighlighter1_50_748_Closed_Image.style.display='inline'; Codehighlighter1_50_748_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_50_748_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_50_748_Closed_Text.style.display='none'; Codehighlighter1_50_748_Open_Image.style.display='inline'; Codehighlighter1_50_748_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;initOther()</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException&nbsp;</span><span id="Codehighlighter1_50_748_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_50_748_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getServletConfig().getInitParameter(</span><span style="color: #000000">"</span><span style="color: #000000">config</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_164_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_219_Open_Text.style.display='none'; Codehighlighter1_164_219_Closed_Image.style.display='inline'; Codehighlighter1_164_219_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_164_219_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_164_219_Closed_Text.style.display='none'; Codehighlighter1_164_219_Open_Image.style.display='inline'; Codehighlighter1_164_219_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(value&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_164_219_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_164_219_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">设置struts配置文件路径</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getServletConfig().getInitParameter(</span><span style="color: #000000">"</span><span style="color: #000000">convertNull</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">.equalsIgnoreCase(value)&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">yes</span><span style="color: #000000">"</span><span style="color: #000000">.equalsIgnoreCase(value)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">on</span><span style="color: #000000">"</span><span style="color: #000000">.equalsIgnoreCase(value)&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">y</span><span style="color: #000000">"</span><span style="color: #000000">.equalsIgnoreCase(value)<br />
<img id="Codehighlighter1_489_531_Open_Image" onclick="this.style.display='none'; Codehighlighter1_489_531_Open_Text.style.display='none'; Codehighlighter1_489_531_Closed_Image.style.display='inline'; Codehighlighter1_489_531_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_489_531_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_489_531_Closed_Text.style.display='none'; Codehighlighter1_489_531_Open_Image.style.display='inline'; Codehighlighter1_489_531_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">.equalsIgnoreCase(value))&nbsp;</span><span id="Codehighlighter1_489_531_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_489_531_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convertNull&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_558_742_Open_Image" onclick="this.style.display='none'; Codehighlighter1_558_742_Open_Text.style.display='none'; Codehighlighter1_558_742_Closed_Image.style.display='inline'; Codehighlighter1_558_742_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_558_742_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_558_742_Closed_Text.style.display='none'; Codehighlighter1_558_742_Open_Image.style.display='inline'; Codehighlighter1_558_742_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(convertNull)&nbsp;</span><span id="Codehighlighter1_558_742_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_558_742_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">如果convertNull为true\on\yes\y\1执行</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConvertUtils.deregister();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConvertUtils.register(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimalConverter(</span><span style="color: #0000ff">null</span><span style="color: #000000">),BigDecimal.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;&#8230;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p>&nbsp;&nbsp; <br />
3.initServlet()解析servletName,url-Pattern。官方struts的web.xml：servletName=action,urlPattern=/*.do<br />
</p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_52_1418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_52_1418_Open_Text.style.display='none'; Codehighlighter1_52_1418_Closed_Image.style.display='inline'; Codehighlighter1_52_1418_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_52_1418_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_52_1418_Closed_Text.style.display='none'; Codehighlighter1_52_1418_Open_Image.style.display='inline'; Codehighlighter1_52_1418_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;initServlet()</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException&nbsp;</span><span id="Codehighlighter1_52_1418_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_52_1418_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.servletName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getServletConfig().getServletName();</span><span style="color: #008000">//</span><span style="color: #008000">取得设置servletName</span><span style="color: #008000"><br />
<img id="Codehighlighter1_152_196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_152_196_Open_Text.style.display='none'; Codehighlighter1_152_196_Closed_Image.style.display='inline'; Codehighlighter1_152_196_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_152_196_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_152_196_Closed_Text.style.display='none'; Codehighlighter1_152_196_Open_Image.style.display='inline'; Codehighlighter1_152_196_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_152_196_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_152_196_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">digester主要是实现对xml的访问，许多功能强大的常用操作都已经封装了起来。</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Digester&nbsp;digester&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Digester();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digester.push(</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digester.setNamespaceAware(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digester.setValidating(</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_410_607_Open_Image" onclick="this.style.display='none'; Codehighlighter1_410_607_Open_Text.style.display='none'; Codehighlighter1_410_607_Closed_Image.style.display='inline'; Codehighlighter1_410_607_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_410_607_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_410_607_Closed_Text.style.display='none'; Codehighlighter1_410_607_Open_Image.style.display='inline'; Codehighlighter1_410_607_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;registrations.length;&nbsp;i&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_410_607_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_410_607_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getClass().getResource(registrations[i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">]);<br />
<img id="Codehighlighter1_514_597_Open_Image" onclick="this.style.display='none'; Codehighlighter1_514_597_Open_Text.style.display='none'; Codehighlighter1_514_597_Closed_Image.style.display='inline'; Codehighlighter1_514_597_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_514_597_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_514_597_Closed_Text.style.display='none'; Codehighlighter1_514_597_Open_Image.style.display='inline'; Codehighlighter1_514_597_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(url&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_514_597_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_514_597_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digester.register(registrations[i],&nbsp;url.toString());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_617_910_Open_Image" onclick="this.style.display='none'; Codehighlighter1_617_910_Open_Text.style.display='none'; Codehighlighter1_617_910_Closed_Image.style.display='inline'; Codehighlighter1_617_910_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_617_910_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_617_910_Closed_Text.style.display='none'; Codehighlighter1_617_910_Open_Image.style.display='inline'; Codehighlighter1_617_910_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_617_910_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_617_910_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">以下3句的意思是当遇到web-app/servlet-mapping时执行addServletMapping函数(下面有该函数的源码)，这个方法有两个参数，第一个是web-app/servlet-mapping/servlet-name标签里的，第二个是web-app/servlet-mapping/url-pattern标签里的.parse&nbsp;(input)开始解析。实际上这段陌生的代码只是执行了addServletMapping(servlet-name,url-pattern);servlet-name,url-pattern分别从/WEB-INF/web.xml中取得</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digester.addCallMethod(</span><span style="color: #000000">"</span><span style="color: #000000">web-app/servlet-mapping</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">addServletMapping</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digester.addCallParam(</span><span style="color: #000000">"</span><span style="color: #000000">web-app/servlet-mapping/servlet-name</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digester.addCallParam(</span><span style="color: #000000">"</span><span style="color: #000000">web-app/servlet-mapping/url-pattern</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;input&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getServletContext().getResourceAsStream(</span><span style="color: #000000">"</span><span style="color: #000000">/WEB-INF/web.xml</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digester.parse(input);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1319_1412_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1319_1412_Open_Text.style.display='none'; Codehighlighter1_1319_1412_Closed_Image.style.display='inline'; Codehighlighter1_1319_1412_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1319_1412_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1319_1412_Closed_Text.style.display='none'; Codehighlighter1_1319_1412_Open_Image.style.display='inline'; Codehighlighter1_1319_1412_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(servletMapping&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1319_1412_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1319_1412_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getServletContext().setAttribute(Globals.SERVLET_KEY,&nbsp;servletMapping);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_0_21_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_21_Open_Text.style.display='none'; Codehighlighter1_0_21_Closed_Image.style.display='inline'; Codehighlighter1_0_21_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_0_21_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_21_Closed_Text.style.display='none'; Codehighlighter1_0_21_Open_Image.style.display='inline'; Codehighlighter1_0_21_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span id="Codehighlighter1_0_21_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_21_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">在initServlet()中被调用</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_96_498_Open_Image" onclick="this.style.display='none'; Codehighlighter1_96_498_Open_Text.style.display='none'; Codehighlighter1_96_498_Closed_Image.style.display='inline'; Codehighlighter1_96_498_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_96_498_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_96_498_Closed_Text.style.display='none'; Codehighlighter1_96_498_Open_Image.style.display='inline'; Codehighlighter1_96_498_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;addServletMapping(String&nbsp;servletName,&nbsp;String&nbsp;urlPattern)&nbsp;</span><span id="Codehighlighter1_96_498_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_96_498_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_131_161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_131_161_Open_Text.style.display='none'; Codehighlighter1_131_161_Closed_Image.style.display='inline'; Codehighlighter1_131_161_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_131_161_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_131_161_Closed_Text.style.display='none'; Codehighlighter1_131_161_Open_Image.style.display='inline'; Codehighlighter1_131_161_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(servletName&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_131_161_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_131_161_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_171_213_Open_Image" onclick="this.style.display='none'; Codehighlighter1_171_213_Open_Text.style.display='none'; Codehighlighter1_171_213_Closed_Image.style.display='inline'; Codehighlighter1_171_213_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_171_213_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_171_213_Closed_Text.style.display='none'; Codehighlighter1_171_213_Open_Image.style.display='inline'; Codehighlighter1_171_213_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_171_213_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_171_213_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">一般而言servletName=action,urlPattern=/*.do</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_265_492_Open_Image" onclick="this.style.display='none'; Codehighlighter1_265_492_Open_Text.style.display='none'; Codehighlighter1_265_492_Closed_Image.style.display='inline'; Codehighlighter1_265_492_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_265_492_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_265_492_Closed_Text.style.display='none'; Codehighlighter1_265_492_Open_Image.style.display='inline'; Codehighlighter1_265_492_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(servletName.equals(</span><span style="color: #0000ff">this</span><span style="color: #000000">.servletName))&nbsp;</span><span id="Codehighlighter1_265_492_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_265_492_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_305_435_Open_Image" onclick="this.style.display='none'; Codehighlighter1_305_435_Open_Text.style.display='none'; Codehighlighter1_305_435_Closed_Image.style.display='inline'; Codehighlighter1_305_435_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_305_435_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_305_435_Closed_Text.style.display='none'; Codehighlighter1_305_435_Open_Image.style.display='inline'; Codehighlighter1_305_435_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(log.isDebugEnabled())&nbsp;</span><span id="Codehighlighter1_305_435_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_305_435_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.debug(</span><span style="color: #000000">"</span><span style="color: #000000">Process&nbsp;servletName=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;servletName<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;urlPattern=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;urlPattern);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.servletMapping&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;urlPattern;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>&nbsp;</p>
(初始化工作还未完成,待续) 
  <img src ="http://www.blogjava.net/dont-bird-me/aggbug/167631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dont-bird-me/" target="_blank">lala</a> 2007-12-14 00:44 <a href="http://www.blogjava.net/dont-bird-me/articles/struts.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ActionServlet(1)</title><link>http://www.blogjava.net/dont-bird-me/articles/ActionServlet1.html</link><dc:creator>lala</dc:creator><author>lala</author><pubDate>Wed, 12 Dec 2007 17:18:00 GMT</pubDate><guid>http://www.blogjava.net/dont-bird-me/articles/ActionServlet1.html</guid><wfw:comment>http://www.blogjava.net/dont-bird-me/comments/167365.html</wfw:comment><comments>http://www.blogjava.net/dont-bird-me/articles/ActionServlet1.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dont-bird-me/comments/commentRss/167365.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dont-bird-me/services/trackbacks/167365.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; ActionServlet是对应于原始java web开发中的servlet，是struts最核心的类。在实际的编程中，ActionServlet出现的次数很少，甚至不需要知道它便可以完成一个小型的项目，由此可见引入一个厉害框架将减低对技术的要求。<br />
&nbsp;&nbsp;&nbsp; 在项目开发中，ActionServlet的出现最少只需要1次，便是在web.xml中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">action</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">org.apache.struts.action.ActionServlet</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">action</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;*</span><span style="color: #000000">.</span><span style="color: #0000ff">do</span><span style="color: #000000">&lt;/</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span></div>
<br />
&nbsp;&nbsp;&nbsp; 不知道被复制了多少遍的一段代码，今天我终于狠下心要来揭开他的秘密！<br />
&nbsp;&nbsp;&nbsp; ActionServlet继承于HttpServlet，所以可以安全的放在web.xml的&lt;/servlet-clss&gt;标签里。在原始的java web开发中，HttpServlet的init()\destroy() \service() \do*()函数经常需要根据业务继承实现。同样的，在ActionServlet里，它继承实现了这几个方法，从这个意义上讲ActionServlet与原始web开发中的servlet没有任何的区别。<br />
&nbsp;&nbsp;&nbsp;&nbsp; ActionServlet就是一个HttpServlet的特殊实现，所以要真正了解ActionServlet流程必须知道HttpServlet的流程。<br />
&nbsp;&nbsp;&nbsp;&nbsp; HttpServlet的流程应该包括：1.构造函数-&gt;2.init()-&gt;3.do*()-&gt;4.destroy()。<br />
&nbsp;&nbsp;&nbsp;&nbsp; init()的执行时间有两种方式:1.Tomcat启动时2.在提交到该Servlet时 （可以通过&lt;load-on-startup&gt;进行设置）<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 同样的在ActionServlet中，也是由这几个函数来是实现web服务的，只是它所实现的并不是业务服务代码，而是控制代码。&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
 <img src ="http://www.blogjava.net/dont-bird-me/aggbug/167365.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dont-bird-me/" target="_blank">lala</a> 2007-12-13 01:18 <a href="http://www.blogjava.net/dont-bird-me/articles/ActionServlet1.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个Singleton的问题!!help!!</title><link>http://www.blogjava.net/dont-bird-me/articles/SingletonMemberField.html</link><dc:creator>lala</dc:creator><author>lala</author><pubDate>Fri, 07 Dec 2007 16:56:00 GMT</pubDate><guid>http://www.blogjava.net/dont-bird-me/articles/SingletonMemberField.html</guid><wfw:comment>http://www.blogjava.net/dont-bird-me/comments/166181.html</wfw:comment><comments>http://www.blogjava.net/dont-bird-me/articles/SingletonMemberField.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/dont-bird-me/comments/commentRss/166181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dont-bird-me/services/trackbacks/166181.html</trackback:ping><description><![CDATA[<span style="font-size: 8pt"><font size="3">&nbsp;&nbsp; </font>&nbsp;&nbsp;&nbsp; 最近在做一些代码安全性检查，使用了Fortify。发现了一些曾经引以为豪的代码既然会出现高危的错误。希望各位达人给予帮助。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设计初衷:共享WebApplicationContext,通过getBean(String beanName)取得对应的bean处理相应的业务逻辑。
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_39_457_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_457_Open_Text.style.display='none'; Codehighlighter1_39_457_Closed_Image.style.display='inline'; Codehighlighter1_39_457_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_39_457_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_39_457_Closed_Text.style.display='none'; Codehighlighter1_39_457_Open_Image.style.display='inline'; Codehighlighter1_39_457_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BaseAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Action&nbsp;</span><span id="Codehighlighter1_39_457_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_39_457_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;WebApplicationContext&nbsp;wac;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;ServletContext&nbsp;context;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_178_362_Open_Image" onclick="this.style.display='none'; Codehighlighter1_178_362_Open_Text.style.display='none'; Codehighlighter1_178_362_Closed_Image.style.display='inline'; Codehighlighter1_178_362_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_178_362_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_178_362_Closed_Text.style.display='none'; Codehighlighter1_178_362_Open_Image.style.display='inline'; Codehighlighter1_178_362_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setServlet(ActionServlet&nbsp;actionServlet)&nbsp;</span><span id="Codehighlighter1_178_362_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_178_362_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">.setServlet(actionServlet);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;actionServlet.getServletContext();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wac&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WebApplicationContextUtils.getRequiredWebApplicationContext(context);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_411_455_Open_Image" onclick="this.style.display='none'; Codehighlighter1_411_455_Open_Text.style.display='none'; Codehighlighter1_411_455_Closed_Image.style.display='inline'; Codehighlighter1_411_455_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_411_455_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_411_455_Closed_Text.style.display='none'; Codehighlighter1_411_455_Open_Image.style.display='inline'; Codehighlighter1_411_455_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Object&nbsp;getBean(String&nbsp;beanName)&nbsp;</span><span id="Codehighlighter1_411_455_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_411_455_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;wac.getBean(beanName);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 8pt">高危错误</span><span style="font-size: 8pt">代码：</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;actionServlet.getServletContext();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wac&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WebApplicationContextUtils.getRequiredWebApplicationContext(context);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<span style="font-size: 8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 错误原因分析：BaseAction继承自Action,单例实现。该类含有属性：wac与context，在多线程环境下不能保证这两个属性的合理逻辑。于是掉入了一个单例模式的陷阱。（请各位达人完善）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解决方法：jdon(banq)给我的回复&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<table style="width: 755px; height: 234px" cellspacing="2" cellpadding="2" width="755" border="1">
    <tbody>
        <tr>
            <td>&nbsp;<span style="font-size: 8pt">banq:<span class="tpc_content">写的方法是高危，但是看你的方法内容，则没有关系。<br />
            <br />
            你的方法内容是获得一个Web项目的一个单例，实际就是<a title="??" href="http://www.jdon.com/dl/best/spring.htm" target="_blank"><strong>Spring</strong></a>容器，而且大部分是读，而不是读写并加。<br />
            <br />
            单例陷阱我已经在以前帖子中说了，只有在单例+写+同步等操作下才可能死锁，因为代码不可控性，今天你注意没这么做，不代表其他无知的人不这么做，所以，这种singlton会被严谨的工具认为是高危，这是正确的。</span></span></td>
        </tr>
        <tr>
            <td>&nbsp;<span style="font-size: 8pt">ME:<span class="tpc_content">谢谢 banq!<br />
            如果需要消除这段高危代码,需要如何重构.<br />
            因为只是存在读操作,我是否可以把wac与context定义为static(这样工具不会报错)<br />
            <br />
            请问这样改会不会有问题? </span></span></td>
        </tr>
        <tr>
            <td>&nbsp;&nbsp;<span style="font-size: 8pt">banq:<span class="tpc_content">不能用static，这样<a title="??" href="http://www.jdon.com/dl/best/spring.htm" target="_blank"><strong>Spring</strong></a>容器中所有资源都不能随着你的WEB项目消失而消失。<br />
            <br />
            主要问题在于你的setServlet(ActionServlet actionServlet)这个方法，这其实是一个初始化工作，试验在BaseAction的构造方法中首先实现，这样表示有前有后，可能不会报高危错误。<br />
            <br />
            实在不行，做一个懒加载的方法，在这个方法中，检查一下wac是否为空，如果为，就进行初始化，不为空，就直接返回wac值。 </span></span></td>
        </tr>
        <tr>
            <td style="font-size: 8pt"><span style="font-size: 8pt">去除setServlet方法，在getBean加入，如下，如果还不行，就每次老老实实的用WebApplicationContextUtils获得<a title="??" href="http://www.jdon.com/dl/best/spring.htm" target="_blank"><strong>Spring</strong></a>实例：<br />
            <br />
            </span>
            <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_42_213_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_213_Open_Text.style.display='none'; Codehighlighter1_42_213_Closed_Image.style.display='inline'; Codehighlighter1_42_213_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_42_213_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_42_213_Closed_Text.style.display='none'; Codehighlighter1_42_213_Open_Image.style.display='inline'; Codehighlighter1_42_213_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Object&nbsp;getBean(String&nbsp;beanName)&nbsp;</span><span id="Codehighlighter1_42_213_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_42_213_Open_Text"><span style="color: #000000">{<br />
            <img id="Codehighlighter1_57_180_Open_Image" onclick="this.style.display='none'; Codehighlighter1_57_180_Open_Text.style.display='none'; Codehighlighter1_57_180_Closed_Image.style.display='inline'; Codehighlighter1_57_180_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_57_180_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_57_180_Closed_Text.style.display='none'; Codehighlighter1_57_180_Open_Image.style.display='inline'; Codehighlighter1_57_180_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #0000ff">if</span><span style="color: #000000">(wac</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_57_180_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_57_180_Open_Text"><span style="color: #000000">{<br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;actionServlet.getServletContext();<br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />wac&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WebApplicationContextUtils.getRequiredWebApplicationContext(context);<br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;wac.getBean(beanName);<br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
            <br />
            </td>
        </tr>
        <tr>
            <td></td>
        </tr>
    </tbody>
</table>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<img src ="http://www.blogjava.net/dont-bird-me/aggbug/166181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dont-bird-me/" target="_blank">lala</a> 2007-12-08 00:56 <a href="http://www.blogjava.net/dont-bird-me/articles/SingletonMemberField.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>