title: JSP files not deployed to Pivotal Web Services when using Spring Boot project
body: <p>I have a simple Spring Boot webmvc application with a JSP page working locally, but when I deploy onto Pivotal Web Services (hosted by Pivotal.io), I get an error when viewing the JSP page.  The app is packaged as WAR:</p>
  
  <pre><code>2015-02-11 12:22:30.381 ERROR 31 --- [io-61338-exec-4] o.s.boot.context.web.ErrorPageFilter     : Cannot forward to error page for request [/] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false
  </code></pre>
  
  <p>Looking closely at the files on the remote system, it seems my JSP files are not getting deployed.  They get deleted.  They are in the WAR before I deploy.</p>
  
  <p>I have tried deploying from STS 3.6.3 SR1 and from the command line using CF.</p>
  
  <p>When I create a regular Spring MVC project (not using Spring Boot), everything seems to work both locally and on pivotal web services cloud.</p>
  
  <p>What am I doing wrong?  Is there a configuration setting I missed?  Please help.  Thanks.</p>
  
  <p>Here is my Spring Boot project setup:</p>
  
  <p>Code for HomeController.java:</p>
  
  <pre><code>import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;
  
  @Controller
  public class HomeController {
  
      @RequestMapping("/")
      public String viewHomePage() {
         return "home";
      }
  }
  </code></pre>
  
  <p>Main class:</p>
  
  <pre><code>import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  
  @SpringBootApplication
  public class SpringBootHWorldApplication {
      public static void main(String[] args) {
          SpringApplication.run(SpringBootHWorldApplication.class, args);
      }
  }
  </code></pre>
  
  <p>ServletInitializer:</p>
  
  <pre><code>import org.springframework.boot.builder.SpringApplicationBuilder;
  import org.springframework.boot.context.web.SpringBootServletInitializer;
  
  public class ServletInitializer extends SpringBootServletInitializer {
  
      @Override
      protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
      return application.sources(SpringBootHWorldApplication.class);
      }
  }
  </code></pre>
  
  <p>Application.Properties file:</p>
  
  <pre><code>spring.view.prefix: /WEB-INF/views/
  spring.view.suffix: .jsp
  </code></pre>
  
  <p>My jsp page located in src/main/webapp/WEB-INF/views</p>
  
  <pre><code>&lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
  &lt;html&gt;
      &lt;head&gt;
          &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
          &lt;title&gt;Insert title here&lt;/title&gt;
      &lt;/head&gt;
      &lt;body&gt;
          &lt;h1&gt;Hello World!!&lt;/h1&gt;
      &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>Pom.xml file:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
      &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  
      &lt;groupId&gt;com.somecompany&lt;/groupId&gt;
      &lt;artifactId&gt;SpringBootHWorldExample&lt;/artifactId&gt;
      &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
      &lt;packaging&gt;war&lt;/packaging&gt;
  
      &lt;name&gt;SpringBootHWorld&lt;/name&gt;
      &lt;description&gt;Demo project for Spring Boot&lt;/description&gt;
  
      &lt;parent&gt;
          &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
          &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
          &lt;version&gt;1.2.1.RELEASE&lt;/version&gt;
          &lt;relativePath/&gt; &lt;!-- lookup parent from repository --&gt;
      &lt;/parent&gt;
  
      &lt;properties&gt;
          &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
          &lt;start-class&gt;demo.SpringBootHWorldApplication&lt;/start-class&gt;
          &lt;java.version&gt;1.7&lt;/java.version&gt;
      &lt;/properties&gt;
  
      &lt;dependencies&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
              &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
              &lt;artifactId&gt;spring-boot-starter-tomcat&lt;/artifactId&gt;
              &lt;scope&gt;provided&lt;/scope&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;org.apache.tomcat.embed&lt;/groupId&gt;
              &lt;artifactId&gt;tomcat-embed-jasper&lt;/artifactId&gt;
              &lt;scope&gt;provided&lt;/scope&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
              &lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
              &lt;scope&gt;test&lt;/scope&gt;
          &lt;/dependency&gt;
      &lt;/dependencies&gt;
  
      &lt;build&gt;
          &lt;plugins&gt;
              &lt;plugin&gt;
                  &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
                  &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
              &lt;/plugin&gt;
          &lt;/plugins&gt;
      &lt;/build&gt;
  
  &lt;/project&gt;
  </code></pre>
  
  <p>The files on the remote system.  Note the folder /WEB-INF/views is missing.  I tried moving the files to a different location but every time the files are missing even though it works locally.</p>
  
  <p><a href="https://www.dropbox.com/s/nz8p7su2ksboc2o/RemoteFiles.png" rel="nofollow">https://www.dropbox.com/s/nz8p7su2ksboc2o/RemoteFiles.png</a></p>
  
  <p>And finally the deployment log:</p>
  
  <pre><code>Checking application - SpringBootHWorld
  Generating application archive
  Creating application
  Pushing application
  Application successfully pushed
  Starting and staging application
  Got staging request for app with id 3e09036b-1575-42ac-9642-f667506f7c53
  Updated app with guid 3e09036b-1575-42ac-9642-f667506f7c53 ({"state"=&gt;"STARTED"})
      -----&gt; Downloaded app package (7.6M)
      -----&gt; Java Buildpack Version: v2.6.1 | https://github.com/cloudfoundry/java-buildpack.git#2d92e70
      -----&gt; Downloading Open Jdk JRE 1.8.0_31 from https://download.run.pivotal.io/openjdk/lucid/x86_64/openjdk-1.8.0_31.tar.gz (1.8s)
             Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (1.2s)
      -----&gt; Downloading Spring Auto Reconfiguration 1.7.0_RELEASE from https://download.run.pivotal.io/auto-reconfiguration/auto-reconfiguration-1.7.0_RELEASE.jar (0.1s)
      -----&gt; Downloading Tomcat Instance 8.0.18 from https://download.run.pivotal.io/tomcat/tomcat-8.0.18.tar.gz (0.4s)
             Expanding Tomcat to .java-buildpack/tomcat (0.1s)
      -----&gt; Downloading Tomcat Lifecycle Support 2.4.0_RELEASE from https://download.run.pivotal.io/tomcat-lifecycle-support/tomcat-lifecycle-support-2.4.0_RELEASE.jar (0.0s)
      -----&gt; Downloading Tomcat Logging Support 2.4.0_RELEASE from https://download.run.pivotal.io/tomcat-logging-support/tomcat-logging-support-2.4.0_RELEASE.jar (0.0s)
  
      -----&gt; Uploading droplet (54M)
      Starting app instance (index 0) with guid 3e09036b-1575-42ac-9642-f667506f7c53
      [CONTAINER] org.apache.coyote.http11.Http11NioProtocol         INFO    Initializing ProtocolHandler ["http-nio-61338"]
      [CONTAINER] org.apache.catalina.startup.Catalina               INFO    Initialization processed in 511 ms
      [CONTAINER] org.apache.catalina.core.StandardService           INFO    Starting service Catalina
      [CONTAINER] org.apache.catalina.core.StandardEngine            INFO    Starting Servlet Engine: Apache Tomcat/8.0.18
      [CONTAINER] org.apache.catalina.startup.HostConfig             INFO    Deploying web application directory /home/vcap/app/.java-buildpack/tomcat/webapps/ROOT
      [CONTAINER] ing.AutoReconfigurationServletContainerInitializer INFO    Initializing ServletContext with Auto-reconfiguration ApplicationContextInitializers
      [CONTAINER] lina.core.ContainerBase.[Catalina].[localhost].[/] INFO    Spring WebApplicationInitializers detected on classpath: [org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration@68430648, demo.ServletInitializer@6459b75d]
  
        .   ____          _            __ _ _
       /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
      ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
       \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
        '  |____| .__|_| |_|_| |_\__, | / / / /
       =========|_|==============|___/=/_/_/_/
       :: Spring Boot ::        (v1.2.1.RELEASE)
      2015-02-11 12:22:27.338  INFO 31 --- [ost-startStop-1] pertySourceApplicationContextInitializer : Adding 'cloud' PropertySource to ApplicationContext
      2015-02-11 12:22:27.397  INFO 31 --- [ost-startStop-1] nfigurationApplicationContextInitializer : Adding cloud service auto-reconfiguration to ApplicationContext
      2015-02-11 12:22:27.417  INFO 31 --- [ost-startStop-1] o.s.boot.SpringApplication               : Starting application on 18eod7e1vho with PID 31 (/home/vcap/app/.java-buildpack/tomcat/webapps/ROOT/WEB-INF/lib/spring-boot-1.2.1.RELEASE.jar started by vcap in /home/vcap/app)
      2015-02-11 12:22:27.453  INFO 31 --- [ost-startStop-1] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@1a2c932: startup date [Wed Feb 11 12:22:27 UTC 2015]; root of context hierarchy
      2015-02-11 12:22:27.997  INFO 31 --- [ost-startStop-1] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
      2015-02-11 12:22:28.192  INFO 31 --- [ost-startStop-1] urceCloudServiceBeanFactoryPostProcessor : Auto-reconfiguring beans of type javax.sql.DataSource
      2015-02-11 12:22:28.198  INFO 31 --- [ost-startStop-1] urceCloudServiceBeanFactoryPostProcessor : No beans of type javax.sql.DataSource found. Skipping auto-reconfiguration.
      2015-02-11 12:22:28.362  INFO 31 --- [ost-startStop-1] o.a.c.c.C.[Catalina].[localhost].[/]     : Initializing Spring embedded WebApplicationContext
      2015-02-11 12:22:28.362  INFO 31 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 909 ms
      2015-02-11 12:22:29.170  INFO 31 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
      2015-02-11 12:22:29.172  INFO 31 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
      2015-02-11 12:22:29.172  INFO 31 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'errorPageFilter' to: [/*]
      2015-02-11 12:22:29.172  INFO 31 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
      2015-02-11 12:22:29.413  INFO 31 --- [ost-startStop-1] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@1a2c932: startup date [Wed Feb 11 12:22:27 UTC 2015]; root of context hierarchy
      2015-02-11 12:22:29.494  INFO 31 --- [ost-startStop-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String demo.HomeController.viewHomePage()
      2015-02-11 12:22:29.497  INFO 31 --- [ost-startStop-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity&lt;java.util.Map&lt;java.lang.String, java.lang.Object&gt;&gt; org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
      2015-02-11 12:22:29.497  INFO 31 --- [ost-startStop-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
      2015-02-11 12:22:29.523  INFO 31 --- [ost-startStop-1] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
      2015-02-11 12:22:29.524  INFO 31 --- [ost-startStop-1] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
      2015-02-11 12:22:29.561  INFO 31 --- [ost-startStop-1] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
      2015-02-11 12:22:29.636  INFO 31 --- [ost-startStop-1] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
      2015-02-11 12:22:29.646  INFO 31 --- [ost-startStop-1] o.s.boot.SpringApplication               : Started application in 3.053 seconds (JVM running for 5.418)
      [CONTAINER] org.apache.catalina.startup.HostConfig             INFO    Deployment of web application directory /home/vcap/app/.java-buildpack/tomcat/webapps/ROOT has finished in 4,709 ms
      [CONTAINER] org.apache.coyote.http11.Http11NioProtocol         INFO    Starting ProtocolHandler ["http-nio-61338"]
      [CONTAINER] org.apache.tomcat.util.net.NioSelectorPool         INFO    Using a shared selector for servlet write/read
      [CONTAINER] org.apache.catalina.startup.Catalina               INFO    Server startup in 4766 ms
      2015-02-11 12:22:30.055  INFO 31 --- [io-61338-exec-2] o.a.c.c.C.[Catalina].[localhost].[/]     : Initializing Spring FrameworkServlet 'dispatcherServlet'
      2015-02-11 12:22:30.056  INFO 31 --- [io-61338-exec-2] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
      2015-02-11 12:22:30.072  INFO 31 --- [io-61338-exec-2] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 16 ms
      SpringBootHWorld.cfapps.io - [11/02/2015:12:22:30 +0000] "GET / HTTP/1.1" 200 0 "-" "Java/1.7.0_45" 10.10.2.122:36854 x_forwarded_for:"50.187.174.41" vcap_request_id:e3177b90-5b1b-4325-6268-3f23c3b85d34 response_time:0.099450479 app_id:3e09036b-1575-42ac-9642-f667506f7c53
      2015-02-11 12:22:30.116 ERROR 31 --- [io-61338-exec-2] o.s.boot.context.web.ErrorPageFilter     : Cannot forward to error page for request [/] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false
      2015-02-11 12:22:30.381 ERROR 31 --- [io-61338-exec-4] o.s.boot.context.web.ErrorPageFilter     : Cannot forward to error page for request [/] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false
      springboothworld.cfapps.io - [11/02/2015:12:22:30 +0000] "GET / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" 10.10.2.122:36858 x_forwarded_for:"50.187.174.41" vcap_request_id:ce3100c1-c592-452f-7174-06c4c28bcc2e response_time:0.015669152 app_id:3e09036b-1575-42ac-9642-f667506f7c53
  </code></pre>