Struts2 和 Spring MVC 的区别
Struts2 和 Spring MVC 的区别
【区别1】
Struts2 的核心是基于一个 Filter 即 StrutsPreparedAndExcuteFilter。
Spring MVC 的核心是基于一个 Servlet 即 DispatcherServlet(前端控制器)。
【区别2】
Struts2 是基于类开发的,传递的参数是通过类的属性传递(属性驱动和模型驱动),所以只能设计成多例。
Spring MVC 是基于类中的方法开发的,使用 requestMapping 将 url 和方法进行映射,根据 url 找到 controller 类的方法生成一个 handler 处理器对象(只包括一个method)。传递参数是传到方法的形参上面,所以既可以是单例模式也可以是多例模式。
【区别3】
Struts2 采用的是值栈存储请求以及响应数据,OGNL存取数据。
Spring MVC 采用 request 来解析请求内容,然后由其内部的 getParameter 给方法中形参赋值,再把后台处理过的数据通过 ModelAndView 对象存储,Model存储数据,View存储返回的页面,再把对象通过 request 传输到页面去。
【附】
关于 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;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。