# hahaha **Repository Path**: shenyang1/hahaha ## Basic Information - **Project Name**: hahaha - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2016-08-17 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Hello Java Sample ================= This sample aims to demonstrate the simplest possible Servlet-based Java webapp. Here we walk through the entire content of the application. The Servlet ----------- In the *org.cloudfoundry.samples* package under *src/main/java*, you will see *HelloServlet.java*: package org.cloudfoundry.samples; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); response.setStatus(200); PrintWriter writer = response.getWriter(); writer.println("Hello from " + System.getenv("VCAP_APP_HOST") + ":" + System.getenv("VCAP_APP_PORT")); writer.close(); } } Notice that it contains only *java* and *javax* imports. In the *doGet(..)* method, it simply writes the *Content-Type* header value, sets the status to *200* (OK), and then writes a message. The content of that message includes the HOST and PORT where this application is running. Those environment variables, *VCAP_APP_HOST* and *VCAP_APP_PORT* are available anytime the application is running on Cloud Foundry. The *web.xml* File ------------------ As a standard Java webapp, the configuration of *HelloServlet* is included within the *WEB-INF/web.xml* file. You will find that under *src/main/webapp*. It looks like this: Hello Java HelloServlet org.cloudfoundry.samples.HelloServlet HelloServlet / There you see the servlet is declared, and then a mapping is provided. In this case, the context root of the application is mapped directly to HelloServlet since it is the only servlet in the application. The *pom.xml* File ------------------ Since this application is built with Maven, there is a *pom.xml* file directly in the root directory. That POM is as simple as it can be. 4.0.0 org.cloudfoundry.samples hello-java 1.0 war javax.servlet servlet-api 2.5 provided Notice that it has the standard project metadata (groupId, artifactId, version, etc.), and it has a single dependency: the Servlet API. That dependency is marked as *provided* since it's available in the deployment environment itself. Building the Application ------------------------ To build the application, make sure you have [Maven](http://maven.apache.org/ "Maven") installed. Then, *cd* into the root directory and execute: mvn clean package That will create the *hello-java-1.0.war* file within the 'target' directory. Running the Application ----------------------- To run the application, make sure you have [VMC](http://support.cloudfoundry.com/entries/20012337-getting-started-guide-command-line-vmc-users "VMC") installed and that you are logged in successfully for your desired target environment (e.g. http://api.cloudfoundry.com). Then, *cd* into the *target* directory and execute: vmc push That will ask a few questions, and in most cases you can simply accept the defaults. Here is an example of the output: Would you like to deploy from the current directory? [Yn]: Y Application Name: hello-java-sample Application Deployed URL: 'hello-java-sample.cloudfoundry.com'? Detected a Java Web Application, is this correct? [Yn]: Y Memory Reservation [Default:512M] (64M, 128M, 256M or 512M) 256 Creating Application: OK Would you like to bind any services to 'hello-java-sample'? [yN]: N Uploading Application: Checking for available resources: OK Packing application: OK Uploading (4K): OK Push Status: OK Staging Application: OK Starting Application: OK Notice that it detected the app type as "Java Web Application". In this case, it's only recognizing a runtime (Java) but not a framework (e.g. Spring or Grails), since this really is just a barebones Java web application. If you were to create a Spring or Grails application, you would see that it detects both the runtime and the framework. The result when visiting the 'Application Deployed URL' should look something like this: Hello from 172.30.49.150:20488 That's all. Have fun!