﻿<?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-TopのIf</title><link>http://www.blogjava.net/TopσのIf/</link><description>一个不断成长的j2ee小虫，像锅牛一样不断往上爬。终有一天找到自已的小天地......</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 08:52:50 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 08:52:50 GMT</pubDate><ttl>60</ttl><item><title>WebWork2中ServletDispatch类中的service方法</title><link>http://www.blogjava.net/TopσのIf/archive/2005/12/06/22801.html</link><dc:creator>java驿馆</dc:creator><author>java驿馆</author><pubDate>Tue, 06 Dec 2005 15:12:00 GMT</pubDate><guid>http://www.blogjava.net/TopσのIf/archive/2005/12/06/22801.html</guid><wfw:comment>http://www.blogjava.net/TopσのIf/comments/22801.html</wfw:comment><comments>http://www.blogjava.net/TopσのIf/archive/2005/12/06/22801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/TopσのIf/comments/commentRss/22801.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/TopσのIf/services/trackbacks/22801.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在web.xml文件里配置一个派遣器ServletDispatcher，以接收所有以action结尾的url请求。并进行http请求调度处理.<BR><FONT style="BACKGROUND-COLOR: #ffffff"><FONT face=Verdana><FONT color=#008000>&lt;servlet&gt;<BR>&nbsp;&nbsp; &lt;servlet-name&gt;&lt;/servlet-name&gt;<BR>&nbsp;&nbsp; &lt;servlet-class&gt;com.opensymphony.webwork.dispatcher.ServletDispatcher&lt;/servlet-class&gt;<BR>&lt;/servlet&gt;<BR>&lt;servlet-mapping&gt;<BR>&nbsp;&nbsp; &lt;servlet-name&gt;webwork&lt;/servlet-name&gt;<BR>&nbsp;&nbsp; &lt;url-pattern&gt;*.action&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;</FONT><BR></FONT></FONT>当ServletDispatche调度器接收到一个.action结尾的请求时，会调用ServletDispatche类的service方法进行处理,该方法最终是创建一个ActionProxy对象，并通过执行ActionProxy中的execute方法来<BR>调用所请求的Action的execute方法.之前要执行一些方法来创造条件：创建Action上下文===&gt;从request中获得值堆栈stack===&gt;创建ActionProxyFactory对象，并初始化一个DefaultActionProxy对象====&gt;通过DefaultAction的构造函数调用ConfigurationManager获得当前请求的Action在xwork.xml中的配置信息====&gt;DefaultActionProxy中的prepare方法通过创建一个ActionInvocation对象来实现对请求action的调用。<BR><BR>AroundInterceptor拦截机--&gt;<BR>DefaultActionInvocation中有一个数组维护了拦截机的执行顺序：<BR>1、StaticParametersInterceptor, 2、ParametersInterceptor, 3、WebWorkConversionErrorInterceptor<BR>4、ModelDrivenInterceptor 5、ExternalReferencesInterceptor <BR>6、StaticParametersInterceptor 7、parametersInterceptor, 8、WebWorkConversionErrorInterceptor<BR>9、ModelDrivenInterceptor 10、ValidationInterceptor<BR>注：这里1、2、3、4拦截机执行了两次，为什么会执行两次呢?<BR>疑问：这里的执行顺序和webwork-default.xml中的&lt;interceptors&gt;配置有何关联?</P>
<P>Action ---&gt; 根据Action实现相应的Action,ModelDriven接口调用基类的<BR>ParametersInterceptor中：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT style="BACKGROUND-COLOR: #ffffff" color=#0000ff>final Map parameters = ActionContext.getContext().getParameters();<BR><BR></FONT></P>
<P>从AroundInterceptor的context中取出页面提交字段的名称和值,然后它会先把stack.pus(modelDriven.getModel()); modelDriven.getModel()放到CompoundRoot中(CompounRoot是一个ArrayList)上面提到有四个拦截机执行两次，因为第一次要push进去一个空的对象，方便填值，第二次放的是填充好的对象。也就是Action中getModel()的对象。把值从parameters 设置到OgnlValueStack的CompoundRoot的第一个下标中的Action里的getModel()对象里code:stack.setValue(name, value);name对应的是getModel()对应的字段，value为要填充的值.</P><img src ="http://www.blogjava.net/TopσのIf/aggbug/22801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/TopσのIf/" target="_blank">java驿馆</a> 2005-12-06 23:12 <a href="http://www.blogjava.net/TopσのIf/archive/2005/12/06/22801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Weblogic8.1实现(CMT)及spring管理JTA事务 </title><link>http://www.blogjava.net/TopσのIf/archive/2005/11/24/21302.html</link><dc:creator>java驿馆</dc:creator><author>java驿馆</author><pubDate>Thu, 24 Nov 2005 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/TopσのIf/archive/2005/11/24/21302.html</guid><wfw:comment>http://www.blogjava.net/TopσのIf/comments/21302.html</wfw:comment><comments>http://www.blogjava.net/TopσのIf/archive/2005/11/24/21302.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/TopσのIf/comments/commentRss/21302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/TopσのIf/services/trackbacks/21302.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp; 最近偶参与一个J2EE项目，应用架框是struts+spring! 持久层用hibernate,由于业务需要，业务数据来源来二个不同的数据库数据库是Orcale,版本是9.0.1.0.0。由于采用容器管理事务(CMT),对于Spring,一般普通业务应用我用声明式事务，因为这样让代码清洁一点，只有对于特殊的业务我才用编程式事务，如大批量更新时调用存储过程。对于WebLog...&nbsp;&nbsp;<a href='http://www.blogjava.net/TopσのIf/archive/2005/11/24/21302.html'>阅读全文</a><img src ="http://www.blogjava.net/TopσのIf/aggbug/21302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/TopσのIf/" target="_blank">java驿馆</a> 2005-11-24 16:47 <a href="http://www.blogjava.net/TopσのIf/archive/2005/11/24/21302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE中POJO的定位</title><link>http://www.blogjava.net/TopσのIf/archive/2005/11/24/21301.html</link><dc:creator>java驿馆</dc:creator><author>java驿馆</author><pubDate>Thu, 24 Nov 2005 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/TopσのIf/archive/2005/11/24/21301.html</guid><wfw:comment>http://www.blogjava.net/TopσのIf/comments/21301.html</wfw:comment><comments>http://www.blogjava.net/TopσのIf/archive/2005/11/24/21301.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/TopσのIf/comments/commentRss/21301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/TopσのIf/services/trackbacks/21301.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;POJO(plain old java Object)[译：简单初始Java对象]。它简单(因为只有set/get方法)吗？或是我们把应该把它弄得复杂点(带点业务判断)？究竟它在我们J2EE应用中扮演一个什么样的角色呢？一个Anemic Domain Model，Rich Domain Model, DTO, O/R mapping Entity........！以前我的系统中POJO都是一个贫血的模型，只有set/get方法！它的职责就是把前端页面的数据从formBean中转移过来(用反射)，作为持久层的对象。这里POJO有两个角色，一个角色是传送数据，另一个是角色是PO(持久对象)。一段时间后我发现这样做效率低下，想像一下有些业务处理，如一个银行帐户的pojo,里面有一个金额和利息字段，这个金额是通过一些公式计算后得出来的，开始时我们在业务层里把金额算出来后set到帐户pojo金额字段里。我开始思索把一些都是计算或者纯逻辑的东西pull Up到pojo中。这时候我的pojo变成一个Domain Object。尽管不是一个Rich的Domain Model,但毕竟前进了一小步。再后来用到了webwork2,由于webwork2里没有了struts formBean，使用拦截机设值，ModelDriven模式下我的持久Entity就是一个formBean和po的结合,　在ACTIO中它是一个有值的VO，在DAO实现层变成一个PO。在这里我的pojo继承了O/R Entity类，并把合适的业务层的代码都移到相应的了Pojo中，当然没有持久层的代码。这样我的系统的部分pojo变成了Rich Domain Model。在Ejb下，由会话门面管理对POJO业务对象访问对比起笨重的entity bean有更高的效率和可移植性。尽管Ejb下的POJO不能享受entity bean的CMP策略，但有了spring 的IOC后，一切变得可配置了！POJO还有很重要的一个优势就是pojo中的业务可以脱离具体容器运行测试！在这里,pojo是贫血还是冲血应该取决于你的业务应用，记住：不要把简单的问题搞复杂了，但把复杂的问题分解成简单的问题一直就是我们追求的！<img src ="http://www.blogjava.net/TopσのIf/aggbug/21301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/TopσのIf/" target="_blank">java驿馆</a> 2005-11-24 16:46 <a href="http://www.blogjava.net/TopσのIf/archive/2005/11/24/21301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>