我是第一次使用Spring Boot编写新的Web应用程序,并且尝试使用SiteMesh 3但没有成功。
我正在使用网络初始化程序来引导;
public class WebInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
我已在Application config类中配置了过滤器,如下所示;
@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查找。
所以我错过了一些非常明显的东西吗?