`
hexiaodong
  • 浏览: 65205 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

我为什么不用struts

阅读更多

在我眼里,struts还有几个关键的缺点,所以我用了3-5个项目后就不用了。

主要的缺点有这么些:

1、输入输出变量范围定义不清晰。在一个action中,所有输入输出变量都是作为对象变量存在的,既无法区分某个变量是属于哪个方法的,也不能区分哪个变量是输入变量还是输出变量。有人说,我每个请求都用单独的action来处理不就行了。这个办法的确可以区分每个请求之间的输入输出,但是你会面临action数量急剧膨胀的问题。

     输入输出变量定义不清晰的带来的问题是代码可读性比较差。使用struts的时候,极端情况下,你得把jsp+action+js结合起来看才能确定某个请求有哪些输入输出。这对项目的维护者来说实在是件很痛苦的事情。

 

2、struts在处理ajax请求的时候太不方便了,虽然你可以配置一个插件让strus具备返回json result的功能。但是目前的插件距离我的实际需要还是有差距的。主要的问题在于,struts现有的json插件不能定义java对象序列化到json对象时的映射策略。就拿User对象来说吧,假如我目前设计的是订单界面,订单又引用了User对象作为订单的制单人属性。那么在序列化Order对象到前端的时候,我只需要序列化User对象的id,name就够了,user对象的其他属性可以统统不要。但我如果在维护用户的模块中,显示用户列表的时候,通常要显示用户对象的大部分属性。因此java对象到json对象的序列化策略应该是运行时动态设定的,不可能用annotation来申明。但struts以及struts插件并没有提供运行时根据请求为某个类选择不同映射策略的功能。

 

struts2,学习成本不可谓不高,功能不可谓不强大,但不符合我的需求。

 

学习strus2,假如不花个把月时间静下心来学习和实践,估计没人敢说自己精通strus2了。但mvc真的有必要那么复杂么?

 

mvc是什么?他应该能干什么?他的核心价值在哪?最小的mvc应该包含哪些功能?我们自己写一个mvc如何?自己写一个mvc框架需要超过一个月时间么?

分享到:
评论
38 楼 石头的日记 2011-04-17  
按需索取,struts和sppring mvc 都很强大,但不一定适合自己,我们用的mvc都是基于自己的项目所写,要的是速度和稳定,功能上并不需那么多,楼主的忧虑深有同感,这两个引入的思想太多了,以至于有些偏离
37 楼 fatesymphony 2011-04-17  
第一个问题:如果你一个请求对应一个action那么可读性便不会差,但是开发成本提高。(注:你使用其它框架也是一样的问题)。在这里我的做法是同种类型对应一个请求。如此可读性较好,开发成本也不是很高。
第二个问题:关于JSON的序列化,struts2是可配置的。看源码就清楚了。至于你说的什么动态绑定,我发表一下我的看法是:首次开发容易,后期维护,可读性一样存在很大的问题。如果你一个请求对应一个action配置,JSON的问题也不存在了。如果你觉得这种开发让你很烦恼,你也可以在Java代码中进行序列化,然后把这个字符串使用text,或者json的方式输出也能达到相同的效果。

总体来说你第一个问题,并不是struts2才有的,而且每种框架、servlet都有相同的问题。第二个问题,完全不是问题。
36 楼 tufei2006 2011-04-16  
mvc 各种技术,都有优缺点。

软件开发最终的结果是 要好用,实用。。

技术之不过选择而已。

存在就是道理
35 楼 qjtttt 2011-04-16  
楼主的第二个问题,实际上早在NNN年前人家dwr就已经给你解决了
至于第一个问题,说实话,我不认为是什么很大的问题,另外事实上我们的项目中很少在action里面放成员变量,有N多方式可以解决你的问题
PS:现在spring MVC用的很爽,楼主可以尝试下
34 楼 harryplays 2011-04-16  
一般大点的公司都是用封装的struts吧,很少直接用struts的,当然,封装后的都面目全非了
33 楼 1927105 2011-04-16  
写公司内部的框架就行了
32 楼 kjj 2011-04-16  
论坛上现在就这么充斥着这种烂帖子,还占据主页

不说自己只懂些皮毛功夫,就怪别人的工具造得不够强大

就算工具强大了怎么的,你一样用不好..................

吹牛逼的功夫到不小......
31 楼 yangxinxyx 2011-04-16  
这个,看自己口味吧。 Spring MVC倒时很方便,但是扩展性没那么强,Struts2反而用起有点麻烦了
30 楼 accphc 2011-04-16  
<div class="quote_title">Agrael 写道</div>
<div class="quote_div">
<div class="quote_title">hexiaodong 写道</div>
<div class="quote_div">
<p>在我眼里,struts还有几个关键的缺点,所以我用了3-5个项目后就不用了。</p>
<p>主要的缺点有这么些:</p>
<p>1、输入输出变量范围定义不清晰。在一个action中,所有输入输出变量都是作为对象变量存在的,既无法区分某个变量是属于哪个方法的,也不能区分哪个变量是输入变量还是输出变量。有人说,我每个请求都用单独的action来处理不就行了。这个办法的确可以区分每个请求之间的输入输出,但是你会面临action数量急剧膨胀的问题。</p>
<p>     输入输出变量定义不清晰的带来的问题是代码可读性比较差。使用struts的时候,极端情况下,你得把jsp+action+js结合起来看才能确定某个请求有哪些输入输出。这对项目的维护者来说实在是件很痛苦的事情。</p>
<p> </p>
<p>2、struts在处理ajax请求的时候太不方便了,虽然你可以配置一个插件让strus具备返回json result的功能。但是目前的插件距离我的实际需要还是有差距的。主要的问题在于,<span style="color: #ff0000;">struts现有的json插件不能定义java对象序列化到json对象时的映射策略。</span>就拿User对象来说吧,假如我目前设计的是订单界面,订单又引用了User对象作为订单的制单人属性。那么在序列化Order对象到前端的时候,我只需要序列化User对象的id,name就够了,user对象的其他属性可以统统不要。但我如果在维护用户的模块中,显示用户列表的时候,通常要显示用户对象的大部分属性。因此java对象到json对象的序列化策略应该是运行时动态设定的,不可能用annotation来申明。但struts以及struts插件并没有提供运行时根据请求为某个类选择不同映射策略的功能。</p>
<p> </p>
<p>struts2,学习成本不可谓不高,功能不可谓不强大,但不符合我的需求。</p>
<p> </p>
<p>学习strus2,假如不花个把月时间静下心来学习和实践,估计没人敢说自己精通strus2了。但mvc真的有必要那么复杂么?</p>
<p> </p>
<p>mvc是什么?他应该能干什么?他的核心价值在哪?最小的mvc应该包含哪些功能?我们自己写一个mvc如何?自己写一个mvc框架需要超过一个月时间么?</p>
</div>
<p>建议看看json返回类型的includeProperties和excludeProperties。</p>
<p>最近JE上出现的文章常见到如“struts2的一个大bug”、“struts2悲剧的bug”等等文章,到底是struts2的问题还是使用者自身的问题。。。。。。</p>
<p>也建议测试struts2和springMVC性能的同学,最好不用default拦截器栈来测试,那个拦截器栈功能过多,有很多是用不到但是比较消耗性能的。</p>
</div>
<p>如果不用struts-default定义的默认拦截器,那该如何精简,可否给个具体的说法。。。</p>
<p>最起码也得搞清楚那些默认的拦截器是干什么用的吧。</p>
<p>对于我来说,坚决不用struts2的类型转换功能,对于数据校验,视项目而定。</p>
29 楼 xumen 2011-04-16  
struts 2 还行吧,可能我还没有研究的这么深入呵呵....
28 楼 forever8tf 2011-04-16  
jsf+spring mvc 我看好你哦~请LZ参考下。
27 楼 teclogid 2011-04-16  
连个简单的struts都学不会,还牛逼哄哄说一个月写一个。你写完了再说。
最烦那些懂点皮毛自我感觉良好,学不会便批这批那的烂货了。
不会,你可以问啊,只会埋怨。
1.method共享的变量才定义在方法外,内部的,某个请求独有的,你可以通过request取啊,也可以通过xxxaware接口注入啊。清不清晰取决于你自己的设计,框架只是提供很多方式让你选择而已。
2.拜托你看清楚json-plugin的文档行吗? root,includeProperties,excludeProperties参数。

用struts做了几个项目了,还是这水平?
框架这种东西,你要是对mvc有common sense的话,看一个礼拜的官方文档,应该差不多了吧?
还号称自己写。这种话,只能写出来了再说。



26 楼 CN_DOTA_HOPE 2011-04-16  
这就跟 爱吃青菜多一点还是爱吃萝卜多一点 一样
25 楼 Allen 2011-04-16  
无规范和规划的annotation,就是项目管理人员和重构者的噩梦。

自己写一个MVC的话,楼主所言的Struts2的问题,难道就可以完全避免了吗?
24 楼 lfrick 2011-04-16  
楼主的问题我在08年搭建公司新的技术平台时遇到过,也困或了一段时间,最后是这样处理的:
一、设计两类自定义的Action基类:
1.BaseAction:纯粹的Pojo,里面封装了最小必要的属性和方法。大量用于常规请求或者非业务请求。这里的参数不会太多,而且也是很好理解的。
2.BaseModelAction:继承BaseAction, 实现ModelDrive的Action。大量用于业务请求。这里的大量参数已经封闭在Model里了,额外的参数也不会多,如果真多了,那就是你的Model设计有问题了。

二、自己实现json result:
因为ORM用的是hibernate,存在较强的关联关系,特别是权限管理这一块儿。如果用json插件的话会产生极其严重的后果。于是我使用json组件+struts result的方式:在action中自行判断需要序列化哪些东西,然后转到json result,写回客户端。对于复杂对象我是这样处理的,写两类工具方法:1.jsonInclue(Object obj, String... includeProperties);2.jsonExclue(Object obj, String...);程序员自己判断具体情况下哪个更适用。

以上就是我对lz提到的其中两个问题的处理方式,希望对你有所帮助。
23 楼 ctoeye 2011-04-16  
<div class="quote_title">hexiaodong 写道</div>
<div class="quote_div">
<p>在我眼里,struts还有几个关键的缺点,所以我用了3-5个项目后就不用了。</p>
<p>主要的缺点有这么些:</p>
<p>1、输入输出变量范围定义不清晰。在一个action中,所有输入输出变量都是作为对象变量存在的,既无法区分某个变量是属于哪个方法的,也不能区分哪个变量是输入变量还是输出变量。有人说,我每个请求都用单独的action来处理不就行了。这个办法的确可以区分每个请求之间的输入输出,但是你会面临action数量急剧膨胀的问题。</p>
<p>     输入输出变量定义不清晰的带来的问题是代码可读性比较差。使用struts的时候,极端情况下,你得把jsp+action+js结合起来看才能确定某个请求有哪些输入输出。这对项目的维护者来说实在是件很痛苦的事情。</p>
<p> </p>
<p>2、struts在处理ajax请求的时候太不方便了,虽然你可以配置一个插件让strus具备返回json result的功能。但是目前的插件距离我的实际需要还是有差距的。主要的问题在于,struts现有的json插件不能定义java对象序列化到json对象时的映射策略。就拿User对象来说吧,假如我目前设计的是订单界面,订单又引用了User对象作为订单的制单人属性。那么在序列化Order对象到前端的时候,我只需要序列化User对象的id,name就够了,user对象的其他属性可以统统不要。但我如果在维护用户的模块中,显示用户列表的时候,通常要显示用户对象的大部分属性。因此java对象到json对象的序列化策略应该是运行时动态设定的,不可能用annotation来申明。但struts以及struts插件并没有提供运行时根据请求为某个类选择不同映射策略的功能。</p>
<p> </p>
<p>struts2,学习成本不可谓不高,功能不可谓不强大,但不符合我的需求。</p>
<p> </p>
<p>学习strus2,假如不花个把月时间静下心来学习和实践,估计没人敢说自己精通strus2了。但mvc真的有必要那么复杂么?</p>
<p> </p>
<p>mvc是什么?他应该能干什么?他的核心价值在哪?最小的mvc应该包含哪些功能?我们自己写一个mvc如何?自己写一个mvc框架需要超过一个月时间么?</p>
</div>
<p><br>一大清早起来就看到这种月经贴,郁闷。</p>
22 楼 Agrael 2011-04-16  
<div class="quote_title">hexiaodong 写道</div>
<div class="quote_div">
<p>在我眼里,struts还有几个关键的缺点,所以我用了3-5个项目后就不用了。</p>
<p>主要的缺点有这么些:</p>
<p>1、输入输出变量范围定义不清晰。在一个action中,所有输入输出变量都是作为对象变量存在的,既无法区分某个变量是属于哪个方法的,也不能区分哪个变量是输入变量还是输出变量。有人说,我每个请求都用单独的action来处理不就行了。这个办法的确可以区分每个请求之间的输入输出,但是你会面临action数量急剧膨胀的问题。</p>
<p>     输入输出变量定义不清晰的带来的问题是代码可读性比较差。使用struts的时候,极端情况下,你得把jsp+action+js结合起来看才能确定某个请求有哪些输入输出。这对项目的维护者来说实在是件很痛苦的事情。</p>
<p> </p>
<p>2、struts在处理ajax请求的时候太不方便了,虽然你可以配置一个插件让strus具备返回json result的功能。但是目前的插件距离我的实际需要还是有差距的。主要的问题在于,<span style="color: #ff0000;">struts现有的json插件不能定义java对象序列化到json对象时的映射策略。</span>就拿User对象来说吧,假如我目前设计的是订单界面,订单又引用了User对象作为订单的制单人属性。那么在序列化Order对象到前端的时候,我只需要序列化User对象的id,name就够了,user对象的其他属性可以统统不要。但我如果在维护用户的模块中,显示用户列表的时候,通常要显示用户对象的大部分属性。因此java对象到json对象的序列化策略应该是运行时动态设定的,不可能用annotation来申明。但struts以及struts插件并没有提供运行时根据请求为某个类选择不同映射策略的功能。</p>
<p> </p>
<p>struts2,学习成本不可谓不高,功能不可谓不强大,但不符合我的需求。</p>
<p> </p>
<p>学习strus2,假如不花个把月时间静下心来学习和实践,估计没人敢说自己精通strus2了。但mvc真的有必要那么复杂么?</p>
<p> </p>
<p>mvc是什么?他应该能干什么?他的核心价值在哪?最小的mvc应该包含哪些功能?我们自己写一个mvc如何?自己写一个mvc框架需要超过一个月时间么?</p>
</div>
<p>建议看看json返回类型的includeProperties和excludeProperties。</p>
<p>最近JE上出现的文章常见到如“struts2的一个大bug”、“struts2悲剧的bug”等等文章,到底是struts2的问题还是使用者自身的问题。。。。。。</p>
<p>也建议测试struts2和springMVC性能的同学,最好不用default拦截器栈来测试,那个拦截器栈功能过多,有很多是用不到但是比较消耗性能的。</p>
21 楼 lnaigg 2011-04-16  
george 写道
你说的两个问题,可以归纳为:
1:Struts2 的Action是有状态的,存在成员变量;
2:Struts2 不能很好地支持json/xml甚至jpg等格式的输出;


你这两个问题,可以使用Spring MVC 3 来解决,但是如果使用Spring MVC 3,又引入一个致命的问题:Spring MVC 3 使用annotation可以把藏在任意层次的类映射到一个url上,这样,如果项目管理人员无法强制约束组员的命名风格和包路径存放规范,会造成到看到一个url,到处去找其对应的控制器类的问题。
使用struts2-convention-plugin 就不会有这个问题,因为它是使用约定的,你不按照约定来存放和命名action,你的url根本就无法访问,程序也运行不起来。

另外,Struts2所使用的模型驱动还有一个问题:当你的页面输入框内输入的数据类型,和实体类定义的数据类型不一致时(比如实体类A字段类型为Integer,而页面上为该字段输入了aaa),提交页面,Struts2既不报错,也不能执行,程序根本就不会进入Struts2的方法(使用struts2-convention-plugin 时),这是一个大问题。

但是和Spring MVC 3 的包路径无约束造成的项目混乱相比,Struts2的种种缺点我还是忍受了。

所以综合上述,我还是选择了Struts2


SpringMVC所谓的致命问题,在实际项目中、在开发规范面前都不成问题。
20 楼 eyezhanghao 2011-04-16  
action数量多了真那么重要吗?如果class数量是个问题的话,那么一个项目就一个class不就是最理想的嘛(一个极端情况)
19 楼 bat0906 2011-04-15  
用神马的也有,用着顺手的就好,用适合自己的。

相关推荐

    struts2 最新版 不用去官网上下载了

    Struts2是一个非常知名的Java Web开发框架,由Apache软件基金会维护。它基于MVC(Model-View-Controller)设计模式,极大地简化了Java Web应用程序的开发过程,提供了强大的功能和可扩展性。在标题和描述中提到的...

    Struts2+jQuery(不用JSON)实现局部刷新

    - **jQuery的AJAX请求**:使用jQuery的$.ajax()方法,设置URL为Struts2的Action路径,成功回调函数内解析响应内容并更新DOM。 5. **示例代码**: - Struts2 Action代码可能如下: ```java public class ...

    struts2.0.11 jar 包

    - `xwork-2.0.4.jar`:XWork是Struts2的基础,提供了动作处理、类型转换、数据绑定等基础功能,为Struts2提供了强大的业务逻辑处理能力。 4. **OGNL(Object-Graph Navigation Language)**: - `ognl-2.6.11.jar...

    struts2配置2.5版

    可设置为本地【xml输入语法快捷提示】,就不用远程获取了:window--&gt;preference--&gt;输入Catalog--&gt;xml下的Catalog--&gt;Add--&gt;location:解压缩struts-core-2.5.16.jar 后,文件struts-2.5.dtd文件路径。 ...

    Struts2-2.3.16 全jar包

    例如你建一Web Project,名为Struts2 导入项目所需要的jar包,放入/Struts2/WebRoot/WEB-INF/lib下面 方法一: 在struts2存放目录(以我的举例说明) F:\JavaWeb教程\ssh-jar\struts-2.2.3.16-all\struts-2.2.3.16\...

    struts试题

    在 Struts.xml 文件中,有一个名为 `reload` 的常量,可以实现不用重新启动服务就可以得到反馈。 4. Package 的作用: 在 Struts2 中,Package 用于组织 Action。Package 可以为空,如果为空,则表示该包为默认...

    javaweb-struts2

    9. **国际化与本地化**:Struts2内置了对多语言的支持,开发者可以轻松地为应用程序添加不同语言的资源文件,实现内容的国际化。 10. **插件体系**:Struts2拥有丰富的插件库,如Struts2-dojo-plugin用于AJAX支持,...

    struts-2.3.20-lib.zip

    Struts 2是Java Web开发领域中一个广泛应用的...通过使用Struts 2,开发者可以更加专注于业务逻辑,而不用过多关注底层的HTTP处理和页面渲染。对于企业级应用来说,选择Struts 2.3.20可以带来高效、稳定的开发体验。

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...

    struts1和struts2的增删改查

    Struts2还支持动态方法调用,这意味着可以不用为每个CRUD操作创建单独的Action方法,而是在一个Action中使用通用的方法,通过参数决定执行哪个操作。此外,拦截器可以实现通用的功能,如权限检查、日志记录等,使得...

    struts框架的最简单应用,懂的就不用下了

    在Struts框架中,配置文件(通常为struts-config.xml或struts2的struts.xml)是非常重要的。这个配置文件定义了Action类与URL的映射,以及视图的跳转规则。压缩包可能包含了一个简单的配置示例,用于演示如何设置...

    struts2图书馆管理系统

    总的来说,这个"struts2图书馆管理系统"项目为初学者提供了一个了解和实践Struts2框架的机会,尽管它可能存在一些功能上的局限,但通过这个项目,学习者可以深入理解MVC架构,掌握Struts2的核心概念,并初步接触Web...

    Struts2 JDBC 增删改查

    项目中主键是通过sequence来自增的,这意味着数据库(如Oracle、PostgreSQL等支持序列的数据库)会自动为新记录生成唯一ID。在JDBC中,通常需要调用序列的nextval()函数来获取这个ID,然后插入到对应字段。 此外,...

    struts2 资料struts2 资料struts2 资料struts2 资料

    9. **技术选型**:《开源技术选型手册.pdf》可能包含关于为什么选择Struts2作为开发框架的讨论,对比其他框架的优势,以及在不同场景下的适用性。 10. **中文文档**:《starting-struts2-chinese.pdf》是Struts2的...

    Struts2jar包及dtd文件

    它的核心是基于MVC(Model-View-Controller)设计模式的,为开发者提供了丰富的功能和灵活性,使得开发者可以专注于业务逻辑,而不用过于关心底层的实现细节。 首先,我们来了解"jar包"。在Java开发中,jar(Java ...

    struts1总结

    Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它主要负责处理MVC(Model-View-Controller)架构中的Controller部分。本篇文章将深入探讨Struts1的核心概念、工作原理及其在实际开发中的应用。 一...

    Struts2漏洞检查工具2017版

    采用scanner读数据流,再也不用担心s16不能执行net user/ipconfig/netstat -an等命令了。 增加复杂数据包(multipart/form-data)提交方式进行漏洞利用,可绕过部分防护。可执行命令,暂时无法上传文件。 2014-11-12...

    在struts2中使用freemarker模版

    在`struts.xml`配置文件中,定义一个action,比如`test`,并指定其结果类型为`freemarker`,这样当用户触发这个action时,Struts2会将控制权交给FreeMarker模板来渲染视图。例如: ```xml ...

    struts-2.5.12

    总之,Struts 2.5.12是一个功能强大且成熟的Web框架,它的设计理念和特性使得开发人员能够更专注于业务逻辑,而不用过于关心底层的实现细节。通过理解并熟练运用这些知识点,开发者可以构建出高效、可维护的Java Web...

    [Struts 2权威指南--基于WebWork核心的MVC开发(高清完整版) 1/12

    不用多说了,Struts 2权威指南--基于WebWork核心的MVC开发(高清完整版),解压出来有200多M,因为权限不怎么够,我一共分了12卷,是一本不可多得的好书。第一卷附目录: 第1章 Struts 2概述,第2章 Struts 2下的Hello...

Global site tag (gtag.js) - Google Analytics