0
我在上下文初始化时遇到了问题。我不使用xml配置文件。我阅读了许多关于类似问题的文章,但是..我想用不含xml的spring配置,但出现错误。请帮忙解决。在WebMVCConfig资源[/com.chat.config/]中定义名称为'resolver'的bean时出错
`org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'resolver' defined in com.chat.config.WebMVCConfig: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.view.InternalResourceViewResolver]: Factory method 'resolver' threw exception; nested exception is java.lang.StackOverflowError
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173)
这里是我的WebMVCConfig
@Configuration
@ComponentScan("com.chat")
@EnableWebMvc
public class WebMVCConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/scripts/**").addResourceLocations("/scripts/");
registry.addResourceHandler("/styles/**").addResourceLocations("/styles/");
registry.addResourceHandler("/images/**").addResourceLocations("/images/");
registry.addResourceHandler("/fonts/**").addResourceLocations("/fonts/");
registry.addResourceHandler("/pages/**").addResourceLocations("/views/");
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public InternalResourceViewResolver resolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver().setPrefix("/views/");
resolver().setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
}
WebInit
public class WebInit extends
AbstractAnnotationConfigDispatcherServletInitializer {
// Этот метод должен содержать конфигурации которые инициализируют Beans
// для инициализации бинов у нас использовалась аннотация @Bean
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{
WebMVCConfig.class
};
}
// Тут добавляем конфигурацию, в которой инициализируем ViewResolver
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{
WebMVCConfig.class
};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/","/login", "/chat","/dialog","/registration" };
}
}
的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
<modelVersion>4.0.0</modelVersion>
<groupId>MyChat</groupId>
<artifactId>MyChat</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
</project>
= DDDDDD,ahahaha,THX,人))))也就是说,很多的乐趣))))我一直在解决它2-3个小时..它是如此愚蠢的)谢谢你这么多! –
请再告诉我一件事!默认页面将是“index.jsp”我该如何改变它? 我是对的,现在春天通过路径查找页面:/ webapp/views? 或/ webapp /? –
是的,你是对的。不确定关于默认页面。我想你可以设置一个请求映射到''/“',这将作为默认工作。您也不需要手动指定每个映射。除非你想使用白名单,否则你可以使用'/ **',但是在添加页面时需要大量的维护。 –