﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-黑咖啡-随笔分类-struts2.0</title><link>http://www.blogjava.net/kyleYang/category/44390.html</link><description>孩儿立志出乡关，学不成名誓不还。
风华正茂乾坤地，人生无处不青山。
光阴如同流水去，珍惜时光最宝贵。
鹏程万里靠自己，飞黄腾达青少年。
</description><language>zh-cn</language><lastBuildDate>Tue, 13 Apr 2010 13:55:03 GMT</lastBuildDate><pubDate>Tue, 13 Apr 2010 13:55:03 GMT</pubDate><ttl>60</ttl><item><title>WebWork 2.1 / 2.2 与 Spring 集成方法总结</title><link>http://www.blogjava.net/kyleYang/archive/2010/04/12/318061.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Mon, 12 Apr 2010 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/04/12/318061.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/318061.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/04/12/318061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/318061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/318061.html</trackback:ping><description><![CDATA[
		<h4>第一部分：WebWork2.1与<a onclick="javascript:tagshow(event, 'Spring');" href="javascript:;" target="_self"><u><strong>Spring</strong></u></a>集成</h4>
		<p>两种方法：</p>
		<h5>法一：先<a onclick="javascript:tagshow(event, 'WebWork');" href="javascript:;" target="_self"><u><strong>WebWork</strong></u></a>后Spring（利用webwork2-spring.jar集成）</h5>
		<p>该方法的执行顺序是先WebWork，后Spring。<br />即，首先在xwork.xml中找到待执行的action，如果该action依赖其他bean，再到applicationContext.xml中查找被依赖的bean。</p>
		<p>WebWork2的IoC功能实现是在xwork.xml中，指定action类与其他bean的依赖关系。即：<br />(1)xwork.xml文件<br />&lt;action name="myAction" class="com.ryandaigle.web.actions.MyAction"&gt;<br />&lt;external-ref name="DAO"&gt;myDAO&lt;/external-ref&gt;<br />&lt;result name="success" type="dispatcher"&gt;<br />&lt;param name="location"&gt;/success.jsp&lt;/param&gt;<br />&lt;/result&gt;<br />&lt;/action&gt;</p>
		<p>(2)applicationContext.xml文件<br />&lt;bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" /&gt;</p>
		<p>具体集成步骤如下：</p>
		<p>1. <a onclick="javascript:tagshow(event, '%CF%C2%D4%D8');" href="javascript:;" target="_self"><u><strong>下载</strong></u></a>以下文件：<br /><span class="nobr"><a title="Visit page outside Confluence" href="http://www.ryandaigle.com/pebble/images/webwork2-spring.jar" rel="nofollow">http://www.ryandaigle.com/pebble/images/webwork2-spring.jar<sup><img class="rendericon" title="点击图片可在新窗口打开" style="CURSOR: pointer" height="7" alt="" src="http://hi.baidu.com/fc/editor/" width="7" align="absMiddle" border="0" /></sup></a></span></p>
		<p>2. 配置xwork.xml</p>
		<p>2.1 在xwork.xml中定义action时，采用external-ref来指定依赖的spring bean</p>
		<p>&lt;action name="myAction" class="com.foo.Action"&gt;<br />&lt;external-ref name="someDao"&gt;someDao&lt;/external-ref&gt;</p>
		<p>&lt;result name="success" type="dispatcher"&gt;<br />&lt;param name="location"&gt;/success.jsp&lt;/param&gt;<br />&lt;/result&gt;<br />&lt;/action&gt;</p>
		<p>2.2 在&lt;package&gt;中指定外部引用解析器</p>
		<p>&lt;package name="default" extends="webwork-default"<br />externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver"/&gt;</p>
		<p>SpringServletContextReferenceResolver作用是在applicationContext.xml中解析外部引用的bean</p>
		<p>2.3 增加一个拦截器，允许引用作为外部资源进行解析<br />&lt;interceptors&gt;<br />&lt;interceptor name="reference-resolver" class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor"/&gt;<br />&lt;interceptor-stack name="myDefaultWebStack"&gt;<br />&lt;interceptor-ref name="defaultStack"/&gt;<br />&lt;interceptor-ref name="reference-resolver"/&gt;<br />&lt;/interceptor-stack&gt;<br />&lt;/interceptors&gt;<br />&lt;default-interceptor-ref name="myDefaultWebStack"/&gt;</p>
		<p>3. 在web.xml中配置Spring与XWork的外部解析器在同一个Web Context中工作<br />&lt;!--载入spring配置文件--&gt;<br /> &lt;context-param&gt;<br />        &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />        &lt;param-value&gt;<br />            classpath:/applicationContext.xml<br />        &lt;/param-value&gt;<br />    &lt;/context-param&gt;<br /><br />&lt;listener&gt;<br />&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />&lt;/listener&gt;</p>
		<p>&lt;listener&gt;<br />&lt;listener-class&gt;com.atlassian.xwork.ext.ResolverSetupServletContextListener&lt;/listener-class&gt;<br />&lt;/listener&gt;</p>
		<p>第一个侦听器是spring必需的，无论是否与WebWork集成，都要<a onclick="javascript:tagshow(event, '%B6%A8%D2%E5');" href="javascript:;" target="_self"><u><strong>定义</strong></u></a>该侦听器；第二个侦听器是外部解析器所需要的，作用是通过ServletContext来取出Spring的ApplicationContext，作为WebWork与Spring的“桥梁”。</p>
		<p>4.applicationContext.xml文件跟xwork.xml文件的存放路径一下，都在classpath下<br />在applicationContext.xml中定义被引用的bean<br />&lt;bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" /&gt;</p>
		<p>说明：<br />如果不使用WebWork2，完全使用Spring，达到上述<a onclick="javascript:tagshow(event, '%D0%A7%B9%FB');" href="javascript:;" target="_self"><u><strong>效果</strong></u></a>，在applicationContext.xml中采取类似定义：<br />&lt;bean id="myAction" class="com.ryandaigle.web.actions.MyAction" singleton="false"&gt;<br />&lt;property name="DAO"&gt;<br />&lt;ref bean="myDAO"/&gt;<br />&lt;/property&gt;<br />&lt;bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" /&gt;</p>
		<p> </p>
		<h5>法二：先Spring后WebWork（利用spring-xwork-integration.jar集成）</h5>
		<p>该方法的执行顺序是先Spring，后WebWork。<br />即，首先由Spring负责wire所有的依赖关系，再由XWork来执行action。</p>
		<p>注意：因为XWork为每个action调用生成一个新的类实例，action在Spring的applicationContext.xml中应该<a onclick="javascript:tagshow(event, '%C5%E4%D6%C3');" href="javascript:;" target="_self"><u><strong>配置</strong></u></a>为prototype。</p>
		<p>1. 配置SpringObjectFactory</p>
		<p>(0)下载<a href="https://xwork-optional.dev.java.net/files/documents/1475/11992/spring-xwork-integration.jar">https://xwork-optional.dev.java.net/files/documents/1475/11992/spring-xwork-integration.jar</a></p>
		<p>(1) 可以在web.xml配置</p>
		<p>&lt;listener&gt;<br />&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />&lt;/listener&gt;</p>
		<p>&lt;listener&gt;<br />&lt;listener-class&gt;com.opensymphony.xwork.spring.SpringObjectFactoryListener&lt;/listener-class&gt;<br />&lt;/listener&gt;</p>
		<p>(2) 或者：在applicationContext.xml配置<br />&lt;bean id="springObjectFactory"<br />class="com.opensymphony.xwork.spring.SpringObjectFactory"<br />init-method="initObjectFactory"/&gt;</p>
		<p>以上两种方法任选一种即可</p>
		<p>2. 在applicationContext.xml中定义bean<br />&lt;bean name="some-action" class="fully.qualified.class.name" singleton="false"&gt;<br />&lt;property name="someProperty"&gt;&lt;ref bean="someOtherBean"/&gt;&lt;/property&gt;<br />&lt;/bean&gt;</p>
		<p>3. 在xwork.xml中定义action（注意action的class与bean的id相同）</p>
		<p>&lt;action name="myAction" class="some-action"&gt;<br />&lt;result name="success"&gt;view.jsp&lt;/result&gt;<br />&lt;/action&gt;</p>
		<p>说明：<br />该方法与WebWork 2.2中的方法基本相同。<br /><br /><strong>第二部分：WebWork2.2与Spring的集成</strong></p>
		<p>Spring是WebWork2.2中唯一支持的IoC容器。</p>
		<p>1 配置webwork.properties文件，指定spring作为webwork的IoC容器<br />webwork.objectFactory = spring<br />(1)默认的autowiring模式是：by name<br />即如果applicationContext.xml文件中的bean id与xwork.xml文件中的action name相同，就<br />(2)如果要改为其他模式：<br />webwork.objectFactory.spring.autoWire = name|type|auto|constructor</p>
		<p>2 配置web.xml文件，启动Spring侦听器<br />&lt;listener&gt;<br />&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />&lt;/listener&gt;</p>
		<p>3 在WEB-INF目录下增加applicationContext.xml文件<br />例：<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"&gt;<br />&lt;beans default-autowire="autodetect"&gt;<br />&lt;bean id="personManager" class="com.acme.PersonManager"/&gt;<br />...<br />&lt;/beans&gt;</p>
		<p>4 设置由Spring来初始化action<br />4.1     在Spring的applicationContext.xml文件中配置bean（即action类）<br />4.2     将xwork.xml中的action的class属性，由class名改为Spring中定义的bean名<br />例如：<br />(1)applicationContext.xml中，定义bean id是bar<br />&lt;beans default-autowire="autodetect"&gt;<br />&lt;bean id="bar" class="com.my.BarClass" singleton="false"/&gt;<br />...<br />&lt;/beans&gt;<br />(2)xwork.xml中，action的class="bar"，而不是通常的类名<br />&lt;package name="secure" namespace="/secure" extends="default"&gt;<br />&lt;action name="bar" class="bar"&gt;<br />&lt;result&gt;bar.ftl&lt;/result&gt;<br />&lt;/action&gt;<br />&lt;/package&gt;<br />摘自：<a href="http://www.cnblogs.com/harryguo/archive/2008/05/23/1205765.html">http://www.cnblogs.com/harryguo/archive/2008/05/23/1205765.html</a></p>
<img src ="http://www.blogjava.net/kyleYang/aggbug/318061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-04-12 14:48 <a href="http://www.blogjava.net/kyleYang/archive/2010/04/12/318061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring webwork 集成 三种方法</title><link>http://www.blogjava.net/kyleYang/archive/2010/04/12/318057.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Mon, 12 Apr 2010 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/04/12/318057.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/318057.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/04/12/318057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/318057.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/318057.html</trackback:ping><description><![CDATA[
		<p>
				<font size="3">
						<strong>1.<a name="baidusnap2"></a><b style="COLOR: black; BACKGROUND-COLOR: #99ff99">External-Ref</b></strong>
				</font>
		</p>
		<p>这种方法看起来比较烦琐,(这里描述的和<span class="hilite1">spring</span>文档里的有些区别,这种方法可按<span class="hilite1">spring</span>文档里的做法)</p>
		<p>第一步:在<a name="baidusnap0"></a><b style="COLOR: black; BACKGROUND-COLOR: #ffff66">web</b>.xml里面增加一个listener,如下 </p>
		<div class="code_title">xml 代码</div>
		<div class="dp-highlighter">
				<div class="bar">
				</div>
				<ol class="dp-xml">
						<li class="alt">
								<span>
										<span class="tag">&lt;</span>
										<span class="tag-name">listener</span>
										<span class="tag">&gt;</span>
										<span>    </span>
								</span>
						</li>
						<li class="">
								<span>        </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">listener-class</span>
								<span class="tag">&gt;</span>
								<span>org.<span class="hilite1">spring</span>framework.<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">web</b>.context.ContextLoaderListener</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">listener-class</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>
								</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">listener</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>  </span>
						</li>
						<li class="alt">
								<span>
								</span>
								<span class="tag">&lt;</span>
								<span class="tag-name">listener</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>        </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">listener-class</span>
								<span class="tag">&gt;</span>
								<span>com.opensymphony.xwork.<span class="hilite1">spring</span>.<span class="hilite1">Spring</span>ExternalReferenceResolverSetupListener</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">listener-class</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>
								</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">listener</span>
								<span class="tag">&gt;</span>
								<span>  </span>
						</li>
				</ol>
		</div>
		<p>第二步:在<span class="hilite1">Spring</span>里面配置类似Dao之类的bean,例如 </p>
		<div class="code_title">xml 代码</div>
		<div class="dp-highlighter">
				<div class="bar">
				</div>
				<ol class="dp-xml">
						<li class="alt">
								<span>
										<span class="tag">&lt;</span>
										<span class="tag-name">bean</span>
										<span> </span>
										<span class="attribute">id</span>
										<span>=</span>
										<span class="attribute-value">"myDAO"</span>
										<span> </span>
										<span class="attribute">class</span>
										<span>=</span>
										<span class="attribute-value">"com.ryandaigle.persistence.MyDAO"</span>
										<span> </span>
										<span class="attribute">singleton</span>
										<span>=</span>
										<span class="attribute-value">"true"</span>
										<span> </span>
										<span class="tag">/&gt;</span>
										<span>  </span>
								</span>
						</li>
				</ol>
		</div>
		<p>第三步:配置XWork.xml,例如 </p>
		<div class="code_title">xml 代码</div>
		<div class="dp-highlighter">
				<div class="bar">
				</div>
				<ol class="dp-xml">
						<li class="alt">
								<span>
										<span class="tag">&lt;</span>
										<span class="tag-name">package</span>
										<span> </span>
										<span class="attribute">name</span>
										<span>=</span>
										<span class="attribute-value">"default"</span>
										<span> </span>
										<span class="attribute">extends</span>
										<span>=</span>
										<span class="attribute-value">"<span class="hilite2">webwork</span>-default"</span>
										<span>    </span>
								</span>
						</li>
						<li class="">
								<span>        </span>
								<span class="attribute">externalReferenceResolver</span>
								<span>=</span>
								<span class="attribute-value">"com.opensymphony.xwork.<span class="hilite1">spring</span>.<span class="hilite1">Spring</span>ExternalReferenceResolver"</span>
								<span class="tag">&gt;</span>
						</li>
						<li class="alt">
								<span>        </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">interceptors</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>                </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">interceptor</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"reference-resolver"</span>
								<span> </span>
								<span class="attribute">class</span>
								<span>=</span>
								<span class="attribute-value">"com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor"</span>
								<span class="tag">/&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>                </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">interceptor-stack</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"myDefaultWebStack"</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>                        </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">interceptor-ref</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"defaultStack"</span>
								<span class="tag">/&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>                        </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">interceptor-ref</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"reference-resolver"</span>
								<span class="tag">/&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>                </span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">interceptor-stack</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>        </span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">interceptors</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>           </span>
						</li>
						<li class="alt">
								<span>        </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">default-interceptor-ref</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"myDefaultWebStack"</span>
								<span class="tag">/&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>           </span>
						</li>
						<li class="alt">
								<span>        </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">action</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"myAction"</span>
								<span> </span>
								<span class="attribute">class</span>
								<span>=</span>
								<span class="attribute-value">"com.ryandaigle.<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">web</b>.actions.MyAction"</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>                </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">
										<b style="COLOR: black; BACKGROUND-COLOR: #99ff99">external-ref</b>
								</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"DAO"</span>
								<span class="tag">&gt;</span>
								<span>myDAO</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">
										<b style="COLOR: black; BACKGROUND-COLOR: #99ff99">external-ref</b>
								</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>                </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">result</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"success"</span>
								<span> </span>
								<span class="attribute">type</span>
								<span>=</span>
								<span class="attribute-value">"dispatcher"</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>                        </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">param</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"location"</span>
								<span class="tag">&gt;</span>
								<span>/success.jsp</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">param</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>                </span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">result</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>        </span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">action</span>
								<span class="tag">&gt;</span>
								<span>                    </span>
						</li>
						<li class="alt">
								<span>
								</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">package</span>
								<span class="tag">&gt;</span>
								<span>   </span>
						</li>
				</ol>
		</div>
		<p>
				<br />
				<font size="3">
						<strong>2.<span class="hilite1">Spring</span>ObjectFactory</strong>
				</font>
		</p>
		<p>
				<br />我一直用这种方法,因为以前觉得是xwork本身提供的方法,升级有保障. </p>
		<p>配置方法: <br />第一步.在<span class="hilite1">spring</span>的 applicationContext.xml (根据实际情况决定) 里面定义你的action,例如 </p>
		<div class="code_title">xml 代码</div>
		<div class="dp-highlighter">
				<div class="bar">
				</div>
				<ol class="dp-xml">
						<li class="alt">
								<span>
										<span class="tag">&lt;</span>
										<span class="tag-name">bean</span>
										<span> </span>
										<span class="attribute">name</span>
										<span>=</span>
										<span class="attribute-value">"some-action"</span>
										<span> </span>
										<span class="attribute">class</span>
										<span>=</span>
										<span class="attribute-value">"fully.qualified.class.name"</span>
										<span> </span>
										<span class="attribute">singleton</span>
										<span>=</span>
										<span class="attribute-value">"false"</span>
										<span class="tag">&gt;</span>
										<span>    </span>
								</span>
						</li>
						<li class="">
								<span>    </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">property</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"someProperty"</span>
								<span class="tag">&gt;</span>
								<span class="tag">&lt;</span>
								<span class="tag-name">ref</span>
								<span> </span>
								<span class="attribute">bean</span>
								<span>=</span>
								<span class="attribute-value">"someOtherBean"</span>
								<span class="tag">/&gt;</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">property</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>
								</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">bean</span>
								<span class="tag">&gt;</span>
								<span>   </span>
						</li>
				</ol>
		</div>
		<p>可以看到,可以使用<span class="hilite1">Spring</span>的特性来给你的action设置属性等,当然也可以使用<span class="hilite1">Spring</span>的拦截器等 (可以使用不一定等于推荐使用) </p>
		<p>注意一定是singleton="false",因为xwork的action是这样要求的. </p>
		<p>第二步.在xwork.xml里定义你的action定义 </p>
		<div class="code_title">xml 代码</div>
		<div class="dp-highlighter">
				<div class="bar">
				</div>
				<ol class="dp-xml">
						<li class="alt">
								<span>
										<span class="tag">&lt;</span>
										<span class="tag-name">action</span>
										<span> </span>
										<span class="attribute">name</span>
										<span>=</span>
										<span class="attribute-value">"myAction"</span>
										<span> </span>
										<span class="attribute">class</span>
										<span>=</span>
										<span class="attribute-value">"some-action"</span>
										<span class="tag">&gt;</span>
										<span>    </span>
								</span>
						</li>
						<li class="">
								<span>    </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">result</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"success"</span>
								<span class="tag">&gt;</span>
								<span>view.jsp</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">result</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>
								</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">action</span>
								<span class="tag">&gt;</span>
								<span>   </span>
						</li>
				</ol>
		</div>
		<p> 第三步.要使上面的关联生效,还要用我们的<span class="hilite1">Spring</span>ObjectFactory来替换Xwork的默认ObjectFactory. <br />最新的<span class="hilite1">Spring</span>ObjectFactory里面,有两种方法,其中我觉得A方法更直观一些. </p>
		<p>A:修改<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">web</b>.xml </p>
		<div class="code_title">xml 代码</div>
		<div class="dp-highlighter">
				<div class="bar">
				</div>
				<ol class="dp-xml">
						<li class="alt">
								<span>
										<span class="comments">&lt;!-- 这个是<span class="hilite1">spring</span>的listener,可以改为你的自定义的<span class="hilite1">spring</span>的Listenter --&gt;</span>
										<span>    </span>
								</span>
						</li>
						<li class="">
								<span>
								</span>
								<span class="tag">&lt;</span>
								<span class="tag-name">listener</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>        </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">listener-class</span>
								<span class="tag">&gt;</span>
								<span>org.<span class="hilite1">spring</span>framework.<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">web</b>.context.ContextLoaderListener</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">listener-class</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>
								</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">listener</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>  </span>
						</li>
						<li class="">
								<span>  </span>
						</li>
						<li class="alt">
								<span>
								</span>
								<span class="comments">&lt;!-- 这个必须在 <span class="hilite1">Spring</span> ContextLoaderListener 的后面 --&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>
								</span>
								<span class="tag">&lt;</span>
								<span class="tag-name">listener</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>  </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">listener-class</span>
								<span class="tag">&gt;</span>
								<span>com.opensymphony.xwork.<span class="hilite1">spring</span>.<span class="hilite1">Spring</span>ObjectFactoryListener</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">listener-class</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>
								</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">listener</span>
								<span class="tag">&gt;</span>
								<span>  </span>
						</li>
				</ol>
		</div>
		<p> B.在<span class="hilite1">spring</span>的applicationContext.xml (根据实际情况决定)里面定义一个bean,例如 </p>
		<div class="code_title">xml 代码</div>
		<div class="dp-highlighter">
				<div class="bar">
				</div>
				<ol class="dp-xml">
						<li class="alt">
								<span>
										<span class="tag">&lt;</span>
										<span class="tag-name">bean</span>
										<span> </span>
										<span class="attribute">id</span>
										<span>=</span>
										<span class="attribute-value">"<span class="hilite1">spring</span>-object-factory"</span>
										<span> </span>
										<span class="attribute">class</span>
										<span>=</span>
										<span class="attribute-value">"com.opensymphony.xwork.<span class="hilite1">spring</span>.<span class="hilite1">Spring</span>ObjectFactory"</span>
										<span>    </span>
								</span>
						</li>
						<li class="">
								<span>        </span>
								<span class="attribute">init-method</span>
								<span>=</span>
								<span class="attribute-value">"initObjectFactory"</span>
								<span class="tag">/&gt;</span>
								<span>  </span>
						</li>
				</ol>
		</div>
		<p>这样<span class="hilite1">Spring</span>会自动调用initObjectFactory方法来替换Xwork的默认ObjectFactory </p>
		<p>
				<font size="3">
						<strong>3.ActionAutowiringInterceptor</strong>
				</font>
		</p>
		<p>
				<br />这个方法是最近出现的,可能是最简洁的方法,但是不知道性能上有没有问题,我觉得jdk1.4以后应该没有任何问题吧,至于实际效果你的自己测试一下. </p>
		<p>第一步:配置<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">web</b>.xml </p>
		<div class="code_title">xml 代码</div>
		<div class="dp-highlighter">
				<div class="bar">
				</div>
				<ol class="dp-xml">
						<li class="alt">
								<span>
										<span class="comments">&lt;!-- 这个是<span class="hilite1">spring</span>的listener,可以改为你的自定义的<span class="hilite1">spring</span>的Listenter --&gt;</span>
										<span>    </span>
								</span>
						</li>
						<li class="">
								<span>
										<span class="tag">&lt;</span>
										<span class="tag-name">listener</span>
										<span class="tag">&gt;</span>
										<span> </span>
								</span>
								<span>   </span>
						</li>
						<li class="alt">
								<span>    </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">listener-class</span>
								<span class="tag">&gt;</span>
								<span>org.<span class="hilite1">spring</span>framework.<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">web</b>.context.ContextLoaderListener</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">listener-class</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>
										<span class="tag">&lt;<span class="tag">/</span></span>
										<span class="tag-name">listener</span>
										<span class="tag">&gt;</span>
										<span> </span>
								</span>
								<span>  </span>
						</li>
				</ol>
		</div>
		<p>       <br /> 第二步配置xwork.xml里面的拦截器 </p>
		<div class="code_title">xml 代码</div>
		<div class="dp-highlighter">
				<div class="bar">
				</div>
				<ol class="dp-xml">
						<li class="alt">
								<span>
										<span class="tag">&lt;</span>
										<span class="tag-name">interceptors</span>
										<span class="tag">&gt;</span>
										<span>    </span>
								</span>
						</li>
						<li class="">
								<span>  </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">interceptor</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"autowire"</span>
								<span> </span>
								<span class="attribute">class</span>
								<span>=</span>
								<span class="attribute-value">"com.opensymphony.xwork.<span class="hilite1">spring</span>.interceptor.ActionAutowiringInterceptor"</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>    </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">param</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"autowireStrategy"</span>
								<span class="tag">&gt;</span>
								<span>@org.<span class="hilite1">spring</span>framework.beans.factory.config.AutowireCapableBeanFactory@AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">param</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>  </span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">interceptor</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>  </span>
								<span class="tag">&lt;</span>
								<span class="tag-name">interceptor-stack</span>
								<span> </span>
								<span class="attribute">name</span>
								<span>=</span>
								<span class="attribute-value">"autowireDefault"</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>    </span>
								<span class="tag">&lt;</span>
								<span class="attribute">interceptor-ref</span>
								<span class="tag-name">interceptor-ref</span>
								<span>=</span>
								<span class="attribute-value">"autowire"</span>
								<span> </span>
								<span class="tag">/&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>    </span>
								<span class="tag">&lt;</span>
								<span class="attribute">interceptor-ref</span>
								<span class="tag-name">interceptor-ref</span>
								<span>=</span>
								<span class="attribute-value">"defaultStack"</span>
								<span> </span>
								<span class="tag">/&gt;</span>
								<span>    </span>
						</li>
						<li class="">
								<span>  </span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">interceptor-stack</span>
								<span class="tag">&gt;</span>
								<span>    </span>
						</li>
						<li class="alt">
								<span>
								</span>
								<span class="tag">&lt;/</span>
								<span class="tag-name">interceptors</span>
								<span class="tag">&gt;</span>
								<span>   </span>
						</li>
				</ol>
		</div>
		<p>                你的拦截器里都要包含autowire,例如这个autowireDefault就相当于以前的默认的拦截器了. <br />其中的拦截器策略可以配置,上面配置的是根据类型,如果不配置,默认是根据名字. </p>
		<p>一共有四种策略: <br />AUTOWIRE_CONSTRUCTOR <br />AUTOWIRE_BY_TYPE <br />AUTOWIRE_BY_NAME <br />AUTOWIRE_AUTODETECT </p>
		<p>这种方法执行原理就是查找你的action的所有字段,如果和<span class="hilite1">Spring</span>的定义bean有相同的,就自动设置. </p>
		<p>假设你的<span class="hilite1">Spring</span>的applicationContext.xml里面有这样一个定义: </p>
		<div class="code_title">xml 代码</div>
		<div class="dp-highlighter">
				<div class="bar">
				</div>
				<ol class="dp-xml">
						<li class="alt">
								<span>
										<span class="tag">&lt;</span>
										<span class="tag-name">bean</span>
										<span> </span>
										<span class="attribute">id</span>
										<span>=</span>
										<span class="attribute-value">"userManager"</span>
										<span> </span>
										<span class="attribute">class</span>
										<span>=</span>
										<span class="attribute-value">"com.test.UserManager"</span>
										<span> </span>
										<span class="tag">/&gt;</span>
										<span>   </span>
								</span>
						</li>
				</ol>
		</div>
		<p> 如果你在xwork.xml 里面定义的某个action有一个字段叫userManager,那么在运行时刻就会自动被设置为<span class="hilite1">Spring</span>的配置文件里定义的Bean.</p>
