Search code examples
springmavenspring-bootcodenvy

How to access a Codenvy Spring Boot web controller?


I am testing Codenvy (https://codenvy.io) and made a very simple Spring Boot web controller:

@Controller
@EnableAutoConfiguration
public class SampleController { 

@RequestMapping("/")
@ResponseBody
String home() {
    return "Hello World!";
}

public static void main(String[] args) throws Exception {
    SpringApplication.run(SampleController.class, args);
}

}

Pom.xml:

 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.4.2.RELEASE</version>
 </parent>
 <dependencies>
 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

Launch is ok:

          2016-11-17 22:34:23.060  INFO 344 --- [           main] sample.SampleController                  : Starting SampleController on 780c1f85387b with PID 344 (/projects/Spring-boot started by user in /projects/Spring-boot)
      2016-11-17 22:34:23.084  INFO 344 --- [           main] sample.SampleController                  : No active profile set, falling back to default profiles: default
      2016-11-17 22:34:23.334  INFO 344 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@70e8f8e: startup date [Thu Nov 17 22:34:23 UTC 2016]; root of context hierarchy
      2016-11-17 22:34:34.172  INFO 344 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
      2016-11-17 22:34:34.343  INFO 344 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
      2016-11-17 22:34:34.358  INFO 344 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.6
      2016-11-17 22:34:34.746  INFO 344 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
      2016-11-17 22:34:34.748  INFO 344 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 11431 ms
      2016-11-17 22:34:35.782  INFO 344 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
      2016-11-17 22:34:35.808  INFO 344 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
      2016-11-17 22:34:35.810  INFO 344 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
      2016-11-17 22:34:35.812  INFO 344 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
      2016-11-17 22:34:35.814  INFO 344 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
      2016-11-17 22:34:37.532  INFO 344 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@70e8f8e: startup date [Thu Nov 17 22:34:23 UTC 2016]; root of context hierarchy
      2016-11-17 22:34:38.123  INFO 344 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto java.lang.String sample.SampleController.home()
      2016-11-17 22:34:38.170  INFO 344 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
      2016-11-17 22:34:38.170  INFO 344 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
      2016-11-17 22:34:38.490  INFO 344 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
      2016-11-17 22:34:38.490  INFO 344 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
      2016-11-17 22:34:38.646  INFO 344 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
      2016-11-17 22:34:39.377  INFO 344 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
      2016-11-17 22:34:39.669  INFO 344 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
      2016-11-17 22:34:39.708  INFO 344 --- [           main] sample.SampleController                  : Started SampleController in 20.214 seconds (JVM running for 21.802)

In my browser the url for the project is: https://codenvy.io/dashboard/#/ide/tyvain/BOTS

Simple (dumb) question: How can I call this URL to test it ??


Solution

  • It's not really a dumb question :)

    When you are in a cloud IDE, the application is running inside of another runtime. In the case of codenvy, we use Docker containers as the runtime. Docker lets you start your application, but then uses the ephemeral port range to take your server's internal port number and to make it available to the outside world. It maps the port to another number starting in the 32765+ range. It does this because if there are two servers in two workspaces running on the same port, they both would collide with one another, so docker places the ports into this range to avoid port collission.

    You need to set up a command with a previewURL that will show you the URL to your server when you run it. We have a lot of documentation on how preview URLs are generated at www.eclipse.org. But also, you can see how the commands are structured in the samples (try the maven spring sample).