说明:

(1)为什么写这篇博客?:在【RESTful开发风格2:RESTful开发风格初体验二:开发第一个RESTful风格的项目;】中遇到了【Servlet[springmvc]的Servlet.init()引发异常】问题;这篇博客记录一下;

(2)错误原因简述:【Spring MVC的DispatcherServlet初始化的同时,也加载applicationContext.xml,初始化IoC容器了】→【由此,如果IoC容器不能正常初始化,那么DispatcherServlet也不能正常初始化】→【所以,异常原因很可能是applicationContext.xml文件出问题了】; 

目录

一:异常情况展示;

二:异常分析与排除;

寻找错误原因: 

排除错误: 


 

一:异常情况展示;

启动Tomcat服务器后,报错信息:报错信息太长了,这儿就复制了部分;

11-Nov-2021 01:34:59.121 信息 [RMI TCP Connection(3)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
11-Nov-2021 01:34:59.387 信息 [RMI TCP Connection(3)-127.0.0.1] org.springframework.web.servlet.FrameworkServlet.initServletBean Initializing Servlet 'springmvc'

…………………………
…………………………
…………………………
11-Nov-2021 01:35:07.857 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [D:\apache-tomcat-8.5.64\webapps\manager]
11-Nov-2021 01:35:07.938 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
11-Nov-2021 01:35:07.953 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[D:\apache-tomcat-8.5.64\webapps\manager]的部署已在[96]毫秒内完成

然后,浏览器访问时的报错信息:浏览器上报错的信息,其实和Tomcat服务器那儿的报错信息是一样的:

其中的第一行报错信息是:【有一个name=conversionService的bean,是没有的】

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.handler.MappedInterceptor#0': Cannot create inner bean '(inner bean)#7cdfbb93' of type [org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor] while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#7cdfbb93': Cannot resolve reference to bean 'conversionService' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'conversionService' available

二:异常分析与排除;

寻找错误原因: 

通过报错信息可以看到,是Spring MVC的DispatcherServlet无法初始化;

……………………………………………………

而,可以发现我们初始化DispatcherServlet的时候,是需要加载applicationContext.xml(初始化IoC容器)的;

那么,很自然就能想到,之所以DispatcherServlet无法初始化,是不是因为在初始化IoC容器的时候出现问题了呐?自然,就会想到,是不是applicationContext.xml中【是否存在无法初始化的bean】或者【applicationContext.xml文件哪儿配置错了嘞】;

……………………………………………………

再瞅一眼报错信息:通过报错信息,也发现是【有一个name=conversionService的bean,是没有的】;

……………………………………………………

查看applicationContext.xml中的内容,果然发现了一个无法被初始化的bean“conversionService”;


 即,错误原因是:因为抄了旧代码,而旧代码没有处理干净:没有抄“conversionService”的bean实体,但是却抄了“conversionService”。所以,IoC容器初始化失败,从而导致DispatcherServlet也不能正常初始化了。

排除错误: 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