2015-02-11 93 views
2

我有一个简单的Spring Boot webmvc应用程序,它带有一个本地JSP页面,但是当我部署到Pivotal Web Services(由Pivotal.io托管)时,查看JSP页面时出错。该应用程序打包为WAR:使用Spring Boot项目时未部署到Pivotal Web Services的JSP文件

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 

仔细观察远程系统上的文件,看起来我的JSP文件没有部署。他们被删除。在部署之前它们在WAR中。

我试过从STS 3.6.3 SR1和从命令行使用CF进行部署。

当我创建一个常规的Spring MVC项目(不使用Spring Boot)时,一切似乎都可以在本地和关键的Web服务云上运行。

我在做什么错?有没有我错过的配置设置?请帮忙。谢谢。

这里是我的春天启动的项目设置:

代码HomeController.java:

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class HomeController { 

    @RequestMapping("/") 
    public String viewHomePage() { 
     return "home"; 
    } 
} 

主要类:

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); 
    } 
} 

ServletInitializer:

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); 
    } 
} 

应用lication.Properties文件:

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.somecompany</groupId> 
    <artifactId>SpringBootHWorldExample</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>SpringBootHWorld</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.2.1.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <start-class>demo.SpringBootHWorldApplication</start-class> 
     <java.version>1.7</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat.embed</groupId> 
      <artifactId>tomcat-embed-jasper</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

的上的文件:放在src /主/ web应用/ WEB-INF /意见

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Insert title here</title> 
    </head> 
    <body> 
     <h1>Hello World!!</h1> 
    </body> 
</html> 

pom.xml文件

spring.view.prefix: /WEB-INF/views/ 
spring.view.suffix: .jsp 

我的jsp页面远程系统。请注意文件夹/ WEB-INF /视图缺失。我试图将文件移动到不同的位置,但每次文件丢失,即使它在本地工作。

https://www.dropbox.com/s/nz8p7su2ksboc2o/RemoteFiles.png

最后的部署日志:

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"=>"STARTED"}) 
    -----> Downloaded app package (7.6M) 
    -----> Java Buildpack Version: v2.6.1 | https://github.com/cloudfoundry/java-buildpack.git#2d92e70 
    -----> 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) 
    -----> 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) 
    -----> 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) 
    -----> 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) 
    -----> 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) 

    -----> 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.sp[email protected]68430648, [email protected]] 

     . ____   _   __ _ _ 
    /\\/___'_ __ _ _(_)_ __ __ _ \ \ \ \ 
    (()\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
    \\/ ___)| |_)| | | | | || (_| | )))) 
     ' |____| .__|_| |_|_| |_\__, |//// 
    =========|_|==============|___/=/_/_/_/ 
    :: 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[email protected]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[email protected]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<java.util.Map<java.lang.String, java.lang.Object>> 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 
+0

根据这篇文章:http://webserver.docs.pivotal.io/doc/60/web-server/src/config.html,然后将com.ibm.ws.webcontainer.invokeFlushAfterService设置为false – StackBox 2015-02-11 13:13:10

+0

I我在关键云托管的云中使用PWS。我不认为我可以进入机器并进行任何更改。任何更改都必须在我的Spring Boot应用程序中。我需要在那里做什么? – user3137124 2015-02-11 14:14:57

+0

如果您打算部署到CF,我建议使用jar包装而不是战争。在本地运行更容易,而且组装问题更少。 – chrylis 2015-02-16 17:24:52

回答

1

我在这里的初步答案已被某人删除,所以OP和我正在互动elsewhere。总而言之,发现使用STS进行部署不起作用,并且使用cf命令行工具(say, as described here)取而代之。以为在这里报告它,这样它可以用于在这个帖子上绊倒的人。

+0

使用命令CF似乎无需进行任何配置即可使用如我在其他答案中指出的那样发生变化。我已经多次验证了这一点。非常感谢您的帮助! – user3137124 2015-02-16 19:58:35

1

很多故障排除之后,我相信我想通了,我的问题。为了让事情顺利进行,我做了以下工作:

  1. 用鼠标右键单击项目并选择属性。
  2. 选择Project Facets。
  3. 取消选中Dynamic Web Module并退出对话框。
  4. 回到项目方面
  5. 检查动态Web模块,并选择在内容目录“的src/main/webapp的”路径链接“提供进一步的配置......”
  6. 类型。
  7. 退出对话框。

这做了两件事。首先,在我的webapp目录中添加了一个META-INF文件夹和一个清单文件。

其次,它更新了.settings文件夹中的文件org.eclipse.wst.common.component。

上述更改之前,以下行存在:org.eclipse.wst.common.component的

<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> 

内容

<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> 
    <wb-module deploy-name="SpringBootHelloWorld-06"> 
     <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> 
     <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> 
     <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> 
     <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> 
     <property name="context-root" value="demo"/> 
     <property name="java-output-path" value="/SpringBootHelloWorld-06/target/classes"/> 
    </wb-module> 
</project-modules> 

我还试验了只添加所述元INF文件夹与清单文件手动,但它没有工作。所以我怀疑,这个文件的变化可能是原因,尽管我不确定。也许对这方面有更深入认识的人可以说点什么。

+0

我发布了一些我认为可能非常有用的东西,但有人删除了它。不过,我已将其作为youtube上的评论转贴,以防万一它有帮助:https://www.youtube.com/watch?v=DQk9-2eQKfQ – Sanjay 2015-02-15 03:59:52

相关问题