江阴网络公司做网站,泰州市建设工程质量监督站网站,i网站建设,贵安新区网站建设一、DispatcherServlet的继承关系 1、FrameworkServlet HttpServlet中的doGet等方法在FrameworkServlet之中重写了#xff0c;都是调用该方法#xff1a; 在这个方法内部调用doServlce的方法 这个doService的方法在FrameworkServlet中是一个抽象方法#xff0c;说明是交给它…一、DispatcherServlet的继承关系 1、FrameworkServlet HttpServlet中的doGet等方法在FrameworkServlet之中重写了都是调用该方法 在这个方法内部调用doServlce的方法 这个doService的方法在FrameworkServlet中是一个抽象方法说明是交给它的子类去重写的即就是DispatcherServlet。
2、DispathcerServlet 这也是SpringMVC的核心组件用来处理请求重写实现了doService方法。 在doService方法中最核心的是调用doDispatch来做转发等操作。 2.1 doDispatch 随便写了个控制器测试 当发送/car请求时候在doDispatch中获取到请求 在request变量中就有请求路径。 之后执行到这一步 在这一步执行完之后就找到了所对应的控制器及上面的 Car() 方法。
2.2 mappedHandler的确定 this.getHandler方法 Nullableprotected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {if (this.handlerMappings ! null) {Iterator var2 this.handlerMappings.iterator();while(var2.hasNext()) {HandlerMapping mapping (HandlerMapping)var2.next();HandlerExecutionChain handler mapping.getHandler(request);if (handler ! null) {return handler;}}} 其中handlerMappings初始就有5个 主要的目的就是 在这五种类型的处理器选取能够匹配当前请求的handler。 spring中的web项目启动的过程中MVC就会扫描所有的Controller并且解析其中的注解全部保存到handlerMappings中。 执行完这行代码后可以在 mapping变量中的看到 说明标注注解RequestMapping的方法都已经被注册了。 之后SpringMVC经过对比找到了请求路径为/car的控制器及其方法之后返回handler即可。
HandlerExecutionChain handler mapping.getHandler(request); 确定handler的过程首先是匹配url比如有好几个/car的请求路径但是方法不同。 然后再一个一个确认请求方法最终返回所对应的handler。也就是mapping,getHandler中的方法。