基本情况
这两天刚开始学SSM框架,基于注解整合时报错
Servlet.init() for servlet springmvc threw exception
在网上查到的解决方法:
- 把 JDK 更换为 1.7 或 1.7 以下版本(以前到如果SSM框架能用jdk1.8跑起来)
- 把 Spring 升级到 4.0 RELEASE 或以上版本。(我的已经是4.2.0)
- 少写了 @Service 或者 没写 @Autowired 或者 没写 @Controller(检查了一遍都加上了)
- dao层出现问题(检查后发现确实又问题,列名写错了,但是改完后依然报同样错误)
- 配置文件错误,mapper 注入出时少些或者多写了一层 。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.nyist.dao.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
而dao层在com.nyist.dao中
因此要把.mapper去掉
然而我检查了一下,发现并没有范这个错误
- 最后采用了 jl_net老哥给出的方法
<context:component-scan base-package="com.team07.controller" ></context:component-scan>
配置springmvc.xml扫表注解包时,我向以前写单独的springmvc一样只扫描了controller包,实际上所有含注解的包都要在这里进行扫描,因此应该写为
<context:component-scan base-package="com.team07" ></context:component-scan>
同样,如果只扫描包mapper的话因为controller没办法接受请求会报404 not found错误
然而,这还没完:
改完后我又多加了一个controller,并且加上了对应的pojo和mapper,但是运行时再次报了Servlet.init() for servlet springmvc threw exception!!!
当时一看到这个头都蒙了,返回去有检查了一遍扫描包,这次确实没错,回去检查代码。
原来是我前面图省事新建的controller和pojo中的类名没改,这样mapper映射时就会找到两个类,同样会报Servlet.init() for servlet springmvc threw exception错误!
最后总结,码代码还是要细心啊,写的时候多检查两遍,后面能省太多时间了
错误详细信息:
javax.servlet.ServletException: Servlet.init() for servlet springmvc threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
root cause
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adminController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.team07.service.AdminService com.team07.controller.AdminController.adminService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.team07.service.AdminService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {
@org.springframework.beans.factory.annotation.Autowired