springmvc初始化失败问题跟踪

时间:2021-08-10 17:28:49

 

1.问题

访问路径http://10.118.30.52:8088/helloWorld/hello后会报404错误,原因是springmvc配置文件中的包扫描路径错误.修改配置如下:

<context:component-scan base-package="AgileShare" />

2.问题跟踪发现

1.打断点到正常的controller代码中,如下图:

springmvc初始化失败问题跟踪

2.通过观察方法的调用栈内存,可以看到方框内主要是servlet的调用方法,属于服务器端的调用,所以将断点打在spring.web的doDispatch()方法中.

springmvc初始化失败问题跟踪

3.通过观察doDispatch方法 ,可以定位到获取handler的方法,如下图是获取到的handler类及方法:

springmvc初始化失败问题跟踪

4.继续追踪这个getHandler(processedRequest)方法

 会发现这个getHanler方法依然属于DispatcherServlet类,this.handlerMappings属性下的mappingRegistry属性记录了所有的springmvc的初始化bean.

springmvc初始化失败问题跟踪

5.继续追踪这个this.handlerMappings属性是被谁初始化,发现初始化方法中会传入context

springmvc初始化失败问题跟踪

但是打断点后重新请求无效,发现这个initStrategies方法是服务器启动后初始化调用的.可以在下图看到调用时是继承父类中的方法调用的.

springmvc初始化失败问题跟踪

继续追踪父类,通过方法调用占可以看出调用的是哪一个父类即FrameworkServlet.至此已经追踪到顶层了

springmvc初始化失败问题跟踪

 看怎么初始化所有实例bean还要追踪

 

 springmvc初始化失败问题跟踪

 

springmvc初始化失败问题跟踪

如下图执行完这个方法后所有的初始化类都会进入到context及webApplication中

springmvc初始化失败问题跟踪