报错
Exception in thread “main” org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘resourceHandlerMapping’ defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method ‘resourceHandlerMapping’ threw exception; nested exception is java.lang.IllegalStateException: No ServletContext set
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352)
略…
Caused by: java.lang.IllegalStateException: No ServletContext set
报错解读:
缺少Web环境:ServletContext是Web应用的核心对象,提供Web环境信息。
错误配置:在非Web环境(如普通Java SE应用)中,直接运行依赖Web的配置类会触发此异常。
我的情况:
整合Spring、SpringMVC、Mybatis时(未使用Springboot),随便写了一段程序跑跑测一下数据库操作,然后就报错了:
原因:
这样随便写一个类(非Controller、或者Service类)运行,即不是整个项目放Tomcat中启动,而是直接运行一个类
在不引入SpringMVC,只有Spring时是没有问题的,但整合了SpringMVC后就不行了,因为SpringMVC必须跑在Tomcat环境里
解决:
使用MockServletContext模拟Web环境:修改原程序:
测试运行: