Servlet Context

时间:2016-06-07 12:58:35

标签: java spring servlets thymeleaf

我正在编写一个没有自动配置的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

0 个答案:

没有答案