struts2和SpringMVC同是mvc框架,它们有什么不同?首先看一张图:
它们都用核心分发器等相同的组件,但是它们还是不一样的。
第一、MVC框架的出现是为了将URL从HTTP的世界中映射到JAVA世界中,这是MVC框架的核心功能。而在URL这一点SpringMVC无疑更加优雅。
第二、从设计实现角度来说,我觉得SpringMVC更加清晰。即使我们去对比Struts2的原理图和SpringMVC的类图,它依然很让人困惑,远没有SpringMVC更加直观:
看它们的处理流程如下:
SpringMVC设计思路:将整个处理流程规范化,并把每一个处理步骤分派到不同的组件中进行处理。
这个方案实际上涉及到两个方面:
处理流程规范化 —— 将处理流程划分为若干个步骤(任务),并使用一条明确的逻辑主线将所有的步骤串联起来
处理流程组件化 —— 将处理流程中的每一个步骤(任务)都定义为接口,并为每个接口赋予不同的实现模式
处理流程规范化是目的,对于处理过程的步骤划分和流程定义则是手段。因而处理流程规范化的首要内容就是考虑一个通用的Servlet响应程序大致应该包含的逻辑步骤:
步骤1—— 对Http请求进行初步处理,查找与之对应的Controller处理类(方法) ——HandlerMapping
步骤2—— 调用相应的Controller处理类(方法)完成业务逻辑 ——HandlerAdapter
步骤3—— 对Controller处理类(方法)调用时可能发生的异常进行处理 ——HandlerExceptionResolver
步骤4—— 根据Controller处理类(方法)的调用结果,进行Http响应处理 ——ViewResolver
正是这基于组件、接口的设计,支持了SpringMVC的另一个特性:行为的可扩展性。
机制上:
struts2是类级别的拦截, 一个类对应一个request上下文, struts是在接受参数的时候,可以用属性来接受参数, 这就说明参数是让多个方法共享的,这也就无法用注解或其他方式标识其所属方法了
配置: