1.SpringMVC是什么?
-
顾名思义SpringMVC是一个基于MVC设计思想的框架。
-
什么是mvc?MVC是模型(model)-视图(view)-控制器(controller)的缩写 ,是一种软件设计思想,主要的作用就是解决应用开发的耦合性,将应用的输入、控制、输出进行强制解耦。
mvc中的模型、视图、控制器分别担负着不同的角色:
-
模型:页数的数据和业务的处理。我们平常用的service和dao层就属于这一层面
-
视图:只用于用户的显示,不进行任何的业务处理。主要用来获取和显示数据
-
控制器:控制视图层与用户的交互,将对应的操作调用对应的模型。简单的说,就是管理交互的
理解了mvc,我们就来说一说mvc的执行过程:用户通过view层向服务器发出请求,controller接收请求后,调用对应的model后获取数据,控制器在将数据返回给view。
Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:
2.SpringMVC处理流程
- 用户请求提交到前端控制器
- 前端控制器请求业务处理给处理器
- 处理器把处理结果返回给前端控制器
- 前端控制器把处理结果交给jsp页面
- jsp页面返回html给前端控制器
- 前端控制器响应客户
3.SpringMVC 详细架构
- 用户发送请求至DispatcherServlet(前端控制器)
- DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
- HandlerMapping根据请求url找到具体的Handler(处理器),可以根据 xml 配置、注解进行查找,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。Handler就是我们定义的controller。
- DispatcherServlet通过HandlerAdapter(处理器适配器)调用Handler(处理器)
- 执行处理器(Controller,也叫后端控制器)。
- Controller执行完成返回ModelAndView
- HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器
- ViewReslover解析后返回具体View
- DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
- DispatcherServlet响应用户
组件说明:
DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
Handler:处理器
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
HandlAdapter:处理器适配器
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
View Resolver:视图解析器
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
View:视图
springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
4.基本入门开发程序步骤
1.创建javaweb工程
2.导入springMVC相关jar包
3.在/WEB-INF/jsp下创建jsp
4.编写Controller类
5.配置SpringMVC.xml,配置组件扫描器扫描@Controller,配置处理器映射器和处理器适配器,配置视图解析器
6.web.xml配置前端控制器
3.核心注解讲解
@Controller 标记为控制器类,让处理器映射器查找到此hadler
@RequestMapping 路径配置
通过RequestMapping注解可以定义不同的处理器映射规则。
URL路径映射解释
@RequestMapping(value="/item")或@RequestMapping("/item")
value的值是数组,可以将多个url映射到同一个方法
@RequestMapping注解作用
1)标记url到请求方法的映射(其实就是通过一段url路径来找到需要访问的controller中的方法)
2) 窄化请求映射:就是在类上面又加入@RequestMapping ,相当于在类上面又定义了一层url
这样的好处就是防止在企业中团队开发的时候, 你和你的同事起的url重名
3)@RequestMapping 可以限定请求类型:
请求类型: post, get, put, delete等,可以在@RequestMapping(value="/list", method=RequestMethod.post) 限制请求的类型
如果定义成如post指定的类型,那么像get这样其他的访问类型将访问不到这个方法,会报405错误
GET和POST都可以的限定,@RequestMapping(method={RequestMethod.GET,RequestMethod.POST})
4.springmvc与struts2不同
-
springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。
-
springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
-
Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。