Struts2和SpringMVC的7方面区别

Struts2和SpringMVC的区别:

1、框架:

Struts2和SpringMVC都是控制层的框架

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互,采用拦截器的机制来处理用户的请求。

SpringMVC是spring的一个子模块 基于MVC的一个框架 无需中间整合层来整合 ,

前端控制器是DispatcherServlet采用Servlet实现的,Servlet是在调用时初始化,比Fileter先调用,服务停止后销毁;应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类

2.功能:

Struts2:

1、获取表单内容,封装成对象(封装请求参数)

2、类型转换(8种基本数据类型,Date,数组,List,Map)

2、根据请求的参数转发给适当的控制器

3、校验(手动校验,xml校验)

4、国际化(i18n)

5、拦截器

6. 异常处理机制,只需在配置文件中配置异常的映射,即可对异常做相应的处理。

7.  丰富的标签库,大大提高了开发的效率。

Springmvc:

1、Spring框架集成(如IoC容器、AOP等);

2、提供强大的约定大于配置的契约式编程支持;

3、能简单的进行Web层的单元测试;

4、支持灵活的URL到页面控制器的映射;

5、非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用);

6、非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API;

7、提供一套强大的JSP标签库,简化JSP开发;

8、支持灵活的本地化、主题等解析;

9、更加简单的异常处理;

10、对静态资源的支持;

11、支持Restful风格。

3、拦截机制

Struts2有自己的拦截Interceptor机制,是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype(不是会出现线程并发问题),然后通过setter,getter把request数据注入到属性。Struts2中,一个Action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了

SpringMVC用的是独立的Aop方式,是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过Model,ModelAndView 返回给框架。在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller,没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。

所以Struts2的配置文件量是比SpringMVC大。

4、性能方面:

Struts2:要配置xml(每一次请求都要在struts.xml配置相应的路径,要对Action进行配置)是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,
SpringMVC:实现了零配置(springmvc.config的配置只是声明扫描的controller所在的包,以及跳转jsp等模板,获取静态资源js,css等的配置,并没有对Action进行配置),是基于方法的拦截,有加载一次单例模式bean注入
所以,SpringMVC开发效率和性能高于Struts2。


5、配置方面:

 Struts2:由于是基于类级别的拦截,每一次请求都要在struts.xml进行配置,所以配置量比较大

SpringMVC:是基于方法级别的拦截,每一次请求可以在类通过@RequestMapper来处理,不用配置xml文件进行请求的处理

6、设计思想:

Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。

7、集成方面:

Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。

SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可


我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。

猜你喜欢

转载自blog.csdn.net/weixin_39220472/article/details/80297128