??xml version="1.0" encoding="utf-8" standalone="yes"?>球探比分即时棒球比分直播:BlogJava-Flyingis-随笔分类-Web 框架与开?/title><link>//www.355548.live/flyingis/category/4271.html</link><description>Talking and thinking freely !<br> Flying in the world of Java and GIS !</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:25:41 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:25:41 GMT</pubDate><ttl>60</ttl><item><title>MVC的一q简单素?/title><link>//www.355548.live/flyingis/archive/2006/03/27/37657.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Mon, 27 Mar 2006 09:50:00 GMT</pubDate><guid>//www.355548.live/flyingis/archive/2006/03/27/37657.html</guid><wfw:comment>//www.355548.live/flyingis/comments/37657.html</wfw:comment><comments>//www.355548.live/flyingis/archive/2006/03/27/37657.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>//www.355548.live/flyingis/comments/commentRss/37657.html</wfw:commentRss><trackback:ping>//www.355548.live/flyingis/services/trackbacks/37657.html</trackback:ping><description><![CDATA[ <font size="2"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">作者:</span><span lang="EN-US" style="FONT-FAMILY: Verdana"><a class="" title="" href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a></span></font> <p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun"> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">素描工具Q?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Struts + Hibernate 3</span> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">素描对象Q一个够简单的Z</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">MVC</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Web</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">应用</span> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">目的Q?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Struts</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">分离业务逻辑与表玎ͼ使用</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Hibernate</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">分离数据操作与业务逻辑Q整理一U基本的</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">MVC</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">开发思\?/span> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun"> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="EN-US" style="FONT-FAMILY: Verdana">1.</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">素描框架<br /></span> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">    该素描主要体现在pȝ层次的功能划分,pȝl构的组l与设计上,素描_单,数据库中只涉及一张表Q?/p> <p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">    学生信息Q学生编受姓名、性别、年龄、专业信息)--Student( id, name, gender, age, specialty_id )</p> <ul class="dntg"> <li class="dntg"> <div style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"> <span style="FONT-FAMILY: SimSun">pȝ设计</span> </div> </li> </ul> <p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">    公共cȝ设计与实?/p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">    各模块的详细设计Q主要描qC个基本的</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">CRUD</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">操作Q以及对象数据传?/span> </p> <ul class="dntg"> <li class="dntg"> <div style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"> <span style="FONT-FAMILY: SimSun">pȝ的部|Ӏ测试与发布</span> </div> </li> </ul> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="EN-US" style="FONT-FAMILY: Verdana">2.</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">公共c设?br /></span> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">    基本?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">CRUD</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">操作装在基本的帮助c?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">HibernateHelper</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">中,实现</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Object load(Class theClass, java.io.Serializable id)</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Query createQuery(String queryString)</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">void setQueryParameter(Query query, String name, Object val)</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">List list(Query query)</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">void save(Object o)</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">void update(Object o)</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">void delete(Object o)</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">void saveOrUpdate(Object o)</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">{这些基本方法?br /></span> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">    帔R单独装?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Constants</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">cM?/span> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun"> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="EN-US" style="FONT-FAMILY: Verdana">3.</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">各种对象设计</span> </p> <ul class="dntg"> <li class="dntg"> <div style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"> <span lang="EN-US" style="FONT-FAMILY: Verdana">ActionForm:StudentForm--</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">用于视图层与控制层之间传递数据?/span> </div> </li> <li class="dntg"> <div style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">接口</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">StudentIf--</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">实现了学生数据对?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Bean</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">所需要的所有接口方法?/span> </div> </li> <li class="dntg"> <div style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">学生数据对象</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">StudentData--</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">实现了记录学生对象数据的功能Qƈ可以用作数据交互的传输对象,它实C接口</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Serializable</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">StudentIf</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> </div> </li> <li class="dntg"> <div style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">学生实体</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Bean StudentBean--</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">实现了学生实体的所有属性,它实C接口</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Serializable</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">StudentIf</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span> </div> </li> </ul> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="EN-US" style="FONT-FAMILY: Verdana">4.</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">对象理实现c?br /></span> <br /></p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">    业务逻辑处理为项目的核心Q直接关pd目是否W合用户需求。因此,我们可以单独设计一个对象管理实现类</span> <font face="Verdana">ManagerFacade</font>Q定义处理业务对象的<span lang="EN-US" style="FONT-FAMILY: Verdana">CRUD</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">操作Q以增加学生信息Z</span><span lang="EN-US" style="FONT-FAMILY: Verdana">public StudentIf addStudent(StudentIf student)</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">。学生数据对?/span><span lang="EN-US" style="FONT-FAMILY: Verdana">StudentData</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">?/span><span lang="EN-US" style="FONT-FAMILY: Verdana">Action</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">中通过</span><span lang="EN-US" style="FONT-FAMILY: Verdana">StudentForm</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">接收到表现层传入的数据,然后作ؓ<font face="Verdana">ManagerFacade对象?/font></span><span lang="EN-US" style="FONT-FAMILY: Verdana">addStudent</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">Ҏ的参C入方法内Q在Ҏ体内声明学生实体</span><span lang="EN-US" style="FONT-FAMILY: Verdana">StudentBean</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">的一个对象,学生数据对象即传入参数中的属性Dl实体对象,然后调用公共c?span lang="EN-US" style="FONT-FAMILY: Verdana">HibernateHelper?/span></span><span lang="EN-US" style="FONT-FAMILY: Verdana">save</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">Ҏ完成数据库操作。其他基本操作与此类|q样设计g对象较多Q但各层之间分工明确Q有利于降藕?br /></span></p> <p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">    另外Q在数据传递过E中Q还会涉及到数据cd的{换,可以专门设计帮助cL完成?/p> <p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun"> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="EN-US" style="FONT-FAMILY: Verdana">5.</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">面</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">UI</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">设计<br /></span> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">    除了设计观的页面外Q最重要的是面l构要符合项目需要,q提供一定的使用体验Q有时候简单实用就是最好。如果可以对用户览器统一规范要求Q或是基本不会屏?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Javascript</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">Q数据格式的控制可以攑֜客户端用</span> <span lang="EN-US" style="FONT-FAMILY: Verdana">Javascript</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">实现?/span> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun"> </p> <p style="FONT-SIZE: 10pt; MARGIN: 0in"> <span lang="EN-US" style="FONT-FAMILY: Verdana">6.</span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">pȝ的部|Ӏ测试与发布?/span> </p> <img src ="//www.355548.live/flyingis/aggbug/37657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="//www.355548.live/flyingis/" target="_blank">Flyingis</a> 2006-03-27 17:50 <a href="//www.355548.live/flyingis/archive/2006/03/27/37657.html#Feedback" target="_blank" style="text - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2006/03/25/37345.htmlFlyingisFlyingisSat, 25 Mar 2006 07:28:00 GMT//www.355548.live/flyingis/archive/2006/03/25/37345.html//www.355548.live/flyingis/comments/37345.html//www.355548.live/flyingis/archive/2006/03/25/37345.html#Feedback0//www.355548.live/flyingis/comments/commentRss/37345.html//www.355548.live/flyingis/services/trackbacks/37345.html     作者: Flyingis

    和C/Sl构相比QB/Sl构受限于网l带宽不利于q行大数据量的统计分析,|络传输存在潜在的安全问题,q有用户界面不及C/Sl构友好{等Q但随着|络带宽和网l应用的发展Q加上AJAX技术的行Q得现在越来越多的MISpȝ或基于MISpȝ的专业化应用pȝ都开始們֐于采用B/Sl构q行设计Q充分利用B/Sl构的优炏V但是,要充分发挥Web应用的内在潜力,挖掘应用深度和扩大适应能力Q需要采用先q的应用架构和以实用为根本准则,使得pȝ既能满业务需求,又能适应来发展需要。因此,在开发Web应用pȝ旉要尽量遵循Web应用pȝ设计原则?br />
    实用性原则:q是所有应用Y件最基本的原则,直接衡量pȝ的成败,每一个提交到用户手中的系l都应该是实用的Q能解决用户的实际问题,否则该设计就是垃圾?br />
    适应性和可扩展性原则:pȝ需要具备一定的适应能力Q特别是Web应用要能适应于多U运行环境,来应Ҏ来变化的环境和需求。可扩展性主要体现在pȝ易于扩展Q例如可以采用分布式设计、系l结构模块化设计Q系l架构可以根据网l环境和用户的访问量而适时调整Q从某种E度上说Q这也是pȝ的适应性?br />
    可靠性原则:pȝ应该是可靠的Q在出现异常的时候应该有人性化的异怿息方便用L解原因,或采取适当的应Ҏ案,在设计业务量比较大的时候可采用先进的嵌入式技术来保证业务的流畅运行?br />
    可维护性和可管理性原则:Webpȝ应该有一个完善的理机制Q而可l护性和可管理性是重要的两个指标?br />
    安全性原则:现在的计机病毒几乎都来自于|络QWeb应用应尽量采用五层安全体p,即网l层安全、系l安全、用户安全、用L序的安全和数据安全。系l必d备高可靠性,对用信息进行严格的权限理Q技术上Q应采用严格的安全与保密措施Q保证系l的可靠性、保密性和数据一致性等?br />
    M规划、分层实施原则:在开始设计之前应该对Webpȝq行M设计Q然后在M设计指导下分步开发。基于J2EE技术的应用pȝ是一个融合了多元信息的集成系l,现在一般都采用分层开发:表现层、控制层、业务逻辑层、模型层、数据访问层{,在适应pȝ需求的准则下,设计低耦合的分层结构,利于团队成员的分工协作,提高开发效率,降低目风险Q实现各个模块的功能设计Q完成整个系l的开发?/font>


Flyingis 2006-03-25 15:28 发表评论
]]>
重温Struts--ActionForm - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2006/03/18/35995.htmlFlyingisFlyingisSat, 18 Mar 2006 14:40:00 GMT//www.355548.live/flyingis/archive/2006/03/18/35995.html//www.355548.live/flyingis/comments/35995.html//www.355548.live/flyingis/archive/2006/03/18/35995.html#Feedback0//www.355548.live/flyingis/comments/commentRss/35995.html//www.355548.live/flyingis/services/trackbacks/35995.html 作者:Flyingis

