- 浏览: 148867 次
- 性别:
- 来自: 北京
最新评论
-
cherishlive:
charlth.li@hotmail.com 同求 谢谢
通过jsp标签封装的列表组件 -
xiaoll880214:
您好!利用你贴的decodeQuotedPrintable方法 ...
实现MHT文件格式的解析和内容抽取 -
zhenrs:
可以把ApplicationContext贴出来不
JBPM与SPRING事务整合之深度历险 -
cllstudy:
您好,急需lucene对mht解析的parse,能发源代码给我 ...
实现MHT文件格式的解析和内容抽取 -
terryisme:
terryisme@126.com多谢.
通过jsp标签封装的列表组件
在基于SSH的架构中,基本的流程是这样的:
1、展现层通过struts收集数据
2、在action中调用服务层业务接口,实现业务逻辑处理
(这里说的是struts1)
在这样的过程中始终存在如下很鸡肋的问题:
-------------------------------------------------------------
1、struts action变得很贫血。
由于业务逻辑后置,用了action没有带来实实在在的好处,反而增加了交互的环节。典型的action使用mapping dispatch模式,每个action方法只有3行代码 :
/** * 获得权限树,转向权限树页面 */ public ActionForward getFunctionTree(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws StaffException { Collection tree = helper.getFunctionRootTree(); request.setAttribute("tree", tree); return mapping.findForward("tree"); }
public ActionForward getRoles(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws StaffException {
Collection roles = helper.getAllRoles();
request.setAttribute("roles", roles);
return (mapping.findForward("success"));
}
2、struts actionform也贫血,而且粒度很难把握
由于form中的属性往往和业务层的Model对象存在相似性,所以在form中定义model的引用是常见的办法:
import com.surekam.platform.staff.model.Department; import org.apache.struts.action.ActionForm; public class DeptForm extends ActionForm { /** * 部门信息 */ private Department department = new Department(); public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } }
如果这么做,form的价值在那里?? 唯一的必要性可能就是struts的表单标签要求必须有form,这不是很鸡肋吗?
另外实战中为了节省form的数量,往往会在多个操作中共享form类,结果是造成了form完全成了大杂烩,完全不可读!!
--------------------------------------------------------
那么从架构的角度来看,这很明显是一个共性的问题。望各位仁者见仁,将大家在实战中的经验共享一下,一起探讨解决方案。
我们的解决办法是对struts进行了一定得封装和扩展,有一个所谓的Nice Struts的组件来搞定这个问题。稍后会提供具体实现出来。
ENDING----------------------------------------------------------------------------------------------------------------------------------
帖子大家回了很多了,关于鸡肋的问题我想大家讨论就到此为止吧,呵呵!
本帖的目的是为了引起大家重视这个问题,即:对开源组件及其套装在实战中与我们所期望的“应用层架构”之间的不协调,并在架构实践中多加思考,只是用struts做个例子而非针对struts而来。
事实:鸡肋的其实不是struts,我们自己要检讨!
参见下一帖 鸡肋问题解决之道!欢迎大家接着仍鸡蛋!<iframe></iframe>
评论
辛苦了阿,看来也是对form深恶痛绝了阿!
本来是测试je文件上传的.忘记删除了.
ps:好像只有文件上传用下form
文件上传为什么一定要用form??可以不用
辛苦了阿,看来也是对form深恶痛绝了阿!
本来是测试je文件上传的.忘记删除了.
ps:好像只有文件上传用下form
struts2里面的action都有getter,setter方法,可以理解为半个Bean。
我觉的单论struts2还是有点实力和JSF一时瑜亮的,至于那个山寨JSF-tapestry我并不看好。
当然个人还是对ROR有崇拜之情。
betafox 写道抖出这个帖子的目的是为了让大家分析一下各种开源框架在应用中存在的实际问题,不要动辄就struts2吧,个人认为这是回避问题,不是靓号的治学态度,呵呵,各有各的问题,没有一个东西是没有缺陷的。如果有必要再开一贴:鸡肋的struts2 ??? 问题同样有一堆,呵呵,没必要啊
那你现在准备用哪一个?还是自己开发一个?
如果是自己开发的那个,说到底是想来个性化一下下。
欧美技术领域的一些技术已经成为行业标准,为什么中国人不好好守规则,还要别出心裁。
自己想证明中国人也能弄吗?
可以的确是可以。
但是就算做出来的,你以为别人会用吗?
呵呵,楼上激烈了,之前的帖子已经说过了,目的是讨论“欧美技术领域的一些技术已经成为行业标准的”的东西在具体应用中存在的水土不服问题,存在的标准化导致的细节兼顾不够的问题,是为了强调国人必须在标准的基础进行细节的修正从而定制更好的“应用层架构”,原则是站在巨人肩膀上更进一步,而不是重新发明车轮,对于这个初衷楼上可有疑义?
这语气和中国足协请洋教练时候的语气没什么区别。
betafox 写道抖出这个帖子的目的是为了让大家分析一下各种开源框架在应用中存在的实际问题,不要动辄就struts2吧,个人认为这是回避问题,不是靓号的治学态度,呵呵,各有各的问题,没有一个东西是没有缺陷的。如果有必要再开一贴:鸡肋的struts2 ??? 问题同样有一堆,呵呵,没必要啊
那你现在准备用哪一个?还是自己开发一个?
如果是自己开发的那个,说到底是想来个性化一下下。
欧美技术领域的一些技术已经成为行业标准,为什么中国人不好好守规则,还要别出心裁。
自己想证明中国人也能弄吗?
可以的确是可以。
但是就算做出来的,你以为别人会用吗?
呵呵,楼上激烈了,之前的帖子已经说过了,目的是讨论“欧美技术领域的一些技术已经成为行业标准的”的东西在具体应用中存在的水土不服问题,存在的标准化导致的细节兼顾不够的问题,是为了强调国人必须在标准的基础进行细节的修正从而定制更好的“应用层架构”,原则是站在巨人肩膀上更进一步,而不是重新发明车轮,对于这个初衷楼上可有疑义?
这语气和中国足协请洋教练时候的语气没什么区别。
betafox 写道抖出这个帖子的目的是为了让大家分析一下各种开源框架在应用中存在的实际问题,不要动辄就struts2吧,个人认为这是回避问题,不是靓号的治学态度,呵呵,各有各的问题,没有一个东西是没有缺陷的。如果有必要再开一贴:鸡肋的struts2 ??? 问题同样有一堆,呵呵,没必要啊
那你现在准备用哪一个?还是自己开发一个?
如果是自己开发的那个,说到底是想来个性化一下下。
欧美技术领域的一些技术已经成为行业标准,为什么中国人不好好守规则,还要别出心裁。
自己想证明中国人也能弄吗?
可以的确是可以。
但是就算做出来的,你以为别人会用吗?
呵呵,楼上激烈了,之前的帖子已经说过了,目的是讨论“欧美技术领域的一些技术已经成为行业标准的”的东西在具体应用中存在的水土不服问题,存在的标准化导致的细节兼顾不够的问题,是为了强调国人必须在标准的基础进行细节的修正从而定制更好的“应用层架构”,原则是站在巨人肩膀上更进一步,而不是重新发明车轮,对于这个初衷楼上可有疑义?
那你现在准备用哪一个?还是自己开发一个?
如果是自己开发的那个,说到底是想来个性化一下下。
欧美技术领域的一些技术已经成为行业标准,为什么中国人不好好守规则,还要别出心裁。
自己想证明中国人也能弄吗?
可以的确是可以。
但是就算做出来的,你以为别人会用吗?
在2中没这个问题吧,action属性的生命周期是一个request。
2也没有actionform这东西吧
struts1的form每次都new,没有线程问题。
倒是struts2的action让Spring来生成的话就必须指定为prototype,否则就会有线程问题。
在2中没这个问题吧,action属性的生命周期是一个request。
2也没有actionform这东西吧
2可以有 哈哈
默认没有 但是也可以像1那样用 支持的
如果不用form那表单的数据传不过来啊
如果不用struts 如果用velocity也是一样需要有spring的controller 也需要有model的
你觉得呢?
为什么不用form表单数据传递不过来呢?
request.getAttribute()不是一样取么!!
倒是能取到,不过每次都是request.getAttribute("****") 总归不是很爽吧
个人习惯问题 呵呵
<div class="quote_div">我觉得楼主的见解有以下问题:<br>1) 对DTO(数据传输模型),Domain model(领域模型),数据实体(Entity)之间的理解有些问题<br>2) 不同层拥有不同的职责,如果不分层,楼主完全可以在JSP页面中完成所有的事情。<br>3) Action其实就是做一些数据校验,将逻辑计算推到服务层<br>4) 数据的展示和数据的计算模型很多情况下不区分,但是不能说本质上没有区别,也有很多时候计算模型和展示模型不一致。<br><br>请参考</div>
<p><br><br>1、我的理解是这三个模型在概念上是要分离的,但是实战中为了避免过度分离的副作用,同一个class可以充当多个角色;<br>2、关于分层的必要性我没有意见,各司其职是应该的;我的意思是:层次这个东西在实战中可以体现为抽象的对象(就是通用类),在架构层面存在即可,而非必须在具体业务实现中体现该对象;<br><br>以action为例:我的意思不是要去掉这个层次,而是觉得抽象度不够(如果仅仅为了数据校验的话),在具体应用架构中有必要做进一步的抽象和提炼。</p>
<p>可以看一下这个:<a href="/topic/396024">http://www.iteye.com/topic/396024</a></p>
<p> </p>
1) 对DTO(数据传输模型),Domain model(领域模型),数据实体(Entity)之间的理解有些问题
2) 不同层拥有不同的职责,如果不分层,楼主完全可以在JSP页面中完成所有的事情。
3) Action其实就是做一些数据校验,将逻辑计算推到服务层
4) 数据的展示和数据的计算模型很多情况下不区分,但是不能说本质上没有区别,也有很多时候计算模型和展示模型不一致。
请参考
<div class="quote_div">
<div class="quote_title">betafox 写道</div>
<div class="quote_div">
<div class="quote_title">sslaowan 写道</div>
<div class="quote_div">关于ActionForm,参见DTO模式,如果你的业务层实现为一个Rich Domain Model,那么DTO就很有用了<br><br>关于Action,参见Command模式,关于Struts核心的架构可参见《J2EE核心模式》<br><br>这个话题没什么好讨论的,如果你理解Struts的设计思想,那么你就会认为你这么使用,是正确的~~</div>
<br><br>理论上是正确的,确实如君所言没什么好说的,我也认为架构上应该遵循这样的层次,然则,理论化的东西在实战中往往不是效率最优的,相信这点大家都有体会,所以我才有此问。</div>
<p><br><br>这种东西都经过了理论->实践->理论->实践 无数回了,我从来不认为架构上就应该遵循这样的层次,我的观点具体请见我写的<a href="http://sslaowan.iteye.com/blog/375093">我们应该怎样看待框架</a>。</p>
<p> </p>
</div>
<p> </p>
<p>看了<a href="http://sslaowan.iteye.com/blog/375093">我们应该怎样看待框架</a>。写的很好很清晰,谨受教!</p>
<div class="quote_div">
<div class="quote_title">sslaowan 写道</div>
<div class="quote_div">关于ActionForm,参见DTO模式,如果你的业务层实现为一个Rich Domain Model,那么DTO就很有用了<br><br>关于Action,参见Command模式,关于Struts核心的架构可参见《J2EE核心模式》<br><br>这个话题没什么好讨论的,如果你理解Struts的设计思想,那么你就会认为你这么使用,是正确的~~</div>
<br><br>理论上是正确的,确实如君所言没什么好说的,我也认为架构上应该遵循这样的层次,然则,理论化的东西在实战中往往不是效率最优的,相信这点大家都有体会,所以我才有此问。</div>
<p><br><br>这种东西都经过了理论->实践->理论->实践 无数回了,我从来不认为架构上就应该遵循这样的层次,我的观点具体请见我写的<a href="http://sslaowan.iteye.com/blog/375093">我们应该怎样看待框架</a>。</p>
<p> </p>
如果不用form那表单的数据传不过来啊
如果不用struts 如果用velocity也是一样需要有spring的controller 也需要有model的
你觉得呢?
为什么不用form表单数据传递不过来呢?
request.getAttribute()不是一样取么!!
发表评论
-
回望之一:是时侯了
2009-12-13 23:18 1229时间一如即往的快,转眼间又到年未了 ... -
Crack MxGraph 破解
2009-08-23 13:32 8233JGraph是免费的! MxGraph是收费的,官方D ... -
Nice Struts~鸡肋问题解决之道
2009-05-26 10:18 1698前面提出了关于SSH架构中struts的鸡肋问题,大家也给出了 ... -
struts的多模块配置,真滴很扯淡?
2009-05-24 00:38 988首先声明,struts1的多模块配置很好很强大 ... -
解析java web开发中的困扰(1)
2009-05-23 23:56 928诸如jsp等脚本性质的语法、基于xml的属性配置与属性注入在 ... -
Hibernate的事件和拦截器体系
2008-08-28 14:45 2126持久层框架底层的拦截器机制是对诸如Spring等业务管理 ... -
探索象棋(JAVA版) UCCI引擎
2008-07-28 17:51 1867参见图片,呵呵 -
实现Microsoft Project 的解析和内容抽取
2008-05-13 09:55 2219文本内容提取: 使用net.sf.mpxj 的工具提取 ... -
论权限模型
2008-05-06 09:38 1146权限模型多种多样,包含各种教条和方法论,但在实践中真正 ... -
使用JEdit打造自己的IDE
2008-04-06 11:26 2335见附件的图片.... -
Lucene索引管理器(基于Luke修改而来)
2008-03-29 21:34 1878先看图来...... -
JBPM与SPRING事务整合之深度历险
2008-03-29 20:47 6746------------------此文很早就写了,不知何故在 ... -
实现MHT文件格式的解析和内容抽取
2008-03-29 01:56 10368由于我们的业务系统中有大量的MHT格式的资料,需要对其建立索引 ... -
超轻量的定时器
2007-12-26 20:41 1196项目中一个特殊要求,需要轻量的定时器程序,所以简单实现了一个: ... -
通过jsp标签封装的列表组件
2007-11-27 20:43 1721一套字表查询api,将字典表处理从业务代码(主要是sql关联) ... -
swing界面的屏幕取词
2007-11-27 20:25 2110针对let's swing blog上的方法进行了优化,完善了 ... -
基于Swing的JBPM设计器
2007-07-17 22:10 4404基于JBPM的流程设计器,屏蔽了JBPM的一些复杂功能,适合业 ...
相关推荐
SSH 架构(Struts + Spring + Hibernate)有很多优点,例如: * Struts 提供了一个灵活的 MVC 框架,能够方便地处理用户请求。 * Spring 提供了一个统一的 IoC 容器,能够方便地管理应用程序中的所有组件。 * ...
在Struts中,Action类作为控制器,处理请求并调用业务逻辑,然后将结果转发给相应的JSP页面展示。 2. **Spring**:Spring框架主要提供依赖注入和AOP功能,使得组件之间的依赖关系可以通过配置文件来管理,而不是硬...
在实际开发中,一个SSH项目会包含各种配置文件(如struts-config.xml、hibernate.cfg.xml)、Java源代码(Action类、DAO类、Service类等)、JSP页面以及数据库脚本等。开发者通常会利用IDE(如Eclipse或IntelliJ ...
在SSH架构中,Struts主要负责处理用户界面部分,即表示层。 1. **核心组件**: - **ActionServlet**:作为控制器的角色,处理HTTP请求并将控制权转移给相应的Action。 - **Action**:业务逻辑的主要承载者,执行...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的MVC架构。本项目涉及的核心知识点是使用Struts2处理表单提交,Hibernate进行数据持久化,以及图片上传的相关技术。下面将详细介绍这些内容...
在Java中,SSH架构的集成使得开发者可以利用Struts的MVC结构,Spring的IoC和AOP特性,以及Hibernate的ORM能力,构建出高效且易于维护的系统。SSH的jar包集通常还会包含其他辅助库,如Apache Commons、LOG4J等,以...
Java SSH架构,即Struts + Spring + Hibernate(或MyBatis)的组合,是Java Web开发中非常流行的一种MVC框架模式。它将业务逻辑、数据访问、用户界面三者很好地分离,提高了代码的可维护性和系统的扩展性。 - **...
SSH(Spring、Struts2、Hibernate)是Java开发中常用的一种技术栈,它结合了Spring的IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)、Struts2作为MVC(Model-View-...
在SSH架构中,Struts2与Spring的结合可以实现Action的依赖注入,使得业务逻辑更易维护和扩展。Spring管理的Hibernate Session可以在多个Action之间共享,减少了数据库连接的开销。具体来说,Struts2将用户的请求转发...
SSH架构,全称为Struts+Spring+Hibernate,是Java Web开发中的一个经典组合,用于构建高效、可维护的Web应用程序。这个"基于SSH架构简单的论坛系统"是一个利用SSH框架技术实现的在线讨论平台,旨在提供用户交流思想...
SSH是Java开发中的一种经典企业级应用框架组合,由Struts、Spring和Hibernate三个开源项目组成,常被称为“轻量级”企业级开发解决方案。这个"ssh.rar"压缩包文件包含了一个基于Struts1.2、Spring2.0和Hibernate3.0...
在SSH架构中,Spring还提供了与Struts和Hibernate的集成接口,使得各组件之间的交互更为顺畅。 Struts是MVC(Model-View-Controller)设计模式的一个实现,主要处理用户界面和业务逻辑的交互。它接收用户请求,调度...
SSH架构是一种广泛应用于Java EE平台的开源开发框架,由Struts、Spring和Hibernate三个组件组合而成,主要用于构建高效、可重用的企业级应用程序。本文将详细介绍SSH架构的总体描述、框架集成规范、组件集成规范、包...
SSH架构融合实例主要涉及到的是Java开发中的三种核心技术:Spring、Struts和Hibernate,这三者合称为SSH。SSH是企业级应用开发中的一个经典组合,主要用于构建基于Java的Web应用程序。 Spring框架是SSH架构的核心,...
该资源中包括SSH框架整合中struts2框架所需要的所有jar包。包括: (1)struts-2.3.24\apps\struts2-blank\WEB-INF\lib\*.jar(Struts2需要的所有jar包) (2)struts2-spring-plugin-2.3.24.jar(Struts2整合Spring...
在BBS系统中,Spring管理着所有的bean,包括数据访问对象(DAO)、服务层对象以及Struts中的Action。此外,Spring还提供了事务管理,确保数据操作的原子性和一致性。 3. **Hibernate**:Hibernate是一个对象关系...
8. **异常处理**:学习如何在Struts中优雅地处理和呈现异常信息。 9. **国际化和本地化**:可能涉及到多语言支持,学习如何配置资源文件来实现这一点。 通过深入研究这个"ssh_TestStruts.rar"压缩包,你可以获得...
### 手把手SSH架构搭建详解 #### 一、概述 SSH框架是指Struts + Spring + Hibernate这三种技术的组合,是Java Web开发中非常流行的一种轻量级开发框架。本篇将详细介绍如何在MyEclipse 10环境下搭建SSH框架,并进行...
在讨论 SSH 架构时,我们需要了解到 Struts、Spring 和 Hibernate 三个流行的开源框架,它们分别用于表现层、业务层和持久层。这些框架能够帮助我们建立一个松耦合的架构,使得不同的层次能够彼此独立地工作。 在...