TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置。spring3 mvc可以认为已经100%零配置了(除了配置spring mvc-servlet.xml外)。
: {5 k7 G' j* R5 Y& K8 `: p
. G5 [5 a: ^# C3 TSpring MVC和Struts2的区别:
9 W. t+ g2 t# l8 g1 [3 @) d
: o) C) P& a' f: B$ x- E n机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是 servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。! P+ W. g8 K1 ^' V
( m# u3 ^2 A$ }' `2 u! [) V! d7 C
性能: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上下文。
. `/ Z5 G. W9 D$ d2 s% q+ f9 I9 M( s n8 S' m
参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。& w! V1 M$ o4 O. d# e
3 z( }8 v; T f# S2 d' |3 R7 c
设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。% O3 d$ d8 f4 K! D( a5 P
7 ?3 z- V# S$ Y. Z. p9 ~, Jintercepter的实现机制: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变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。9 ^5 k9 U/ d+ }' [7 Q2 N: T
. p' u0 Y* ]4 a9 K6 ^! c: L n g
另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。送上一段代码: N, `1 ~! l1 F2 W8 C) i- p6 c
, c1 l: h' S) N9 i8 W$ M% m
@RequestMapping(value=“/whitelists”)
. X/ F: g' u# ?9 F& @ L, y6 g- k
# w. q5 B6 [ [: Epublic String index(ModelMap map) {: K# Q, R7 G) c2 F3 f
; Q: ^$ q6 c5 K" lAccount account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId());
3 U* R! M& H. a! x) L% ] y8 \6 j: e( w9 z9 ]# n
List groupList = groupManager.findAllGroup(account.getId());
$ w% Z- [! C* G( F
: b" Y; C* c6 I# C+ j$ Omap.put(“account”, account);
) M" [0 R v {( W+ J2 O7 A1 P/ v3 v- l. q! @) u; C
map.put(“groupList”, groupList);
. r" _: H$ C# ~8 d' p, X9 Z1 I1 L
' w1 }$ [! z2 W/ }* Oreturn “/group/group-index”;- ~2 }# {2 }; Y7 J ^, d5 a6 P
' S. |6 K5 @2 z4 @/ W}
9 l( }* ^$ |% R- N
1 X: d8 ]& o4 b: Z$ \// @ResponseBody ajax响应,处理Ajax请求也很方便
( h9 T4 @+ x% R# [9 H6 a9 T/ K% v! k7 Z) t7 b% {' t2 p/ L5 v, ?
@RequestMapping(value=“/whitelist/{whiteListId}/del”)+ j _1 L( ~, p
" a- { R W- B. r+ J0 M/ d
@ResponseBody" a. A' ]5 [4 N1 K/ B( v1 ]
# k# w$ x0 e8 P7 Ipublic String delete(@PathVariable Integer whiteListId) {
v& R# u" n/ e" ^; ~) K. t6 _" X3 X0 ^4 a9 |- G
whiteListManager.deleteWhiteList(whiteListId);
9 M) u0 I( E j' {' E, z2 z5 m5 D1 r B) M0 O0 q, j& l
return “success”;. }' C) x$ K* p/ b; _
; [. G( q: Y5 F* k+ g" C} r" y5 I7 I2 h0 V, ?; l5 J6 O/ K
===========================================================
. l3 A! x# I3 L6 ^2 | k$ U下面列出我对这两个都很优秀的框架的评估,请各位帮忙评判一下:
8 i$ L. |- x4 ~. ]" C& L9 d, Q" b" q1 M$ u1 a1 ?
------------------------SpringMVC-----Struts2.0(webwork2)--------------获胜者
% h% A$ k* `. F, O; \- W1 } Y% N开发效率----------------5-------------?---------------------------------?
/ o$ _& O- a o( Q( t4 _; j: b! s5 F7 Y5 ?6 {& @9 Y
运行效率----------------5-------------4(action非单例)------------------SpringMVC
8 P5 f- j6 |# x% N; S) U5 H5 s
# `7 {) {* W9 Z学习成本----------------4-------------3(同事反应学习曲线比较陡)--------SpringMVC " D7 X" [" C$ K1 }0 l
' {0 ]( Y8 U2 P* {与Spring集成------------5(无缝集成) 4----------------------------------SpringMVC
2 c' f$ f+ y" c1 I难易程度
( O) H+ |; ^/ f4 H9 n g
( d% }; z0 N' ]8 fvalidator集成-----------4(commons)--5----------------------------------Struts2.0 3 }6 d( q" B* n$ R2 H
8 j4 A) c# Q/ W! @* @$ @" x
AJAX集成----------------4-------------5(丰富的tag支持)-----------------Struts2.0 ' u* ^" P) P0 ~4 ]' G
9 s, e1 b& ~5 b7 |+ ~可测试性----------------5-------------5----------------------------------平局% r! h8 }/ x. s( f
4 [/ P: t. ~8 u9 `' ~/ ?: H3 r1 l- }- k: h+ F
6 C, n. f5 |# ]6 I- ]
从实际开发效果来看,在4个项目用了spring2.5 mvc,2个项目用struts2,发现招聘时,都是struts1,struts2的求职者,而spring mvc全得现培训,不过学习曲线实在是低,把架构搭好之后,绝大部分的人都能很快适应,并快速开发。而struts2的开发,以前2个项目,都是刚好别人搭的架构(完全照搬天乙社区里面的开发方式),实际做功能测试和性能测试时,问题成堆。struts2的数据绑定简直就是灾难,新手经常性的把参数给弄乱。7 C9 y% ]$ P. \7 _: ?
# f; l, J( d" {9 D, x0 m& I! y |
|