SpringMVC工作流程

SpringMVC的工作流程

1. SpringMVC的工作流程

  1. 用户发送请求至前端控制器(DispatcherServlet)
  2. 前端控制器(DispatcherServlet)收到请求,调用处理器映射器(HandlerMapping)
  3. 处理器映射器找到具体的处理器(可以根据XML配置,注解,实现接口进行查找),生成处理器对象以及处理器拦截器(如果有则生成)一并返回给前端控制器
  4. 前端控制器调用处理器适配器(HandlerAdapter)
  5. 处理器适配器根据适配调用具体的处理器(conntroller)
  6. 处理器执行完成返回ModelAndView
  7. 处理器适配器把处理器返回的ModelAndView返回给前端控制器
  8. 前端控制器把ModelAndView发送给视图解析器(ViewReslover)
  9. 视图解析器解析ModelAndView,返回具体的View
  10. 前端控制器根据View进行视图渲染
  11. 前端控制器响应用户

2. 具体流程步骤

  1. 用户发送请求到前端控制器,前端控制器不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制
  2. 前端控制器会发送请求给处理器映射器,处理器映射器就会把请求映射为HandlerExecutionChain对象,包含一个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略
  3. 前端控制器发送请求给处理器适配器,适配器把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器
  4. 处理器会根据适配的结果去调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView 对象(包含模型数据、逻辑视图名)
  5. ModelAndView的逻辑视图名发送到视图解析器,把逻辑视图名解析为具体的view,通过这种策略模式,很容易更换其他视图技术
  6. View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术
  7. 返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束

3. 组件说明

  1. 前端控制器DispatcherServlet(不需要工程师开发),由框架提供
    作用:整个流程的核心,接受请求,相应结果,降低各个组件之间的耦合度
  2. 处理器映射器
    作用:根据用户请求的URl找到处理器,SpringMVC提供了不同映射器实现不同的映射方式,有注解,实现接口,配置文件方式
  3. 处理器适配器
    作用:按照特定规则去执行处理器
    会把处理器包装成适配器,这样就可以支持多种类型的处理器,类比笔记本的适配器(适配器模式的应用)
  4. 处理器Handler(需要工程师开发)
    编写处理器时,需要按照特定的规则去编写,这样才能通过适配器去执行处理器
    Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
    由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。
  5. 视图解析器View resolver(不需要工程师开发),由框架提供
    作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
  6. 视图View(需要工程师开发jsp…)
    视图,即展示给用户的界面,视图中通常需要标签语言展示模型数据。

4.SpringMVC是什么

springMVC是一个MVC的开源框架,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,springMVC=struts2+spring,springMVC就相当于是Struts2加上sring的整合,springMVC是spring的一个后续产品,其实就是spring在原有基础上,又提供了web应用的MVC模块,可以简单的把springMVC理解为是spring的一个模块(类似AOP,IOC这样的模块),网络上经常会说springMVC和spring无缝集成,其实springMVC就是spring的一个子模块,所以根本不需要同spring进行整合。
5.什么是MVC设计模式
MVC即Model-View-Controller,将应用按照Model(模型),View(视图),Controller(控制)这样的方式分离

  • 模型(model):是业务的处理以及业务规则的制定。模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计是MVC最主要的核心。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只是组织管理这些模型,以便于模型的重构和提高重用性
  • 视图(view):代表用户交互界面,对于Web应用来说,可以是HTML,也可能是jsp、XML和Applet等。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理
  • 控制(Controller):可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理

