开发时,选择Spring mvc ,还是选择Struts2
spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。
spring mvc是基于方法的设计,sturts2是基于类设计的。
操作方法
- 01
spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。 spring mvc是基于方法的设计,sturts2是基于类设计的。 springmvc将url和controller方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method。方法执行结束,形参数据销毁。springmvc的controller开发类似service开发。strts2每次请求都会实例一个action,每个action都会被注入属性。spring mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。
- 02
struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。 由上边原因,SpringMVC的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量,而Struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦,每次来了请求就创建一个Action,一个Action对象对应一个request上下文。
- 03
由于以上原因,springmvc可以进行单例开发,并且建议使用单例开发,struts2通过类的成员变量接收参数,无法使用单例,只能使用多例。 struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。 Spring MVC和Spring是无缝的。 从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。SpringMVC可以认为已经100%零配置。如果是用Spring作为全局控制的话,建议使用它自己的spring mvc吧,无缝整合。
- 04
struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。 这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。 另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。
- 05
spring会稍微比struts快。经过实际测试,struts2速度慢,在于使用struts标签,如果使用struts建议使用jstl。 struts2由于使用时间长,早期版本中的漏洞较多,使用的话建议下载最新版的jar包。而springmvc很少有漏洞,这也是springmvc现在比较流行的一个原因吧。 最后需要说明的是,springmvc和struts2都是很好的java框架,没有谁好谁坏。你可以根据项目需求具体选择。