天天看点

SpringMVC和Struts2的比较

整体的框架机制

    1.Struts2的入口是StrutsPrepareAndExecuteFilter,SpringMVC的入口是通过DispatcherServlet实现.

    2.Struts2的Filter的过滤器是在容器启动之后进行初始化,服务停止之后进行销毁,SpringMVC是在Servlet在调用的时候进行初始化,优先于Filter调用,服务停止后销毁.

拦截机制

    Struts2的拦截是基于类进行拦截,每次请求就会创建一个Action,和Spring整合的时候Struts2的ActionBean注入的作用于是原型模式即prototype(因为Struts2每次的请求过来都会创建一个Action他是一个多例模式,线程安全存在问题,因此要在配置prototype),通过setter/getter把request的数据注入到属性中.

    Struts2中Action的方法可以对应一个url,但是其中类属性确是被所有的方法共享,无法使用注解标识器属性所属的具体的方法.

    Struts2中一个Action对应一个Request,Response上下文,在接受参数的时候,可以通过属性接受,属性参数是被多个方法共享的.    

    Struts2的拦截是Interceptor机制,SpringMVC用独立AOP方式,Struts2的配置文件量还是闭SpringMVC的要大.

SpringMVC

    SpringMVC是方法级别的拦截,一个方法对应一个request,方法基本上是独立的,独自享有request和response数据.而在每个方法的上面又对应一个url,参数的传递是直接注入到方法中通过@RequestMapping(value="/login",method="RequestMethod.POST")直接注入,然后Controller处理完结果返回ModelAndView,最后在通过视图解析器返回给用户.

    SpringMVC是一个单例的线程是安全的.在和Spring整合的时候,默认对所有的请求只会创建一个Controller,如果改变默认的作用域需要添加@Scope注解.

性能比较

    SpringMVC实现零配置,SpringMVC是基于方法的拦截,加载一次单例模式bean注入.而Struts2是类级别拦截,每次请求需要对应创一个新的Action实例,需要加载所有的属性值注入,因此性能的话SpringMVC高于Struts2

配置方面

SpringMVC是Spring家族的相对于Struts2来说原装的肯定好,实现无缝契合.安全上也比Struts2高

 设计思想

    Struts2是OOP的编程思想,而SpringMVC是在Servlet上的扩展

集成方面

    SpringMVC集成了Ajax,使用只需要注解@ResponseBody实现,然后返回数据即可,Strtus2拦截器也集成了Ajax,在Action的处理中一般需要安装插件或者写代码,使用起来相对于SpringMVC有点不方便.

总之使用什么框架是根据业务的需求来进行的,本人的观点没有抨击任何框架的意思,能实现业务功能的框架就是好框架没有好坏之分.