6. SpringMVC的特点

  • 清楚的角色划分:控制器(controller),验证器(validator),命令对象(command object),表单对象(formobject),模型对象(model object),Servlet分发器(DispatcherServlet),处理器映射(handler mapping),视图解析器(view resolver)等,每一个角色由一个专门的对象来实现

  • 强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器(validator)的引用

  • 可适配、非侵入:可以根据不同的应用场景,选择合适的控制器子类 (simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器 (比如Action/ActionForm)继承

  • .可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类

  • 可定制的绑定(binding) 和验证(validation):比如将类型不匹配作为应用级的验证错误, 这可以保存错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象,需要手动解析它并转换到业务对象

  • 可定制的handlermapping和view resolution:Spring提供从最简单的URL映射, 到复杂的、专用的定制策略。与某些webMVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活

  • 灵活的model转换:在Springweb框架中,使用基于Map的 键/值对来达到轻易地与各种视图技术的集成

  • 可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等

  • 简单而强大的JSP标签库(SpringTag Library):支持包括诸如数据绑定和主题(theme) 之类的许多功能

  • JSP表单标签库:在Spring2.0中引入的表单标签库,使得在JSP中编写 表单更加容易

  • Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session

7. SpringMVC的优点

  • 让我们能非常简单的设计出干净的Web层和薄薄的Web层
  • 进行更简洁的Web层的开发
  • 天生与Spring框架集成(如IoC容器、AOP等)
  • 提供强大的约定大于配置的契约式编程支持
  • 非常灵活的数据验证、格式化和数据绑定机制
  • 支持Restful风格

8. SpringMVC的常用注解和作用

  • @Controller:出现在类上,表示这个类是控制器
  • @RequestMapping:给控制器绑定一个URL
  • @ResponseBody:把返回去的Java对象转换成Json对象,返回给前端
  • @RequestParam:当表单参数和方法形参名字不一致时,做一个名字映射
  • @RequestBody:把前端传过来的Json转化成Java对象
  • @PathVarible:用于获取uri中的参数,比如user/1中1的值

9. SpringMVC和Struts2的对比

  • 框架机制:SpringMVC的入口是servlet,struts2的入口是filter
    filter在容器启动后初始化,在服务停止后销毁,Servlet在调用时初始化,在服务器停止时销毁,先于Filter
  • 拦截机制:Struts2:Struts2框架是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype(否则会出现线程并发问题),然后通过setter,getter把request数据注入到属性
  • 一个Action对应一个request,response上下文,在接收参数时,可以通过属性接收,说明属性参数是让多个方法共享的
  • Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了
  • SpringMVC::SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又和一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架
  • 在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改
  • Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大
  • 性能方面:SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。而Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,所以,SpringMVC开发效率和性能高于Struts2
  • 配置方面:spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)SpringMVC可以认为已经100%零配置
  • 设计思想:Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展
  • 集成方面:SpringMVC集成了Ajax
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,关于springmvc工作流程,我可以为您解答。Spring MVC工作流程主要包括以下几个步骤:首先,用户发送请求到前端控制器DispatcherServlet;其次,DispatcherServlet将请求映射到对应的处理器HandlerMapping;接着,HandlerMapping将请求和处理器适配器Adapter进行绑定;然后,适配器Adapter将请求和处理器进行绑定;处理器执行业务逻辑并返回一个ModelAndView对象给适配器Adapter;适配器Adapter将ModelAndView返回给DispatcherServlet;最后,DispatcherServlet将ModelAndView发送给ViewResolver进行视图解析,最后再返回给用户响应结果。希望能对您有所帮助。 ### 回答2: Spring MVC是一个基于MVC(Model-View-Controller)架构的Web框架。其工作流程如下: 1. 客户端发送请求到DispatcherServlet(控制器)。DispatcherServlet是所有请求的入口,它负责协调整个请求处理过程。 2. DispatcherServlet 根据请求的URL映射,将请求分发给对应的处理器(Controller)。处理器根据请求的参数进行处理,并返回一个ModelAndView对象。 3. DispatcherServlet将返回的ModelAndView对象交给视图解析器(View Resolver)进行视图解析,确定最终要返回的视图。 4. 视图解析器解析完视图后,通过View对象来渲染返回的结果。View对象可以是JSP、HTML、JSON等多种形式。 5. 渲染完结果后,视图将结果返回给DispatcherServlet。 6. DispatcherServlet将视图返回给客户端,完成响应过程。 Spring MVC工作流程简洁高效,通过DispatcherServlet的分发和控制,实现了请求的处理和响应的流程控制。同时,Spring MVC还提供了灵活的配置和扩展机制,可以方便地定制整个框架的行为和业务逻辑。这使得Spring MVC成为了广泛应用的Web开发框架之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值