Весенний ботинок с SiteMesh 3

Я пишу новое веб-приложение с использованием Spring Boot впервые и пытаюсь использовать SiteMesh 3 безуспешно.

Я использую веб-инициализатор для начальной загрузки;

public class WebInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

Я настроил фильтр в классе конфигурации приложения, как показано ниже;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
    @Bean
    public FilterRegistrationBean siteMeshFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new MySiteMeshFilter());
        return filterRegistrationBean;
    }
}

MySiteMeshFilter выглядит следующим образом;

public class MySiteMeshFilter extends ConfigurableSiteMeshFilter {
    @Override
    protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
        builder.addDecoratorPath("/*", "/decorators/decorator.html");
    }
}

Под src/main/webapp/WEB-INF/ у меня есть папка декораторов, содержащая decorator.html;

<html>
<head>
    <title><sitemesh:write property='title'/></title>
    <sitemesh:write property='head'/>
</head>
<body>
<p>This has been decorated!!!</p>

<sitemesh:write property='body'/>
</body>
</html>

и под src / main / webapp / static у меня есть основной HTML-файл;

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
</head>
<body>
<p>Just a test html page</p>
</body>
</html>

Но... при запуске веб-приложения (я развернул войну на tomcat - не внедрено) и перехожу на localhost:8080/static/test.html Я получаю...

2014-09-18 16:17:53.696 ERROR 7233 --- [io-8080-exec-10] o.s.boot.context.web.ErrorPageFilter     : Forwarding to error page from request [/static/test.htmlnull] due to exception [Cannot forward after response has been committed]
java.lang.IllegalStateException: Cannot forward after response has been committed
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:348)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
    at org.springframework.boot.context.web.ErrorPageFilter.handleErrorStatus(ErrorPageFilter.java:134)
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:111)
    at org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:58)
    at org.springframework.boot.context.web.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:87)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:100)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

Если я закомментирую фильтр SiteMesh в файле конфигурации (класс приложения), то увижу недекорированный файл test.html.

Так я что-то упускаю здесь очень очевидное?

0 ответов

Другие вопросы по тегам