我正在编写一个没有自动配置的spring启动应用程序,我遇到以下异常:
java.io.FileNotFoundException: Could not open ServletContext resource [/templates/home.html]
org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141)
org.thymeleaf.spring4.templateresource.SpringResourceTemplateResource.reader(SpringResourceTemplateResource.java:103)
org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:223)
org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100)
org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:650)
org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1087)
org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1061)
org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
org.thymeleaf.spring4.view.ThymeleafView.render(ThymeleafView.java:189)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1246)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1029)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:973)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
可以使用“classpath:templates / home.html”中的WebApplicationContext找到Home.html,但ServletContext无法找到它。我也将WebApplicationContext传递给ServletContext的构造函数。 这是我的配置:
@Configuration
@EnableWebMvc
@ComponentScan(basePackageClasses = {MainController.class})
public class WebConfig
//extends WebMvcConfigurerAdapter
{
private static final String UTF8 = "UTF-8";
@Bean
@Autowired
public ViewResolver viewResolver(TemplateEngine engine) {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(engine);
resolver.setCharacterEncoding(UTF8);
return resolver;
}
@Autowired
@Bean
public TemplateEngine templateEngine(ITemplateResolver resolver) {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(resolver);
return engine;
}
@Bean
@Autowired
public ITemplateResolver templateResolver(WebApplicationContext context) {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(context);
resolver.setPrefix("templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
return resolver;
}
@Bean
@Autowired
public ServletRegistrationBean dispatcherServlet(WebApplicationContext context) {
ServletRegistrationBean bean = new ServletRegistrationBean(new DispatcherServlet(context), "/");
bean.setAsyncSupported(true);
return bean;
}
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory fcty = new TomcatEmbeddedServletContainerFactory();
return fcty;
}
}
我的控制器:
@Controller
public class MainController {
@RequestMapping(value="/", method= RequestMethod.GET)
public String home() {
return "home";
}
}
我的引导: public class Application扩展了SpringBootServletInitializer {
public static void main(String[] args) {
configureBuilder(new SpringApplicationBuilder()).run();
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return configureBuilder(builder);
}
private static SpringApplicationBuilder configureBuilder(SpringApplicationBuilder builder) {
return builder
.web(true)
.sources(WebConfig.class);
}
}
我的目录结构:
resources/
├── static/
└── templates/
└── home.html