<img src ="http://www.blogjava.net/kyleYang/aggbug/318057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-04-12 14:23 <a href="http://www.blogjava.net/kyleYang/archive/2010/04/12/318057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 拦截器</title><link>http://www.blogjava.net/kyleYang/archive/2010/03/23/316340.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Tue, 23 Mar 2010 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/03/23/316340.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/316340.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/03/23/316340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/316340.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/316340.html</trackback:ping><description><![CDATA[如果不用spring的话，系统的耦合会很大很大，后期肯定会出大问题。想个办法能不能在数据库方面做做文章。数据库可是有触发器的，唯一要解决的是是哪个用户做的操作。 <br />要么就用日志，在action里记录。日志构造的成一个sql语句，定期执行。 <br />以上是个人的小小建议，采纳要慎重！
<div class="info"><a href="http://52356.javaeye.com/" target="_blank"><font color="#006699">52356</font></a> (中级程序员) 2009-12-16 </div><div class="solution" id="solution_71757"><div>第一点 感觉你用户的操作入库有点没用吧 这样会有大量的IO操作  并发访问你的数据库吃不消  你可以写个日志不就可以了么 <br />第二点  这是个典型的 横切问题 用spring的aop解决最好不过   用你想的拦截器也可以实现  或者用spring发个事件也行 这个比较简单 而且耦合度基本为0 <br />第三点 如果你不打算用spring 你可以写个父类 放所有action都继承这个父亲类  在父类中把公共部分提取出去  子类中只是取得用户名了 操作名了  这样不就省得你每个都去写了么</div><div class="info"><a href="http://wocsok.javaeye.com/" target="_blank"><font color="#006699">wocsok</font></a> (资深程序员) 2009-12-16 </div></div><div class="solution" id="solution_71795"><div>用<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Struts2</font></span> 拦截器，直接上代码 <br /><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://www.javaeye.com/problems/32276#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div></div><ol class="dp-j"><li><span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> java.util.Date;      </span></span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> java.util.Iterator;      </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> java.util.Map;      </span></li><li><span>     </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> java.util.Set;      </span></li><li><span>     </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> javax.servlet.http.HttpServletRequest;      </span></li><li><span>     </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> org.apache.<span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">struts2</font></span>.ServletActionContext;      </span></li><li><span>     </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> com.chiyu.model.Admin;      </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> com.chiyu.model.Adminoperationlog;      </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> com.chiyu.service.IAdminOperationLogService;      </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> com.chiyu.service.IAdminService;      </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> com.opensymphony.xwork2.Action;      </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> com.opensymphony.xwork2.ActionContext;      </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> com.opensymphony.xwork2.ActionInvocation;      </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> com.opensymphony.xwork2.interceptor.AbstractInterceptor;      </span></li><li><span>     </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">import</font></strong></span><span> freemarker.template.utility.StringUtil;      </span></li><li><span>     </span></li><li><span></span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">class</font></strong></span><span> LoggerInterceptor </span><span class="keyword"><strong><font color="#7f0055">extends</font></strong></span><span> AbstractInterceptor {      </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span> IAdminOperationLogService adminOperationLogService;      </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span> IAdminService adminService;      </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">private</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">static</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">final</font></strong></span><span> </span><span class="keyword"><strong><font color="#7f0055">long</font></strong></span><span> serialVersionUID = 1358600090729208361L;      </span></li><li><span>     </span></li><li><span>    </span><span class="annotation"><font color="#646464">@SuppressWarnings</font></span><span>(</span><span class="string"><font color="#0000ff">"unchecked"</font></span><span>)      </span></li><li><span>    </span><span class="annotation"><font color="#646464">@Override</font></span><span>     </span></li><li><span>    </span><span class="keyword"><strong><font color="#7f0055">public</font></strong></span><span> String intercept(ActionInvocation invocation) </span><span class="keyword"><strong><font color="#7f0055">throws</font></strong></span><span> Exception {      </span></li><li><span>        System.out.println(</span><span class="string"><font color="#0000ff">"日志拦截器已经开始启动.."</font></span><span>);      </span></li><li><span>        String actionName = invocation.getAction().getClass().toString();      </span></li><li><span>        invocation.invoke();      </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">final</font></strong></span><span> Map&lt;String, Object&gt; parameters = invocation      </span></li><li><span>                .getInvocationContext().getParameters();      </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">boolean</font></strong></span><span> result = invocation.getProxy().getExecuteResult();      </span></li><li><span>        String method = invocation.getProxy().getMethod();      </span></li><li><span>        </span><span class="comment"><font color="#008200">// 取得请求相关的ActionContext实例    </font></span><span>  </span></li><li><span>        ActionContext ctx = invocation.getInvocationContext();      </span></li><li><span>     </span></li><li><span>        HttpServletRequest request = ServletActionContext.getRequest();      </span></li><li><span>        String ip = request.getRemoteAddr();      </span></li><li><span>        Map session = ctx.getSession();      </span></li><li><span>        </span><span class="comment"><font color="#008200">// 取出名为user的session属性    </font></span><span>  </span></li><li><span>        String name = (String) session.get(Admin.ADMIN_KEY);      </span></li><li><span>        Admin admin = adminService.findAdminByAdminName(name);      </span></li><li><span>        System.out.println(admin);      </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">if</font></strong></span><span> (admin != </span><span class="keyword"><strong><font color="#7f0055">null</font></strong></span><span>) {      </span></li><li><span>            Adminoperationlog adminLog = </span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> Adminoperationlog();      </span></li><li><span>            adminLog.setAdminId(admin.getAdminId());      </span></li><li><span>            adminLog.setAdminName(name);      </span></li><li><span>            adminLog.setDealTime(</span><span class="keyword"><strong><font color="#7f0055">new</font></strong></span><span> java.sql.Date(System.currentTimeMillis()));      </span></li><li><span>            adminLog.setOperationIp(ip);      </span></li><li><span>            adminLog.setOperationSource(actionName + </span><span class="string"><font color="#0000ff">"---"</font></span><span> + method + </span><span class="string"><font color="#0000ff">"---"</font></span><span>     </span></li><li><span>                    + parameters + </span><span class="string"><font color="#0000ff">"---"</font></span><span> + result);      </span></li><li><span>            adminOperationLogService.save(adminLog);      </span></li><li><span>        }      </span></li><li><span>        </span><span class="keyword"><strong><font color="#7f0055">return</font></strong></span><span> Action.SUCCESS;      </span></li><li><span>    }  </span></li></ol></div></div></div><img src ="http://www.blogjava.net/kyleYang/aggbug/316340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-03-23 17:32 <a href="http://www.blogjava.net/kyleYang/archive/2010/03/23/316340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>