我不知道我们在这里做错了什么。我正在尝试建立一个单页Spring MVC项目,以便我研究一下。我正在尝试加载一个屏幕,greeting.html
。这是我要加载它的控制器类:
@Controller
public class GreetingController {
@GetMapping("/greeting")
public String getGreeeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
当greeting.html
位于/resources/templates/greeeting.html
中时,此方法工作正常。但是,我想要在WEB-INF
文件夹后面。我尝试将其放在WEB-INF/views/greeting.html
和webapp/WEB-INF/views/greeting.html
中。然后,我尝试使用在线阅读的InternalResourceViewResolver
:
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".html");
return viewResolver;
}
据我了解,这应该允许它在我的WEB-INF文件夹设置之一的后面找到greeting.html
。但是,当我转到localhost:8080/greeting
时,控制台中会显示404和以下消息:
WARN 1439 --- [nio-8080-exec-1] o.s.w.s.r.ResourceHttpRequestHandler : Path with "WEB-INF" or "META-INF": [WEB-INF/views/greeting.html]
我完全不知道发生了什么或如何修复它,每一个在线教程都可以做到这一点,而且没有问题,我似乎找不到任何人遇到同样的问题。任何指导都将对您有所帮助。
答案 0 :(得分:2)
嗨,据我所知,您正在使用Spring Boot 默认情况下,Spring Boot搜索src / main / resources / templates文件夹 如果您使用了类似的依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
这将默认启用百里香。
要覆盖您的ViewResolver,您需要
在春季启动中,您可以在application.properties文件中进行以下配置:
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.html
或者您可以使用java config编写自定义解析器配置:
@Configuration
@EnableWebMvc
@ComponentScan
public class MvcConfiguration extends WebMvcConfigurerAdapter
{
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".html");
registry.viewResolver(resolver);
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
我认为这很有帮助
答案 1 :(得分:2)
尝试通过扩展WebMvcConfigurerAdapter更改视图解析器。
@Configuration
@ComponentScan(basePackages="...package name...")
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".html");
return viewResolver;
}
}
答案 2 :(得分:0)
我尝试了所有解决方案,但使用Spring Boot 2 *却出现404错误。
对我来说,使用命令“ mvn clean spring-boot:run
”运行应用程序可以修复错误
答案 3 :(得分:0)
尝试从 tomcat-embed-jasper 依赖项的作用域标记中删除提供的或添加 $ {tomcat-embed-jasper.scope} 。这对我有帮助。