spring mvc使用总结
spring mvc 使用流程
spring mvc的运行流程:
- MVC框架的出现是为了将URL从HTTP的世界中映射到JAVA世界中,这是MVC框架的核心功能
- 首先整个M-V-C的流程都依赖于Spring容器完成对象创建(IOC)和对象依赖注入(DI),
- 并充分利用注解减少xml配置,本着约定优于配置的原则.
- 利用一个servlet作为中央控制器,接收客户端请求,
- 并转发到相应的控制器(controller)做实际的数据采集,数据类型转化,校验,组装成model,
- 调用service业务逻辑,然后将处理结果封装model(map键值对类型)传给view试图,
- 根据视图解析器根据相应的试图渲染结果返回给客户端.
- 控制器根据
<servletName>-servlet.xml配置选择相应的请求映射器
spring mvc的优点:
- SpringMVC设计思路:将整个处理流程规范化,并把每一个处理步骤分派到不同的组件中进行处理。
- 这个方案实际上涉及到两个方面:
- 处理流程规范化 —— 将处理流程划分为若干个步骤(任务),并使用一条明确的逻辑主线将所有的步骤串联起来
- 处理流程组件化 —— 将处理流程中的每一个步骤(任务)都定义为接口,并为每个接口赋予不同的实现模式
- 处理流程规范化是目的,对于处理过程的步骤划分和流程定义则是手段。因而处理流程规范化的首要内容就是考虑一个通用的Servlet响应程序大致应该包含的逻辑步骤:
- 步骤1—— 对Http请求进行初步处理,查找与之对应的Controller处理类(方法) ——HandlerMapping
- 步骤2—— 调用相应的Controller处理类(方法)完成业务逻辑 ——HandlerAdapter
- 步骤3—— 对Controller处理类(方法)调用时可能发生的异常进行处理 ——HandlerExceptionResolver
- 步骤4—— 根据Controller处理类(方法)的调用结果,进行Http响应处理 ——ViewResolver
- 正是这基于组件、接口的设计,支持了SpringMVC的另一个特性:行为的可扩展性。
Spring MVC对比 Struts2:
- 实现机制
- struts2框架是类级别的拦截,每次来了请求就创建一个controller中对应的Action,然后调用setter getter方法把request中的数据注入 。
- struts2实际上是通过setter getter方法与request打交道的。struts2中,一个Action对象对应一个request上下文。
- spring3 mvc不同,spring3mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去。
- 在spring3mvc中,一个方法对应一个request上下文,而方法同时又跟一个url对应。
- 所以说从架构本身上 spring3 mvc就容易实现restful url。
- 而struts2的架构实现起来要费劲,因为struts2 action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法。
- Request数据共享
- spring3mvc的方法之间基本上独立的,独享request response数据。请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量。
- 而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的。这不会影响程序运行,却给我们编码、读程序时带来麻烦 。
spring mvc的缺点:
- 项目全用注解如果事先不定好规范,后期不利于维护,配置文件可读性强,但是如果定好规范比如:
- 控制器的包路径=请求路径=映射文件jsp路径,这样也会是一目了然了,后期维护人员找类也好找。
使用spring mvc:
- 配置
- spring-mvc的注解
- 请求控制注解
- http请求头注解
- spring-mvc拦截器
- 请求表单页面
- 自定义类型属性绑定
- controller采集数据,校验数据,初始化参考数据,安装token防止表单提交
- 清除token,控制器返回/重定向到视图
- 国际化
本文由作者按照 CC BY 4.0 进行授权