spring mvc
一些web概念:
- servlet:服务端小程序,用来接收并响应用户请求
mvc介绍:mvc是,m(model),v(view),c(controller)的缩写.mvc是一种设计规范,将业务逻辑,数据,显示分离的方法来组织代码.mvc主要降低了业务以及视图之间的耦合度.mvc是一种架构模式,mvc架构
model(模型):数据模型,提供要展示的数据.数据格式,数据模型
view(视图):负责模型数据的展示,一般是用户页面
controller(控制器):接收用户请求,委托给模型进行处理,处理完毕后把返回的模型数据返回给视图,由视图负责进行展示,也就是控制器做了调度员的工作
spring mvc是spring 框架的一部分,全称为spring web mvc
spring mvc的核心组件
- dispatcherservlet:前端控制器,接收用户请求,并根据请求调用合适的处理器(处理类,方法)
- handler:处理器,就是代码里@RequestMapping注解标记的类
- handlerMapping:可以理解为handler的管理器,用于将url或者beanname与具体的处理器关联起来
- simpleUrlHandler:key为配置的路径,如/user,value为具体的Handler如UserController
- BeanNameHandler:没有用过
- exceptionHandlerExceptionResolver:异常处理组件,springboot中的@ExceptionHandler自定义异常注解底层就是异常处理组件做的
spring mvc 核心组件源代码解析
handler
用于处理请求的一个类
handlerMapping
handler需要注册进springmvc的ioc容器中.**abstracturlHandlerMapping.registerhandler(urlPath,handler)**从spring ioc容器中获取handler的bean,再将bean与url放入handlerMap中保存供handlerMapping查询
用于映射url到具体处理类上
springmvc ioc容器会存储一个map,key为url路径,value为handler的Object
dispatcherServlet
dispatcherservlet用于拦截用户的请求,根据用户的请求将它分配给指定handler处理,处理完成后返回给用户
dispcherServlet有doDispatch方法,其中调用getHandler方法,其中就根据handlermapping中注册的handlermap的urlPath查找指定的handler,并交给它处理.
spring mvc的执行流程
-
浏览器发送请求
-
交给tomcat容器
-
web.xml中配置了/*,并且指向dispatcherservlet
-
前端控制器接收处理请求调用合适的处理器(controller)
-
找到@RequestMapping标记的方法,匹配路径
-
处理器处理,返回modelAndView–>前端控制器处理,返回
-
由视图处理器解析返回数据,找到映射路径的页面地址
-
dispatcher找到地址后返回给浏览器
spring mvc的优点
- 层级之间的耦合性得到了大大的减少
- 各层之间分工明确
- 编写代码方便
- 数据验证严谨
- 与spring其他框架无缝衔接
常见错误
所有项目的web.xml都继承tomcat的web.xml,在tomcat的xml中有一个defaultServlet的处理类,用来处理静态资源,但是我们编写自己的dispatcherservlet使用了/的方式,覆盖了tomcat的web.xml,所以所有的静态资源也需要经过前端控制器