Servlet[springmvc]的Servlet.init()引发异常;
说明:(1)为什么写这篇博客?:在【RESTful开发风格2:RESTful开发风格初体验二:开发第一个RESTful风格的项目;】中遇到了【Servlet[springmvc]的Servlet.init()引发异常】问题;这篇博客记录一下;(2)错误原因简述:【SpringMVC的DispatcherServlet初始化的同时,也加载applicationContext.xml,初始化IoC容器
说明:
(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也不能正常初始化了。
排除错误:
更多推荐
所有评论(0)