SpringMVC的大致流程
SpringMVC中的对象实际上就是在Spring的容器中,随着Spring容器的加载启动而进行。
在最后不走视图解析器时返回自定义内容,一般都是字符串。若是返回对象的话通过java序列化不太妥当(使用了java序列化想要反序列化还是需要java程序),所以返回对象时一般转换为json,如果使用了转换器,若是context-type=text/html就是浏览器接收到的就是json字符串,若是context-type=application/json就是json对象。
SpringMVC的执行过程及组件
入口是Servlet,将web层进行职责解耦。
清晰的角色划分:控制器(controller)、验证器(validator)、 命令对象(command object)、表单对象(formobject)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、视图解析器(view resolver)等。每一个角色都可以由一个专门的对象来实现。
具体说明:
Handler(处理器):继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理,由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。(可以理解为就是我们写的Controller)。
View(视图):通过页面标签技术将模型数据通过页面展现给用户,一般指的是程序员根据业务需求开发具体的页面。我们最常用的就是jsp(本质就是servlet程序),其次就是thymeleaf模板引擎。
DispatcherServlet(中央控制器):用户请求到达前端控制器,也就是MVC中的C,是整个流程控制的中心,由它来调用其他组件处理用户的请求,该存在降低了组件之间的耦合性。(其是核心也就是个Servlet,可以简单理解为门卫传达室一个请求进来先来到传达室,之后调用不同的人来处理问题)
HandlerMapping(处理器映射器):该映射器负责根据用户请求url找到Handler即处理器,在springmvc中提供了不同的映射器实现不同的映射方式(xml配置文件、实现接口方式、注解方式)。其返回的是一个处理器链,其中包含了filter以及handler(每个请求对应的)。
实际上就是个map,放了一堆数据,key是url,value就是handler(你写的controller),一个请求来了调用下map.getUrl(url)就知道哪个类处理这个请求了。实际上会将这个url对应的拦截器、处理器都拿到。
HandlAdapter(处理器适配器):该适配器对处理器handler进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器执行。
通过调用相应的方法,生成最终得到的ModelAndView。
ViewResolver(视图解析器):负责将处理结果生成view视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
实际上就是来解析modelAndView的,有个常用最简单的功能就是拼接字符串,给你加个前缀后缀更加方便,并且解析很多类型的视图。