DispatcherServlet在初始化的时候load-on-startup是-1,表示这个servlet会在第一次请求的时候
才加载,而不是应用一启动就初始化,初始化就是把默认的各种解析器,HandlerMapping,HandlerAdapter
获取到并保存到自己的成员变量中。这些默认参数保存在DispatcherServlet.properties中,可以去
idea中搜索出来看看
1:RequestMappingHandlerMapping,这个类主要的作用是创建一个HandlerExecutionChain,
handler就是我们要执行目标controller中的方法,顾名思义HandlerExecutionChain就是一个
执行链条,在这条链条上,前面是我们配置的和内置的spring Interceptor--拦截器,最后就是
handler(请求处理方法),404就是这里产生的,如果在创建HandlerExecutionChain的时候根据
你的请求路径没有找到你写的目标方法,也就是没找到handler,自然就嗝屁了404。
2:RequestMappingHandlerAdapter 这个类主要的作用就是在HandlerExecutionChain的interceptor执行
完毕之后执行真正的handler方法调用,说小了就是反射调用我们写的方法,说大了,还包括参数,和
返回值的处理,视图的解析,和各种逻辑。
理解以上两个api就能很好的理解DispatcherServlet工作的原理进而再也不会出现404了









网友评论