我正在尝试使用最简单的视图解析器和html创建gradle,spring boot和spring mvc的“ hello world”应用程序。
我从thymeleafSpring Boot示例开始,我只是想删除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
gradle bootRun
以下是一些线索:
我的假设是,调度程序servlet以某种方式配置为可在/ *上使用,而不是像在这里和其他地方一样在 /上使用。但是我没有web.xml,所以这些建议在这里不适用。我看到了很多示例,这些内容如何以编程方式配置调度程序servlet,但我希望使我的应用程序保持最少,并且我怀疑spring boot应该可以正常配置它,因为它可以与thymeleaf正常工作。
你只需要启用默认servlet,这是通过将以下内容添加到你的MvcConfiguration:
MvcConfiguration
@Configuration @EnableWebMvc public class MvcConfiguration extends WebMvcConfigurerAdapter{ @Bean public ViewResolver getViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/"); resolver.setSuffix(".html"); return resolver; } @Override public void configureDefaultServletHandling( DefaultServletHandlerConfigurer configurer) { configurer.enable(); } }
本质上讲,发生的事情是Spring不知道如何原生地处理此类内容(可以说是jsp),而这种配置就是告诉它将其委托给容器的方式。