﻿<?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-Linden.zhang-文章分类-WebWork</title><link>http://www.blogjava.net/linden/category/23060.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 05 Jun 2007 11:37:48 GMT</lastBuildDate><pubDate>Tue, 05 Jun 2007 11:37:48 GMT</pubDate><ttl>60</ttl><item><title>什么是WebWork </title><link>http://www.blogjava.net/linden/articles/122104.html</link><dc:creator>Linden.zhang</dc:creator><author>Linden.zhang</author><pubDate>Tue, 05 Jun 2007 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/linden/articles/122104.html</guid><wfw:comment>http://www.blogjava.net/linden/comments/122104.html</wfw:comment><comments>http://www.blogjava.net/linden/articles/122104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/linden/comments/commentRss/122104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/linden/services/trackbacks/122104.html</trackback:ping><description><![CDATA[<div class=postText>
<p>&#160;</p>
<p>WebWork是一个Java web-application开发框架(development framework). 它专注于提高开发者的生产效率并简化代码. WebWork构建在XWork之上,&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"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">XWork提供了普通的(generic)命令模式(command&nbsp;pattern)框架<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>同时也是一个反转控制(Inversion&nbsp;of&nbsp;Control,&nbsp;IoC)容器.</span> </div>
<p>&nbsp;除了上述特性外, WebWork还为其它功能如</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"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">创建可复用的用户界面模版(UI&nbsp;template)<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>表单(form)控制<br></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>用户界面主题(UI&nbsp;theme)<br></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>国际化<br></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>表单参数与JavaBean的动态映射<br></span><span style="COLOR: #008080">6</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>健壮的客户端及服务器端校验(validation)</span> </div>
<p>提供了强有力的支持. <br><br></p>
<p>WebWork 2 : 什么是WebWork <br><br>WebWork是一个强大的基于Web的<font color=#0000ff><strong>MVC框架</strong></font>, 它构建在一个命令模式框架XWork之上. WebWork的特性包括</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 src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">&nbsp;：用于处理或代理&nbsp;请求的分发器(Dispatcher)<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">&nbsp;：支持多种视图技术(JSP,&nbsp;Velocity,&nbsp;JasperReports,&nbsp;XML,&nbsp;FreeMarker)的结果类型<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #000000">3</span> <span style="COLOR: #000000">&nbsp;：一个小而强大的JSP标签库和Velocity宏定义<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #000000">4</span> <span style="COLOR: #000000">&nbsp;：分发器调用XWork活动来访问和操作模型(Model)并为视图显示模型数据提供方便的途径.</span> </div>
<p>&nbsp;WebWork真正的优势在于它强调简洁和协作能力的根本理念. 使用WebWork将有助于</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 src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">：最小化代码<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">：允许开发人员更多的关注业务逻辑(business&nbsp;logic)和建模(modeling)<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #000000">3</span> <span style="COLOR: #000000">：不是诸如编写Servlet之类的事情.&nbsp;</span> </div>
<p>一 ：特性 </p>
<p>1 ：灵活的校验(validation)框架, 允许使用XML文件定义校验并通过截取器(Interceptor)在运行时自动应用到活动类(Action class), 从而达到校验与活动类之间的完全解藕(decoupled). 新版本还支持客户端校验.&nbsp;<br><br>2 ：类型转化(Type conversion)可以很容易的将对象从一个类转换成另一个类型。<br>&nbsp;<br>3 ：强大的表达式语言(Expression Language, EL)建立在OGNL基础之上, <span style="COLOR: #000000">允许:</span></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"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">遍历动态对象图<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>执行对象方法<br></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>使用值栈(ValueStack)实现对多个JavaBean属性的透明访问<br></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Webwork也可以使用JSTL.&nbsp;</span> </div>
<p>4&nbsp;：使用反转控制(Inversion of Control, IoC)管理<u>组件(component)生命周期</u>和<u>依赖关系</u>, 不需要编写注册类创建组件, 组件客户也不需要主动获取组件实例(instance).&nbsp;<br><br>5&nbsp;：Velocity模版, 使得开发人员可以很容易的定制Web页面的外观(look &amp; feel).&nbsp;<br><br>6&nbsp;：截取器(Interceptors)可以动态截取活动(Action)执行前后的处理过程, 这</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"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">简化了活动的代码<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>提高了代码复用能力</span> </div>
<p>7&nbsp;：支持国际化(I18n).&nbsp;<br><br>8&nbsp;：可以方便的与其他第三方软件集成, 包括Hibernate, Spring, Pico, Sitemesh.&nbsp;<br><br>9&nbsp;：支持多种视图技术如:&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"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">JSP<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Velocity<br></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>FreeMarker<br></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>JasperReports<br></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>XML</span> </div>
<p><br>10&nbsp;：<u>使用包</u>(Packages)和<u>名空间</u>(Namespaces)管理数以百计的活动.&nbsp;<br><br><br>二 ：背景与目的 <br>WebWork是一个开放源代码项目, 目标是为在短时间内构建复杂网站提供易于理解和维护的工具及开发框架. Java是一个平台以及基于该平台的语言, 尽管他支持although it supports many others as the language in which systems are built, such as JavaScript and XML.</p>
<p>WebWork在构架上基于最佳实践和那些已被证实有价值的设计模式. 它还基于一个强烈的动机: 尽可能的简单, 并具有维护上的灵活性(这实际上是一个困难的平衡).<br><br>它也鼓励用户使用恰当的, 符合需要的方式工作. [It also encourages you, as a user, to do things the way you seem fit for your needs.] <font color=#0000ff><strong>WebWork能以多种方式配置和使用</strong></font>, 哪种方式更适合于你依赖于使用环境. 下面是一个例子, WebWork支持多种不同的HTML生成技术如:</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"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">JSP<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Velocity模版引擎<br></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>XSLT</span> </div>
<p>它们之间在理念上和技术上都存在很大的差别, 但都能为WebWork所用, 同时, 不同的用户确实需要这些不同的方式. "你不能那么做"是我们尽可能避免的一句话, 而"我们不能"往往是因为有另一个更好, 更适合的工具.</p>
<p>三&nbsp;：WebWork对MVC Model-1和Model-2的支持 <br><br>Web应用开发框架的最重要的一个任务是支持</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"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">逻辑<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>内容<br></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>表现</span> </div>
<p>相分离的理念. 如果没有做到这一点, 通常会导致维护上的问题, 如果开发团队结构复杂(<font size=1>因为每一个团队成员通常只负责应用的某一方面(aspect)</font>), 还会使应用的开发变得更加困难. 达到分离目的的一般方法是采用MVC(Model-View-Controller)设计模式. 该模式鼓励使用分离的代码来处理：</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"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">模型(model,&nbsp;即</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">业务逻辑</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>控制器(controller,&nbsp;即</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">应用逻辑</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>视图(view).&nbsp;</span> </div>
<p>这样分离之后, 下一个问题是: </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 src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">控制器的代码与表现部分如何交互</span> </div>
<p>&nbsp;有两种常用的设计模型可以做到这一点, 它们分别被称为Model-1和Model-2. 这两种模型将在下文描述.</p>
<p>Model-1 ：<br>Model-1方式的基本想法是在表示层(presentation layer)如JSP或模版中调用控制器代码. 如果你正在使用JSP, 这意味着你可以通过两种方式执行你的WebWork活动：</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"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">使用</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">webwork:action</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">标签调用执行<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>使用</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">webwork:bean</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">标签像调用JavaBeans一样执行活动.</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span></div>
<p>Model-2 ：<br>在Model-2方式中</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"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">哪些代码调用控制器<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>哪些视图进行展示</span> </div>
<p>由第三方决定, 通常是一个servlet分发器. 分发器解码<font color=#0000ff><strong>HTTP请求中的URL</strong></font>, 然后决定执行哪些代码. 一个包含控制器代码的Java对象被获取并执行, 从而完成对某个应用逻辑和业务逻辑的处理. 当执行结束后, 分发器将请求转交(forward)给一个视图处理器(如一个JSP), 它使用前一个处理的数据绘制结果视图.</p>
<p>四&nbsp;：如何选择使用?<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"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">控制器逻辑<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>表现生成</span> </div>
<p>完全解藕, 使得根据执行情况来显示不同结果页面成为可能. 例如, 如果处理出现错误就可以显示一个错误页面而不显示正常的结果页面.</p>
<p>Model-1方式的优点如下.</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 src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">：不需要建立代码与表示之间的映射关系.&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">：易于察看JSP或模版中执行了哪些代码.&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #000000">3</span> <span style="COLOR: #000000">：如果页面中的一部分要求某个处理过程只允许成功(否则系统失灵),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么这些代码调用和表现部分的代码(如JSP标签库和HTML)不必分离到新的活动和JSP页面中处理过程.&nbsp;这样可以提高性能和可读性.&nbsp;</span> </div>
<p>Model-2方式的优点如下.</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 src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">：代码和表现彻底分离.&nbsp;同一个表现页面可以被多个不同的活动复用,&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这些活动可以访问不同的数据但使用相同的方式展示.&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">：如果一个活动可能导致多种状态,&nbsp;如</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">成功</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">,&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">需要重新输入</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">,&nbsp;或</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">出现错误</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">,&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么使用Model</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">2方式可以很容易的将这些状态映射到不同的页面.&nbsp;</span> </div>
<p>&nbsp;</p>
<p>选择使用的首要原则是: </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 src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">当代码仅仅是获取并显示数据(这被称为read</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">type&nbsp;code)时使用Model</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>只要当模型是由活动或一个处理流程所改变时就应当使用Model</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">.&nbsp;</span> </div>
<br>
<p><br>OGNL是WebWork,XWork中的底层支持组件.非常强大的函数库.</p>
</div>
<img src ="http://www.blogjava.net/linden/aggbug/122104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/linden/" target="_blank">Linden.zhang</a> 2007-06-05 11:49 <a href="http://www.blogjava.net/linden/articles/122104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>