ActionForm ?span lang="EN-US">Struts设计中比较有争议的一个概念,在某些情况下也许不会使用?span lang="EN-US">ActionFormQ具体可以参?span lang="EN-US" style="COLOR: navy">《Struts Action的多U角?/span>?/span>一文。尽如此,ActionForm在许多应用的开发中都实C重要的功能,它是Struts框架提供?span lang="EN-US">DTOQ用于在视图层和控制层之间传?span lang="EN-US">HTML表单数据Q控制层可以?span lang="EN-US">ActionForm Bean中读取用戯入的表单数据Q也可以把来自模型层的数据存攑ֈActionForm Bean中,q回l视图,即用它的主要目的是字段采集、类型{换器、以及传输对象等。对?span lang="EN-US">ActionForm Bean?span lang="EN-US">MVC中所处层ơ结构的理解Q可以参?span lang="EN-US" style="COLOR: navy">《剖析MVC中的各种Object?/span>?span lang="EN-US">

ActionForm 的基本功?span lang="EN-US">

1. 字段采集

?span lang="EN-US">Web应用E序开发过E中Q数据的采集是最基本的一个环节,?span lang="EN-US">html定义的数据输入控件和http定义的数据传输协议非常简单,因此?span lang="EN-US">Struts中设计了ActionForm来I补这U不?span lang="EN-US">Struts?span lang="EN-US">http参数处理的方法是输入参C递到JavaBean属性来q行处理Q当ActionForm的属性与某个h参数匚wQ框架自动以参数的D|属性?span lang="EN-US">

2. 数据校验?span lang="EN-US">

Html 没有在数据提交之前对数据q行校验的能力,使用javascript可以做到q些Q优点在于可以减L务器负担Q但javascriptl常会被览器禁止,因此Q在Struts?span lang="EN-US">ActionForm实现了部分数据校验的功能Q当输入数据不符合要求时Q页面将被返回到数据数据面Q要求用户重新输入。一般情况下Q?span lang="EN-US">ActionForm属性定义ؓStringcdQ以便对各种输入q行捕获。另外,q可以用ActionForm?span lang="EN-US">Action对输入数据进行双重校验,ActionForm校验数据cd是否正确Q?span lang="EN-US">Action校验该数据是否满业务层的其他要求?span lang="EN-US">

3. cd转换

HTML 表单中的数据cd一般是String?span lang="EN-US">booleancdQ通过?span lang="EN-US">ActionForm Bean中实?span lang="EN-US">HelperҎQ可以实现属性类型的转换?span lang="EN-US">

4. 传输对象

ActionForm 可以作ؓ其他Bean的数据蝲体,它装载的数据通常对应着持久层中的不止一个实体?span lang="EN-US">



Flyingis 2006-03-18 22:40 发表评论
]]>
剖析MVC中的各种Object - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2006/03/17/35752.htmlFlyingisFlyingisThu, 16 Mar 2006 16:28:00 GMT//www.355548.live/flyingis/archive/2006/03/17/35752.html//www.355548.live/flyingis/comments/35752.html//www.355548.live/flyingis/archive/2006/03/17/35752.html#Feedback0//www.355548.live/flyingis/comments/commentRss/35752.html//www.355548.live/flyingis/services/trackbacks/35752.html     作者: Flyingis

    在Web应用和J2EE框架中经常可以碰到各UObject相关的名词,在网上搜索了一下,讨论各种Object术语的帖子一大筐Q大的讨论整个框Ӟ的描述各个层次之间的细微差别,甚至有钻牛角之嫌?/font> BlogJava 上也有讨论VO和PO的脓子,例如 非飞 ?/font> 《各层共享用PO的代仗?/font> {。其实无论怎么讨论Q这些术语、分层结构、应用框架无非都是ؓ我们的应用而服务的Q因此,我们需要的是理解这些术语提出的意义Q是理解我们的项目需求,是理解我们采用的框架l构能否最大限度的满目的需要?br />
    在刚刚学习MVC/Model2之前Q我是不了解VO/TO/PO/DTO/BO{等q些术语的含义的Q至理解上只是停留在浅层面Q现在多看了一些,做了一炚w目,多了些想法,但肯定还是存在理解上的偏差或误解Q欢q大家讨论指出!

    VO: 通常指ValueObject或ViewObject。ViewObject指的是UI需要的对象QStruts的FormBean是其中的一U,它是Value Object和Transfer Object的ȝ?br />
    TO: Transfer ObjectQ它和Value Object的区别可以参考Patterns of Enterprise Application Architecture?br />
    PO: Persistent ObjectQ即可以被持久化的实体对象?br />
   
POJO : Plain Ordinary Java Object?br />
    DTO: Data Transfer ObjectQJ2EE 中常用的一U设计模式,现在一般可以将使用Value Object的模式称为DTO模式Q在
Jdon 上一?a target="_blank">《ValueObject和DTO模式的一些疑问?/font> 阐述了两者的关系?br />
    BO: Business ObjectQ可以分ZU情况,只包含业务对象的属性,或只包含业务ҎQ或两者都包含。对于BO的详l讨论,可以
参见q里 ?br />
    q些概念l常交错在一h出,l初学者造成了一些理解上的困难,其实只需要理Z面几点,基本上就能弄清楚层次之前的前后关pd如何合理使用q些对象?br />
    1. VO能否和PO相同。首先回{是肯定的,VO是概忉|型的一U抽象反映,当一个业务实体可以用一个物理实体表C的时候,VO和PO属性相同,那么它们是相{的。例如学生成l管理系l中Q成l表单业务实体中包含学生信息、课E信息、成l等Q此时它已经不能用一个物理实体所能描qͼ而其中的学生信息Q其VO和PO在属性上是一LQ此时的VO和PO相同?br />
    2. PO能否代替VO。仅仅从功能实现上来_当VO和PO相同的时候,PO可以代替VOQ这样可以减一些代码量Q但需要注意的是,q样会带来一些问题:当一个业务实体需要多个物理实体来表达的时候,在客L昄一个业务实体就会多ơ访问数据库Q即q行多次单表讉KQ非视图Q当一个业务实体属性远于一个物理实体的时候,可能会因装蝲q多不必要的数据而媄响网l传输;对物理实体进行改动的时候会直接影响到表现层。简单的_q样做增加了代码的耦合性,也增加了代码l护的难度,目的可扩展性也大大降低Q如果仅仅是Z减少代码量而付些代显然是不值的Q当然极为简单的应用可以考虑Q一切从目实际出发?br />
    3. VO包含的属性可以多于PO、少于PO、或{于PO中的属性?br />
    4. 一个基于Struts应用的简单数据提交流E?VO和PO单独存在)QHTML 面中包含了基本的信息,例如文本框、下拉框、单选等Q构Z个ActionForm Bean与之一一对应Q它是Web层数据的表示Q当Web面的操作流E发生改变的时候,需要对它进行修改,但不能将修改传递到业务层和持久层。然后ActiondActionForm Bean的属性,构造PO对象Q调用BO Q当BO收到q个PO之后Q调用DAO接口ҎQ对POq行持久化操作,完成数据的提交。这里,PO在业务层和持久层之间Q没有被传递到Web层的View中去?br />
    5. 一个基于Struts应用的简单数据查询流E?VO和PO单独存在)QActiondActionForm Bean中的查询属性信息,然后调用BOQBO获取ActionForm Bean之后调用DAO接口q行查询Q返回所要查询的PO对象Q交lActionQAction通过该PO构徏 ActionForm BeanQ通过request.setAttribute()或session.setAttribute()Q重定向到查询结果页面输出需要的信息?br />
    6. 表现层中的字D一般定义ؓString或booleancdQ因此VO中的属性在传到Actionq构建PO对象旉要进行数据类型的转换Q或由ActionForm的helperҎ来进行{换?br />
    参考文章和贴子Q?br />   
//www.jdon.com/jive/article.jsp?forum=91&thread=23672
    //www.jdon.com/jive/article.jsp?forum=91&thread=21571
    //www.hibernate.org.cn/viewtopic.php?t=627&postdays=0&postorder=asc&start=0
   
//bbs.hidotnet.com/704/ShowPost.aspx
    //lifework.cnblogs.com/archive/2005/09/03/229596.html
    //www.microsoft.com/china/MSDN/library/architecture/patterns/esp/DesDTO.mspx  



Flyingis 2006-03-17 00:28 发表评论
]]>
重温Struts--标签 - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2006/03/12/34893.htmlFlyingisFlyingisSun, 12 Mar 2006 01:23:00 GMT//www.355548.live/flyingis/archive/2006/03/12/34893.html//www.355548.live/flyingis/comments/34893.html//www.355548.live/flyingis/archive/2006/03/12/34893.html#Feedback0//www.355548.live/flyingis/comments/commentRss/34893.html//www.355548.live/flyingis/services/trackbacks/34893.html作者:Flyingis

Struts标签提供了大部分应用来满_?/SPAN>MVC架构表现面的所有功能。在一?/SPAN>MVC应用中,hq不是直接到达表现页面,而是首先l过控制器,仅当业务数据被获取,q且业务规则被应用后Q控制器才处理表现页面。页面的职责是输出l果和捕L戯入,Struts标签的功能目的就在于此?/SPAN>

虽说Struts标签库能满我们大多数情况下的需要,但不是唯一可用的标{,例如JSTL标签?/SPAN>DisplayTag{等?/SPAN>Struts标签和其他各U标{基本使用Ҏ在各U书本上都有介绍Q这里ȝ一下标{用中的个Z会,q不断更新?/SPAN>

1.        Struts中包含三个标{ֺQ?/SPAN>Bean?/SPAN>HTML?/SPAN>LogicQ其?/SPAN>HTML标签库依赖于框架Q其他大部分标签不依赖于框架Q可以在其他应用中用?/SPAN>

2.        Struts HTML标签和一?/SPAN>HTML标签h一定的对应关系Q但也存在一点不同。?/SPAN>Scriptlet?/SPAN>HTML标签需要在使用前在面中将Form Bean声明Z个脚本变量,Struts标签则不需要声明就能找到该Bean。在默认情况下,Struts标签对剩下的表单用同一?/SPAN>BeanQ所以不需要对每一个控仉q行指定。例如:
<input type=“text?name=“username?value=?lt;%=user.getUsername()%>?>
使用Struts HTML标签
<html:text property=“username?gt;

3.        Struts HTML标签和一?/SPAN>HTML标签h一定的对应关系Q但存在几个特例Q在Struts HTML标签中,Messages / errors / rewrite分别用来表示昄一l消息、显CZl错误消息、输Z个编码的URL路径Q而这些在一?/SPAN>HTML标签中就不存在?/SPAN>

4.        HTML有时需要处理特D的字符Q包括标{括号?/SPAN>&W号以及其他的内容,如果q些字符作ؓ文本字段的一部分Q可能会出现错误q成HTML崩溃。如果确实需要在数据中存储这些字W,可以在网中q行讄Q得这些字W不被页面过滤成为特D字W,例如Q?/SPAN>
<bean:write name=“UserForm?property=“username?filter=“false?>

5.        使用<html:password>Ӟ如果面校验错误Q?/SPAN>password属性将?/SPAN>Form Bean中读回,q放|在password标签中。虽然密码会被浏览器用符号隐藏,但在HTML源代码中仍然可以看到Q存在安全上的隐患,因此可以在标{中加入redisplay=false来保?/SPAN>passwordL以空白状态显C给用户?/SPAN>

6.        提供一?/SPAN>Javascript的返回按钮,可以定义一个没有属性的单表单,Struts配置文gQ?/SPAN>
<action path=?adduser?BR>      type=“org.apache.struts.ForwardAction?BR>      name=“BlankForm?BR>      scope=“request?BR>      validate=“false?BR>      parameter=?user.do?gt;
JSP
面Q?/SPAN>
<html:form action=?adduser?gt;
<html:button property=“page?onClick=“history.go(-1)?gt;here</html:button>
</html:form>



Flyingis 2006-03-12 09:23 发表评论
]]>
重温Struts--Validator和Tiles - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2006/03/08/34272.htmlFlyingisFlyingisWed, 08 Mar 2006 06:52:00 GMT//www.355548.live/flyingis/archive/2006/03/08/34272.html//www.355548.live/flyingis/comments/34272.html//www.355548.live/flyingis/archive/2006/03/08/34272.html#Feedback2//www.355548.live/flyingis/comments/commentRss/34272.html//www.355548.live/flyingis/services/trackbacks/34272.html作者:Flyingis

今天要回儡?/SPAN>Validator?/SPAN>Tiles以及单的Plugin实现Q刚刚登?/SPAN>blogjava发?/SPAN>Mustang已经发了两篇好文《在Struts中?/SPAN>Validator实现可配|的信息校验() (?/SPAN>)》,本文则从实现程来ȝValidator的用方法,q?/SPAN>Validator?/SPAN>Tiles{?/SPAN>Struts PlugIn插g略谈一些个人心得?/SPAN>

Validator

在?/SPAN>ActionFormӞ数据的验证工作攑֜validator()Ҏ中虽说是一个可行的ҎQ但?/SPAN>ActionForm中编写特定的验证逻辑会降?/SPAN>ActionForm的重用性,q给pȝ的维护带来麻烦?/SPAN>Validator框架可以验证逻辑U至ActionForm之外Q实?/SPAN>Javascript客户端验证或服务器段验证。具体实?/SPAN>Validator验证步骤如下Q?/SPAN>

1.        Validator是以plugin的方式来扩充ActionServlet功能的,需要在Struts-config.xml中声明这?/SPAN>plugin?/SPAN>

2.        导入Validator中的资源信息Q用来向用户提示验证中出现的异常消息?/SPAN>Validator可以支持国际化信息,为每一个国际化信息提供对应的资源信息?/SPAN>

3.        利用validaton.xml文g来定义用户需要验证的每一?/SPAN>JSP表单中的每一个字D늚验证规则Q其中可以利?/SPAN>validator-rules.xml中已l设计好了的验证器,也可以自定义验证方式?/SPAN>

4.        客户端验证需?/SPAN>validator-rules.xml中已提供的验证规则,或是自定义规则,然后?/SPAN>jsp面中声?/SPAN><html:form action=?action.do?onsubmit=“return validateActionForm(this);?gt;Q加上可以生成实现验证的Javascript代码<html:javascript formName=?I style="mso-bidi-font-style: normal">ActionForm?staticJavascript=“true?>。服务器端验证同样需?/SPAN>validator-rules.xml中已提供的验证规则,或是自定义规则,另外Q实现验证的ActionForm需要是DynaActionForm的子c,和客L验证不同的是Q在捕获服务器端错误消息Ӟjsp面中需要嵌入代?/SPAN>

<html:messages id=“error?gt;

  <bean:write name=“error?>

</html:messages>

在配|和设计Webpȝ验证功能的时候,需要注意的是要理解?/SPAN>validaton.xml中定义验证规则的时候每个参数的具体功能Q我最初?/SPAN>Validator的时候就因ؓ参数h而验证失败,费了一Ҏ间。还有就是自定义验证规则Ӟ需要注意每个参数的具体含义Q例如在某种情况下,validaton.xml?/SPAN><var-name>myproperty</var-name>中自定义的属?/SPAN>myproperty需要和自己~写的验证器cM的代码一致等{?/SPAN>

Tiles

Tiles是一个模板机Ӟ它可以让|页的配|框架和内容分离Q提供一个版面管理机制。通常有两U方式管?/SPAN>Tiles配置资源Q一U?/SPAN>XMLQ另一U?/SPAN>JSP面直接理?/SPAN>

使用XML配置?/SPAN>Tiles可以支持国际化,例如可以另存?/SPAN>tiles-defs.xmlq命名ؓtiles-defs_zh.xmlQ将encoding改ؓGB2312Q这样可以在配置中用中文。?/SPAN>XML配置文g可以方便的实现版面配|和内容的分,q且能扩充某个定义,辑ֈ重新定义其中所理面资源的目的。?/SPAN>JSP面直接定义理版面的配|资源更为简单和灉|Q同样可以和xml一样重新定义网늚地址。不使用JSP框架面而是直接?/SPAN>JSP面中用配|页面,可以不用额外d义管理文Ӟ但缺Ҏ无法重用q个面定义的内宏V?/SPAN>

?/SPAN>Tiles?/SPAN>CSSl合hQ基本上能满一般页面控制的需要?/SPAN>

PlugIn插g

通过l承ActionSerlvetQ重写它?/SPAN>init()ҎQ修Ҏ增减它的初始化资源来辑ֈ改变ActionServlet功能的方法,q从软g架构角度上来讲ƈ不是一个好Ҏ?/SPAN>Struts1.1之后Q可以通过PlugIn接口来实现动态增?/SPAN>ActionServlet功能的目的?/SPAN>ActionServlet加蝲后,会执行实?/SPAN>PlugIn接口的类?/SPAN>init()ҎQ在ActionServletl止前,执行实现PlugIn接口的类?/SPAN>destroy()Ҏ?/SPAN>Validator?/SPAN>Tiles是利用q种方式来扩?/SPAN>Struts功能的?/SPAN>

写到q里Q感觉用好Validator?/SPAN>Tiles{?/SPAN>PlugIn插g最重要的就是对配置元素的理解,和程序调用流E的掌握Q了解到Struts的插件机制是如何q{的,以此来扩?/SPAN>Web应用E序的功能,提供更好的用户体验?/SPAN>



Flyingis 2006-03-08 14:52 发表评论
]]>
重温Struts--Action - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2006/03/06/33778.htmlFlyingisFlyingisSun, 05 Mar 2006 16:07:00 GMT//www.355548.live/flyingis/archive/2006/03/06/33778.html//www.355548.live/flyingis/comments/33778.html//www.355548.live/flyingis/archive/2006/03/06/33778.html#Feedback0//www.355548.live/flyingis/comments/commentRss/33778.html//www.355548.live/flyingis/services/trackbacks/33778.html作者:Flyingis

?/SPAN>Struts中,ActionServlet担Q分配工作的控制器角色Q实际的工作是交l?/SPAN>Action对象来进行的?/SPAN>Action?/SPAN>Struts框架的核心类之一Q它主要用来讉K业务层、ؓ表现层准备数据对象和处理错误异常?/SPAN>

Action?/SPAN>Struts框架中基本上属于控制器的角色Q通常不徏议在Action中加入过多的业务逻辑Q将业务逻辑装在其他的cMQ然后在Action中徏立这些类的对象,调用对象的方法来实现业务功能。比较遗憄是,当业务逻辑中出现异常的时候没有办法将异常说明在页面中直接反应出来Q展现给用户Q在Action中控制这些异常可以做到这炏V?/SPAN>

要更详细的了?/SPAN>Action的工作机理,p剖析ActionServlet控制器的工作程及其核心Ҏ。在Struts中,担Q控制器角色的核心?/SPAN>ActionServletQ所有的h都必d通过它,而对所有请求的处理是交付给RequestProcessor来完成的Q既然处理请求的d是交l?/SPAN>RequestProcessor来完成,那么可以直接查看org.apche.struts.action.RequestProcessorc,看其process()Ҏ实现了哪些功能,从源代码中的英文注释我们可以更深入了解到整个处理q程Q很多书c和|上不少文章都描qCq个q程Q还有典型的处理q程囄Q这里就不再详述。只是从q个q程可以看出Q通过l承ActionServlet来定义自q控制器请求意义不大,重写init()Ҏ倒是可以修改初始化工作,如果需要定义自q控制器,可以l承RequestProcessorq修改其中的process()Ҏ来实现?/SPAN>

?/SPAN>Struts应用中,除了直接l承org.apache.struts.action.Actioncd?/SPAN>Action功能外,Strutsq提供了其他几种ActioncL满某种特定需要,q些书本上已l写了很多,q里只是照葫芦画瓢略作ȝQ?/SPAN>

ForwardAction?/SPAN>当需要从一个页面{到另一个页面或资源Ӟ不提倡直接用页面或资源路径调用Q除了与MVC/Model2架构向背之外Q有时还会带来其他的问题Q前几天在网上看C个帖子就是因为直接调用资源出C异常Q具体出自于哪里没有C。这里,应该通过控制器?/SPAN>ForwardAction来完成链接的跌{Q用属?/SPAN>parameter讑֮forward的链接地址?/SPAN>

IncludeAction?/SPAN>?/SPAN>ForwardActioncMQ当需要引入一个资源时Q可以?/SPAN>IncludeAction来实玎ͼ属?/SPAN>parameter讑֮include的链接地址?/SPAN>

SwitchAction?/SPAN>用于从一个模块{换至另一个模块,一U方法是使用相对?/SPAN>Context的\径来q行forward查找Q另外一U就是?/SPAN>SwithActionQ它需要在h中带两个参数Q一个是prefix用来指定模块前缀名称Q一个是page用来指定相对于模块的资源路径?/SPAN>

DispatchAction?/SPAN>随着Struts Web应用规模扩大Q维?/SPAN>Action复杂度提高,可以使用模块化来理Action。另一斚wQ当一个页面需要多?/SPAN>ActionӞ我们可以?/SPAN>DispatchAction来将一个页面中所有相关的动作攑֜一?/SPAN>actioncM实现Q此时不需要重定义execute()ҎQ它已经?/SPAN>DispatchAction抽象cM定义Q我们需要编写自qҎ来响应一个页面上不同的动作。它的关键属性是parameter?/SPAN>

LookupDispatchAction?/SPAN>它是DispatchAction的子c,不同的是Q当面按钮?/SPAN>property属性相同的时候,它可以通过查询资源文g来确定相应的动作Q这个功能主要是通过重写getKeyMethodMap()Ҏ实现的?/SPAN>



Flyingis 2006-03-06 00:07 发表评论
]]>
重温Struts--ActionMapping和ActionForward - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2006/03/05/33667.htmlFlyingisFlyingisSun, 05 Mar 2006 02:40:00 GMT//www.355548.live/flyingis/archive/2006/03/05/33667.html//www.355548.live/flyingis/comments/33667.html//www.355548.live/flyingis/archive/2006/03/05/33667.html#Feedback0//www.355548.live/flyingis/comments/commentRss/33667.html//www.355548.live/flyingis/services/trackbacks/33667.html作者:Flyingis

前段旉?SPAN lang=EN-US>Struts完成一个小目Q当时还没有来到blogjavaQ很多东西也没有记录。现在花一Ҏ_整?SPAN lang=EN-US>Struts应用重新温习一遍,重新挖掘目开发过E中没有注意到的知识点,q写下自q一些心得与体会?SPAN lang=EN-US>

ActionMapping

ActionMappingStruts应用中有效的业务逻辑q行分类Q当一个请求到达时Q?/SPAN>ActionSevlet?/SPAN>ActionMapping目录中查扑֯应的信息?/SPAN>ActionMapping?/SPAN>Struts应用的一个核心设计,当需要了解一?/SPAN>Struts应用Q或~写一个新?/SPAN>Struts应用的时候,都应该从ActionMapping入手?/SPAN>ActionMapping有较多的属性信息,具体参考相x??/SPAN>

ActionForward

ActionForward?/SPAN>Struts的核心类之一Q其基类仅有4个属性:name / path / redirect / classname。在ZStruts?/SPAN>Web应用E序开发过E中Q?/SPAN>Action操作完毕后程序会通过Struts的配|文?/SPAN>struts-config.xml链接到指定的ActionForwardQ传?/SPAN>Struts的核心类ActionServletQ?/SPAN>ActionServlet使用ActionForward提供的\径,控制传递给下一个步骤?/SPAN>ActionForward控制接下来程序的走向?/SPAN>ActionForward代表一个应用的URIQ它包括路径和参敎ͼ例如Q?/SPAN>

path=?modify.do?method=edit&id=10?/st1:chmetcnv>

ActionForward的参数除了在struts-config.xml和页面中讄外,q可以通过?/SPAN>ActioncMd参数Q或重新?/SPAN>Action中创Z?/SPAN>ActionForward?/SPAN>

?/SPAN>ActionForward中有一个重要的属?/SPAN>redirectQ当redirect=falseӞ保存存储在httph和请求上下文中的所有内容,仅在同一个应用中可用。当redirect=trueӞWeb客户端进行一ơ新?/SPAN>httphQ请求的资源可以在同一个应用中Q也可以不在Q原来的h参数不再保存Q原来的h上下文也被清除,新的httph仅包?/SPAN>ActionForward?/SPAN>path属性里所包含的参数。如果在同一个应用中Q用户会话的上下文会被维护?/SPAN>

ActionForward分ؓ全局转发和局部{发,Action?/SPAN>Mapping对象?/SPAN>findForwardҎ首先会检查局部{发列表,查找p|׃到全局转发列表中查找。书写格式中Q我们一般将全局变量定义?/SPAN>String常数Q避免误解,使得转发列表l构清晰易读?/SPAN>

在项目开发过E中l常到一U情况,当页面已l改变了Q浏览器中的地址?/SPAN>/modify.do?/SPAN>/modify.jsp却没有变化,当时没有考虑q么l,虽然存在疑问Q但没有影响到程序功能的实现Q因此忽略过MQ今天查找了一些资料才弄清楚。客L览器显C的是浏览器最后被l定?/SPAN>URLQ当URL被提交后Q在某个lgq回一个响应给览器之前,Web应用可能已经转发h多次Q而这些过E都发生在服务器端,客户端浏览器q不知道有什么变化。当一?/SPAN>http响应被返回时Q它q没有包含地址栏的|所以浏览器仅仅昄其用来作为初始请求的地址。通过使用redirect可以改变览器地址的显C,因ؓq样可以向浏览器提交一个新的请求,但付出的代h是数据不能通过h上下文传递到面Q这也是使用forward?/SPAN>redirect的差异之一?/SPAN>



Flyingis 2006-03-05 10:40 发表评论
]]>
Struts Action的多U角?/title><link>//www.355548.live/flyingis/archive/2005/11/18/20458.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Fri, 18 Nov 2005 09:10:00 GMT</pubDate><guid>//www.355548.live/flyingis/archive/2005/11/18/20458.html</guid><wfw:comment>//www.355548.live/flyingis/comments/20458.html</wfw:comment><comments>//www.355548.live/flyingis/archive/2005/11/18/20458.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>//www.355548.live/flyingis/comments/commentRss/20458.html</wfw:commentRss><trackback:ping>//www.355548.live/flyingis/services/trackbacks/20458.html</trackback:ping><description><![CDATA[<FONT size=2>    作者:<A HREF="/flyingis/"><FONT color=#000080>Flyingis</FONT></A><BR><BR>    ActioncL用户h和业务逻辑之间的桥梁。每个Action充当用户的一业务代理。在RequestProcessorc预处理hӞ在创ZAction的实例后Q就调用自n的processActionPerform()ҎQ该Ҏ再调用Actioncȝexecute()Ҏ。Action的execute()Ҏ调用模型的业务方法,完成用户h的业务逻辑Q然后根据执行结果把h转发l其他合适的Weblg。在实际的应用中Q主要有以下几种比较常见的用方法:<BR><BR>1.普通的Action应用<BR><BR><action path="/normalAction"<BR>type="package.OneActionClass"><BR>name="oneForm"<BR>input="page.jsp"<BR><forward name="success" path="success.jsp"/><BR><forward name="failure" path="failure.jsp"/><BR></action><BR><BR>    Struts的ActionServlet接收C个请求,然后Ҏstruts-config.xml的配|定位到相应的mappingQ映)Q接下来如果form的范围是request或者在定义的范围中找不到这个formQ创Z个新的form实例Q如果找到则重用Q取得form实例以后Q调用其reset()ҎQ然后将表单中的参数攑օformQ如果validate属性不为falseQ调用validate()ҎQ如果validate()q回非空的ActionErrorsQ将会被转到input属性指定的URIQ如果返回空的ActionErrorsQ那么执行Action的execute()ҎQ根据返回的ActionForward定目标URI。即execute()仅当validate()成功以后才执行;input属性指定的是一个URI?BR><BR><BR>2.有Form的Action应用<BR><BR><action path="/formAction"<BR>type="org.apache.struts.actions.ForwardAction"<BR>name="oneForm"<BR>input="page.jsp"<BR>parameter="another.jsp"<BR>/><BR><BR>    Struts会在定义的scope搜寻oneFormQ如果找到则重用Q如果找不到则新Z个实例;取得form实例以后Q调用其reset()ҎQ然后将表单中的参数攑օformQ如果validate属性不为falseQ调用validate()ҎQ如果validate()q回非空的ActionErrorsQ将会被转到input属性指定的URIQ如果返回空的ActionErrorsQ那么{到parameter属性指定的目标URI?BR><BR>    q种Ҏ使得没有actioncd以存放我们的业务逻辑Q所以所有需要写入的逻辑都只能写到form的reset()或者validate()Ҏ中。validate()的作用是验证和访问业务层。因里的action映射不包括forwardQ所以不能重定向Q只能用默认的那个forward。这U仅有form的action可以用来处理数据获取qforward到另一个JSP来显C?BR><BR><BR>3.仅有Action的Action应用<BR><BR><action path="/actionAction"<BR>type="package.OneActionClass"><BR>input="page.jsp"<BR><forward name="success" path="success.jsp"/><BR><forward name="failure" path="failure.jsp"/><BR></action><BR><BR>    ActionServlet接收到请求后Q取得actioncd例,调用execute()ҎQ然后根据返回的ActionForward在配|中找forwardQforward到指定的URI或action。这样就没有form实例被传入execute()ҎQ于是execute()必须自己从请求中获取参数。Action可以被forward或者重定向。这Uaction不能处理通过HTML FORM提交的请求,只能处理链接式的h?BR><BR><BR>4.仅有JSP的Action应用<BR><BR><action path="/jspAction"<BR>type="org.apache.struts.actions.ForwardAction"<BR>parameter="another.jsp"<BR>/><BR><BR>    ActionServlet接到h后调用ForwardAction的execute()ҎQexecute()Ҏ配置的parameter属性值来forward到那个URI。这U情况下Q没有Q何form被实例化Q比较现实的情Ş可能是form在request更高U别的范围中定义Q或者这个action被用作在应用E序~译好后充当pȝ参数Q只需要更改这个配|文件而不需要重新编译系l?BR><BR><BR>5.两个Action对应一个Form(和第四种方式部分的Action作用相近)<BR><BR><action path="/oneAction"<BR>type="package.OneActionClass"><BR>name="oneForm"<BR>input="one.jsp"<BR><forward name="success" path="/anotherAction.do"/><BR></action><BR><action path="/anotherAction"<BR>type="package.AnotherActionClass"><BR>name="oneForm"<BR>input="another.jsp"<BR><forward name="success" path="success.jsp"/><BR></action><BR><BR>    q个l合模式可以被用来传递form对象Q就每个单独的action来讲Q处理上q没有和完整的action有什么实质的区别。需要注意的是在后一个action中同样会调用form的reset()和validate()ҎQ因此我们必ȝ保form中的信息不被重写。这U情况分两种方式处理Qa) 在request中放入一个指C器表明前一个action有意向后一个action传递formQ从而在后一个action可以保留那个form中的|q一方式只能在用forward时用。b) 当用redirect而不是forwardӞ可以把指C器攑֜session或更高的U别Q在命o铄最后一环将q个指示器清除?BR><BR><BR>6.两个Action对应两个form<BR><BR><action path="/oneAction"<BR>type="package.oneActionClass"><BR>name="oneForm"<BR>input="one.jsp"<BR><forward name="successful" path="/anotherAction.do" redirect="true"/><BR></action><BR><action path="/anotherAction"<BR>type="package.AnotherActionClass">"<BR>name="anotherForm"<BR>input="another.jsp"<BR><forward name="success" path="success.jsp"/><BR></action><BR><BR>    q个l合方式跟前一U在程上没有太大区别,只是我们现在对于两个action分别提供了formQ于是代码看上去更加清晰。于是我们可以分别处理WEB应用E序的输入和输出。值得注意的是Q后一个action同样会尝试往form中写入那些参敎ͼ不过我们可以q样处理Qa) 在后一个form中用另一套属性名Qb) 只提供getter而不提供setter?BR><BR>基本处理q程Q?BR>    前一个action接收输入、验证、然后将数据写入业务层或持久层,重定向到后一个actionQ后一个action手动的从业务?持久层取出数据,写入formQ通过其他方式Q,交给前台JSP昄。这样做的好处是不必保留输入form中的|因此可以使用redirect而不是forward。这样就降低了两个action之间的耦合度,同时也避免了不必要的重复提交?BR><BR><FONT color=#0000ff>注明</FONT>Q文中所提及的“仅有Form”指的是没有l承Struts提供的Actionc,而是直接使用了Struts自n提供的Actionc;“仅有Action”指的是仅承了Struts提供的Actionc而没有用Form?/FONT><img src ="//www.355548.live/flyingis/aggbug/20458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="//www.355548.live/flyingis/" target="_blank">Flyingis</a> 2005-11-18 17:10 <a href="//www.355548.live/flyingis/archive/2005/11/18/20458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web开?005q_情理之中、预料之外[转蝲] - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2005/11/17/20313.htmlFlyingisFlyingisThu, 17 Nov 2005 13:49:00 GMT//www.355548.live/flyingis/archive/2005/11/17/20313.html//www.355548.live/flyingis/comments/20313.html//www.355548.live/flyingis/archive/2005/11/17/20313.html#Feedback0//www.355548.live/flyingis/comments/commentRss/20313.html//www.355548.live/flyingis/services/trackbacks/20313.html (文章转自CSDN)

Web开发领域的2005q_一斚wASP.NET 2.0、PHP 5.1预期发布Q另一斚wPerl 6“已l开始看h像个没有l束的项目了”,此外QAjax和Ruby On Rails(URoR)的火爆让人嫉妒,q些现象的背后正是Web开发的理念悄然发生了变化?/font>

  Web标准日渐行

  当Jeffrey Zeldman?003q出版《Designing With Web Standards》的时候,CSS已经被主浏览器支持?q之久。Web标准其实分三斚w:l构化标准语a主要包括XHTML和XMLQ表现标准语a主要包括CSSQ行为标准主要包括对象模?如W3C DOM)、ECMAScript{。他的的主要好处在于~小了页面大、布局更加随意、也有利于页面和代码的分,正是q些好处让微软MSN、网易、阿里巴巴和CSDN{网站在2005q陆l按照Web标准q行了重构?/font>

  Ajax:用户体验型的富客L技?/strong>

  用过微YLive服务的用户都为网l程序能随意拖动和放|页面栏目、无h更新|页数据、渐变的颜色处理感到吃惊Q这些“酷”的技术被冠名为AjaxQ这Ҏ术最早由Google应用在GoogleMap和GoogleMail中,其实Ajaxq不奇Q原理是通过调用XmlHttpRequest实现与服务器的异步通讯Qƈ使用对应q_的XmlDom对返回的Xml消息q行处理Q然后再通过DOM寚w面中的HTML元素的操作实C富的、友好的用户界面。这和当初微软推q的Remote Scripting几乎如出一辙。不q,和当初不同的事,q项技术得C_的重视,相关开发包源源不断Q成?005最具亮丽的一道风景线Q微软也耐不住寂寞,卛_推出Atlas是用来帮助开发者更Ҏ地构建Ajax站点。Ajax的风行说明用户对于丰富的Web体验的需求日益增长,q种势不可逆{?/font>

  RoR预示d开发框架的行

  RoR是基于Ruby语言的轻型Web开发框Ӟ不仅开发效率高(部vҎ)、功能丰?支持Ajax{流行应? Q不可思议的是Q他的性能比基于Struts和Hibernate的Java应用q高15%-30%。目前,其他语言也已l有cM的框Ӟ如基于Python的Django、PHP的Cake、ASP.NET的Castle{等。Web应用特点是需求变化非常快QRails提倡的“约定强于配|”的理念正好q合了这U发展潮。不q,使用RoR的大型网站还不多见,是否l得赯验Q还?006q?/font>

  Web开发的2005q_我们q应当关注的是:

  ASP.NET 2.0随NET Framework 2.0发布

  每个ASP.NETE序员需要关注的产品。虽然不是一个革命性的升Q很多新Ҏ还是够让开发者心动。有?.0Q谁q愿意?.x?微Y的品L让h对他产生依赖?/font>

  Jdon Framework

  q个由国人彭晨阳开发的中小型J2EE应用pȝ的快速开发框架已l发布了1.3版本Q和RoRcMQJdon框架? Action的CRUD功能实现是由配置文g实现的,一般情况下无需~码。支持日本的RubyQ不如支持中国的JdonQ你们觉得呢?



Flyingis 2005-11-17 21:49 发表评论
]]>
JSF VS Tapestry 全面比较 - 棒球比分大小怎么算|վ//www.355548.live/flyingis/archive/2005/11/09/18962.htmlFlyingisFlyingisWed, 09 Nov 2005 05:08:00 GMT//www.355548.live/flyingis/archive/2005/11/09/18962.html//www.355548.live/flyingis/comments/18962.html//www.355548.live/flyingis/archive/2005/11/09/18962.html#Feedback0//www.355548.live/flyingis/comments/commentRss/18962.html//www.355548.live/flyingis/services/trackbacks/18962.html    作者:Flyingis

    Java不像微Y拥有Visual Studio 2005Q各个开发组件无~整合,提供高效的开发与部v环境。开发环境、插件和工具的多样化Q给Java开发者带来了一些麻烦,但是却换来了极大的灵zL和选择的空间。Eclipse已经逐渐成ؓ业界首选的开发环境,lBorland{公司带来不的冲击Q得老牌的Java IDE公司的市Z额逐渐丢失Q而在应用服务器、对象关pL据中间g、报表中间g、Web开发框架等领域仍然是热闚w凡,选择众多?br />
    Java Web开发框架主要有Struts/JSF/Tapestry/WebWork/Spring{,它们都非怼UQ有自己的优点与不Q对于我们开发者而言Q只选对的,适合目需求的才是最重要的。这里有一文章介l了JSF和Tapestry之间的相g处与不同点,可以让我们更好的认识到它们之中哪U框架更适合你?br />
JSF VS Tapestry 全面比较(一)
JSF VS Tapestry 全面比较(?
JSF VS Tapestry 全面比较(?


]]>
{ganrao}