1.问题
访问路径http://10.118.30.52:8088/helloWorld/hello后会报404错误,原因是springmvc配置文件中的包扫描路径错误.修改配置如下:
<context:component-scan base-package="AgileShare" />
2.问题跟踪发现
1.打断点到正常的controller代码中,如下图:
2.通过观察方法的调用栈内存,可以看到方框内主要是servlet的调用方法,属于服务器端的调用,所以将断点打在spring.web的doDispatch()方法中.
3.通过观察doDispatch方法 ,可以定位到获取handler的方法,如下图是获取到的handler类及方法:
4.继续追踪这个getHandler(processedRequest)方法
会发现这个getHanler方法依然属于DispatcherServlet类,this.handlerMappings属性下的mappingRegistry属性记录了所有的springmvc的初始化bean.
5.继续追踪这个this.handlerMappings属性是被谁初始化,发现初始化方法中会传入context
但是打断点后重新请求无效,发现这个initStrategies方法是服务器启动后初始化调用的.可以在下图看到调用时是继承父类中的方法调用的.
继续追踪父类,通过方法调用占可以看出调用的是哪一个父类即FrameworkServlet.至此已经追踪到顶层了
看怎么初始化所有实例bean还要追踪
如下图执行完这个方法后所有的初始化类都会进入到context及webApplication中