TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置。spring3 mvc可以认为已经100%零配置了(除了配置spring mvc-servlet.xml外)。% E3 R5 X8 l j6 L3 {
/ F4 Y3 t# ?" I; `6 R! qSpring MVC和Struts2的区别:
1 n# s" w2 k3 J
5 [# P* A8 U5 R: b" o/ W' z% Q' S3 s机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是 servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。" x( w3 I. P* \( ~% v6 U# s1 }* M
2 t; w/ S. |- m7 f' t: N2 @性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。
8 e+ C6 x( r3 c0 d' _; P# z6 p& g$ J. t
参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
4 W, `9 ]- V% k% m0 S2 T0 |# \. W. i
设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。
* |( C' |- E9 r0 `: ]
/ u6 E8 u) x6 {! zintercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。
7 Z$ E+ k3 j2 T/ s; M( |1 R
2 B/ O. N; |( O0 b: n另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。送上一段代码:
4 `# z0 J" L5 H$ N5 z/ ~ x# ?! L6 k' ]' |
@RequestMapping(value=“/whitelists”). j( d/ T8 g8 T5 V* z2 o
7 d. A2 l7 w5 U* X1 J1 `! Z5 H8 X {public String index(ModelMap map) {
/ p9 ?- ~% S% v( v7 j, E* [2 [6 V. Y. H, ?, r! \$ k6 Q
Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId());
9 Z- d) |- Y6 U5 X# n' Z9 g' s; H4 Y {# j6 j* I6 l
List groupList = groupManager.findAllGroup(account.getId());
$ v# P3 J: t, K# u% V
5 _0 s0 C X" [- kmap.put(“account”, account);+ Q* _+ P( D9 h
8 A/ |7 T0 x4 f2 d* m/ V% l
map.put(“groupList”, groupList);0 b3 J4 l: ]7 ] i* s% K
( r% g. _2 O; K% \- @) ^! o" Zreturn “/group/group-index”;
5 R# @- E. L1 p& T) `+ I8 G' E3 J7 N7 }+ Q
}
2 n9 `. L3 S8 l' o0 J
6 _: D0 ? [7 C- Y" {1 f8 {// @ResponseBody ajax响应,处理Ajax请求也很方便& A! G+ r; `+ ]& ]- k+ i
! E* w- l1 v. f6 C$ s@RequestMapping(value=“/whitelist/{whiteListId}/del”)) |* s& j2 C- a ~8 v6 I7 g
7 R* S- T# @4 @
@ResponseBody
- a! F. J6 Q! P; n6 @
F# g( n6 V2 ]- d# Jpublic String delete(@PathVariable Integer whiteListId) {# X/ g6 p9 g7 }
5 J+ f5 a% K* D, a0 _* u4 F
whiteListManager.deleteWhiteList(whiteListId);) Y8 r5 h3 X% M4 C
( P% k+ W2 h$ P$ N ireturn “success”;
% H+ D5 E' m% @5 y& G" Z
5 d' v3 ?7 r a& U3 T7 |}9 c5 ^5 w: R. j* v: g4 Z
===========================================================4 S1 Y% g0 I( J# h
下面列出我对这两个都很优秀的框架的评估,请各位帮忙评判一下:
* F P! K1 Q5 D: D1 F: s4 J9 `, P2 g, @9 W4 T( d b
------------------------SpringMVC-----Struts2.0(webwork2)--------------获胜者 . r, n7 `& m5 u; C
开发效率----------------5-------------?---------------------------------? 9 w+ T3 r, J b/ |* X, f
0 B2 G& F; ^; U; B `! e
运行效率----------------5-------------4(action非单例)------------------SpringMVC
5 ?9 V: `" k+ Q+ x7 c1 ^$ x" q& G; h5 b* h- r. A
学习成本----------------4-------------3(同事反应学习曲线比较陡)--------SpringMVC
" m) a& M5 @9 Q
. `9 A7 J* b5 h/ o+ i$ C! ^: A与Spring集成------------5(无缝集成) 4----------------------------------SpringMVC 8 m' R0 g1 S' h; G0 a% H1 w
难易程度 6 t: X4 w% p( ^& N
9 \' y- M+ f4 Q, z3 P# h0 N F& O
validator集成-----------4(commons)--5----------------------------------Struts2.0
1 k5 E* a: V- i2 W, ]& B% P' y- v3 T1 Q2 A' N8 P* c3 k
AJAX集成----------------4-------------5(丰富的tag支持)-----------------Struts2.0 ! d. T2 V1 C! a$ \2 p% [- K
# |4 b* D; D: w1 ]$ B7 W, h. p可测试性----------------5-------------5----------------------------------平局6 o1 t7 E- d! v5 x5 A% s+ j
0 E2 ?( l$ b! y. `# c9 j m' b* F q. x( x( O i1 S5 c* b' J
6 H% F+ E ^5 _& k4 y% p从实际开发效果来看,在4个项目用了spring2.5 mvc,2个项目用struts2,发现招聘时,都是struts1,struts2的求职者,而spring mvc全得现培训,不过学习曲线实在是低,把架构搭好之后,绝大部分的人都能很快适应,并快速开发。而struts2的开发,以前2个项目,都是刚好别人搭的架构(完全照搬天乙社区里面的开发方式),实际做功能测试和性能测试时,问题成堆。struts2的数据绑定简直就是灾难,新手经常性的把参数给弄乱。7 y0 @6 z! L. U' l7 v! F
) i3 K% c1 g7 L) p( F
|
|