流程图

图片来自尚硅谷佟刚的Springmvc视频教学。

Spring流程设计 springmvc流程图讲解_spring mvc

简要的说:
DispatchServlet根据我们的请求进行拦截。并通过HandlerMapping将我们映射路径匹配到响应的Controller上面,然后进行业务处理返回我们的ModelAndView(数据模型),然后通过我们的ViewResolver(视图解析器),将我们的数据渲染到对应的View(视图)上面。完成一次请求。

流程说明:
1、首先我们用户发送一个请求,然后会与被配置在web.xml中的SpringDispatchServlet的url-pattern进行匹配,然后匹配在Springmvc中是否存在对应的映射。如果不存在的话,则会查看是否配置了【mvc:default-servlet-handler】这个主要是检查请求是否为静态资源,如果有这个配置的话,且匹配成功,则会找到我们的静态资源,如果匹配不成功的话,则会给我们返回404页面,但是在控制台不会打印消息。如果这个配置不存在,则会进行控制台打印没有对应的路径映射。并且返回404页面。

2、在Springmvc中存在映射,则会由我们的HandlerMapping将完成客户请求到Controller映射,在HandlerMapping中获取HandlerExecutionChain对象,这个处理器调用链包含了处理器对象 以及和这个处理器相关的拦截器。所以在这个对象中包含了我们的目标方法,以及相关拦截器等等。

3、获取HandlerAdapter对象,这个适配器会完成我们相关的表单数据校验,数据类型的转换等等都是由我们的这个HandlerAdapter对象进行完成。最终还是调用我们的目标方法。

4、调用我们的拦截器相关方法,最后返回视图,而在返回视图的时候,我们要进行是否存在异常进行判断,如果存在异常的话则会进行我们的异常处理得到新的对象,在不存在异常的情况下,则是进行我们的视图渲染。

Springmvc 与Spring整合关于配置文件的细节

通常情况下,我们对于类似数据源,事务或者整合其他第三方框架时,我们都会将相关配置配置在spring的配置文件中,而不是配置在Springmvc的配置文件中,但是我们还要注意的就是,对于Spring 的IOC 容器和Springmvc的IOC容器扫描的包有重合的部分,就会导致Bean的二次创建,为此我们需要使用【context:component-scan】的子节点属性【context:exclude-filter】【context:include-filter】进行去重操作。
而且也要注意的是在Springmvc的IOC容器中的bean,可以引用Spring IOC 容器中的bean,但是对于Spring IOC 容器中的bean 则不可以引用Springmvc的IOC容器中的bean。

大总结

对于Springmvc来讲我认为,对于配置文件我们应该注意【context:component-scan】【mvc:annotation-driven】【mvc:default-servlet-handler】【mvc:view-controller】

其中我们应该注意的注解有【@RequestMapping】【@PathVariable】【@RequestParam】【@RequestHeader】【@CookieValue】【@SessionAttribute】【@ModelAttribute】【@InitBinder】【@RequestBody】【@ResponseBody】【@ControllerAdvice】【@ExceptionHandler】

最重要的就是一个关于数据模型的处理,传递入参时,我们还要知道POJO作为入参形式,以及传入原生的ServletAPI的作为入参。

关于表单标签的使用,一定要记得引入相关的标签库,还有就是Springmvc的表单标签,能够较方便的进行数据回显,

关于数据的转换,格式化以及数据校验,要知道JSR303,对于数据转换,一般利用内置的就可以了,不需要我们进行自定义转换器。

对于 JSON 的处理,我们要知道Jackson。 国际化i18n的配置一般是用不到的,

而对于文件上传,应该知道利用的是Jakarta Commons FileUpload技术。并且Springmvc没有给我们实现上传功能,需要我们进行装配。

拦截器则是一个重点,因为拦截器也是一个面向切面AOP的原理,并且,拦截器可以用在权限验证,日志打印,事务处理方面。

对于异常处理,我们要知道ExceptionHandlerExceptionResolver。以及使用方法。