【发布时间】:2023-03-29 21:40:02
【问题描述】:
我正在尝试使用 gradle、spring boot 和 spring mvc 以及最简单的视图解析器和 html 来制作“hello world”应用程序。
我从 thymeleaf spring boot example 开始,我只是想删除 thymeleaf 以使用纯 html 和 InternalResourceViewResolver 制作更简单的 mvc 应用程序。我有一个要服务的 greeting.html,它位于 src/main/webapp/WEB-INF。当我运行应用程序时,我得到了
No mapping found for HTTP request with URI [/WEB-INF/greeting.html] in DispatcherServlet with name 'dispatcherServlet'
这是一个常见错误,网上有很多答案,但似乎没有任何帮助。
这是我的 Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这是我的 GreetingController.java
@Controller
public class GreetingController {
@RequestMapping("/greeting")
public String greeting() {
return "greeting";
}
}
这是我的 MvcConfiguration.java
@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/");
resolver.setSuffix(".html");
return resolver;
}
}
我用gradle bootRun 运行它
这里是带有代码的仓库:https://github.com/driver-pete/spring-mvc-example
这里还有一些线索:
- Thymeleaf 视图解析工作正常
- InternalResourceViewResolver 解析到正确的路径
- WEB-INF 和 greeting.html 似乎存在于 war 文件中
- 我没有 jsp 或 jstl,所以我不会像某些人建议的那样错过那些 jars
我的假设是调度程序 servlet 以某种方式被配置为在 /* 而不是 / 上服务,例如 here 和任何地方。但是我没有 web.xml 所以这些建议在这里不适用。我看到很多示例如何以编程方式配置调度程序 servlet,但我想将我的应用程序保持在最低限度,我怀疑 spring boot 应该可以配置它,因为它与 thymeleaf 配合得很好。
【问题讨论】:
-
设置视图解析器前缀和后缀可以通过将这些属性放在 application.properties 文件中来简化:spring.mvc.view.prefix=/WEB-INF/spring.mvc.view.suffix=.html
标签: java spring spring-mvc gradle spring-boot