TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置。spring3 mvc可以认为已经100%零配置了(除了配置spring mvc-servlet.xml外)。3 W [7 w Q2 i9 w+ {. \$ z/ R
" ]$ H8 y* Q4 U5 F' jSpring MVC和Struts2的区别:) N) Y, K T9 T# V* y5 F s# [
: t+ h& O3 A8 |3 B- m& y机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是 servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。# ^7 h; f. {2 T; N% `; D) ? w/ F$ d
4 Z! W- Q1 H9 X" b$ X3 |
性能: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上下文。
: e6 O/ t: [3 c- R
+ V8 @2 T7 T, j1 y& H参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。7 j; b5 }9 P+ q' o& K
1 b+ L |$ E# x! [4 i设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。3 C* t$ y8 k( d9 i/ ]0 u4 G' s
) `* H; I& ]% x2 n* V' y
intercepter的实现机制: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变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。
; n5 B/ {" t: c2 Y
# l6 j9 U# ?% v) \# d1 C另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。送上一段代码:
# I% X! o( }4 ?# ]3 S; n% ^% S% v
" r% [* K# E1 N2 z@RequestMapping(value=“/whitelists”)3 N) V; ?+ i% {" m+ m$ h( H
. \9 d! }5 e4 s- i; [5 k
public String index(ModelMap map) {* O4 A, K2 K b# v
: k! T* \" X; r9 l4 X$ ~' T
Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId());% a Y1 U8 b6 _, w3 E0 r
: s n4 F3 X" s% _
List groupList = groupManager.findAllGroup(account.getId());; @& `% e$ ?- g3 }- L( {
- s* f$ D; y6 H0 I& t4 P, g+ ]
map.put(“account”, account);+ o# g5 h6 K& v
' E: f( O- O, C0 n# D# `5 j
map.put(“groupList”, groupList);+ F9 b6 R) y* E/ _
& x/ L. l7 ^' @& Z* a- o/ n
return “/group/group-index”;) m. k, E/ C. h: j9 k( v# A
. l6 Q6 }. n) M3 V8 y# y h5 I}( X: ~3 @: M8 N& X/ D+ U
: X; W! S9 D+ \* ~# a+ u
// @ResponseBody ajax响应,处理Ajax请求也很方便
, Q7 ~: \9 [3 @, k S( c- [( i0 g6 A
@RequestMapping(value=“/whitelist/{whiteListId}/del”)/ H9 f5 i! W8 C
$ ~" f5 s# _; O! a
@ResponseBody9 {4 x- w% N) n# q( q, x
+ n0 J4 ]$ p8 Q3 c" _* wpublic String delete(@PathVariable Integer whiteListId) {
( R, c" y7 q" N) D# k! R* |0 t* k, G. x5 x3 Y& ?9 C: \# @2 y
whiteListManager.deleteWhiteList(whiteListId);
" p% S/ ^. d$ o: a) i, n& B- _$ L+ t# L ]9 [) r- \8 ^
return “success”;, r" C* p$ x( W [! d
7 N2 p, o, w: f9 b6 ~1 d5 Q, G: z7 Y2 }
}
/ S" _( H& N9 v$ F" n===========================================================
. Y8 z1 ]+ ~0 a$ w n. [' I下面列出我对这两个都很优秀的框架的评估,请各位帮忙评判一下: # l5 O8 Z% Y7 E: U* V* c
2 c) Z. [* [6 v) }: y------------------------SpringMVC-----Struts2.0(webwork2)--------------获胜者
5 S3 A E4 d* H: N4 g开发效率----------------5-------------?---------------------------------?
9 v% ~* `" o' r1 x) ?$ L
; a7 ?1 M( f, v7 N% I8 H; Y& M运行效率----------------5-------------4(action非单例)------------------SpringMVC
. I6 k+ y4 ~4 m3 W) ]5 u8 P/ R6 H: m* q' q" P6 e
学习成本----------------4-------------3(同事反应学习曲线比较陡)--------SpringMVC
: T7 u' b) X5 d+ O# }& d) ~. V
: G" s4 O$ n8 G% w* L0 M# n) E" H与Spring集成------------5(无缝集成) 4----------------------------------SpringMVC , N; N8 r% i$ U: C, v& P3 U4 ?
难易程度 0 }. r5 c: ?3 ]6 O' o
: b: e3 ~2 Z: o( evalidator集成-----------4(commons)--5----------------------------------Struts2.0
; _! g# j" @) ^7 _- u/ l9 n4 Q8 E/ j5 Q$ [! G
AJAX集成----------------4-------------5(丰富的tag支持)-----------------Struts2.0 + D% E5 |) n1 f
4 [. T5 ?+ u$ r! l$ ^
可测试性----------------5-------------5----------------------------------平局
/ h& G9 n; p& c0 g% Y# m% D! V$ D. H, t: `/ R. K
I' j& P" h) U! z9 d0 g
5 w0 a w, L5 t& z( i7 W1 S7 Q从实际开发效果来看,在4个项目用了spring2.5 mvc,2个项目用struts2,发现招聘时,都是struts1,struts2的求职者,而spring mvc全得现培训,不过学习曲线实在是低,把架构搭好之后,绝大部分的人都能很快适应,并快速开发。而struts2的开发,以前2个项目,都是刚好别人搭的架构(完全照搬天乙社区里面的开发方式),实际做功能测试和性能测试时,问题成堆。struts2的数据绑定简直就是灾难,新手经常性的把参数给弄乱。3 z9 L8 ^; k3 m+ C
' O. Y2 q" e- a+ | u0 {& P
|
|