diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..0fa92a0
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,2 @@
+target
+.ufo
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..908ca59
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+pkg
+target
+*.class
+.ufo/current
+.ufo/data
+.ufo/log
+.ufo/output
diff --git a/POM.xml b/POM.xml
new file mode 100644
index 0000000..40a0409
--- /dev/null
+++ b/POM.xml
@@ -0,0 +1,46 @@
+
+ 4.0.0
+ com.domain
+ demo
+ war
+ 1.0-SNAPSHOT
+ Demo Maven Webapp
+ https://github.com/tongueroo/demo-java
+
+ demo
+ src
+
+
+ maven-compiler-plugin
+ 3.7.0
+
+ 1.8
+ 1.8
+
+
+
+ maven-war-plugin
+ 3.0.0
+
+
+
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+ log4j
+ log4j
+ 1.2.17
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+
+
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..893f217
--- /dev/null
+++ b/README.md
@@ -0,0 +1,7 @@
+# Demo Java Web App
+
+[](https://www.boltops.com)
+
+Simple java project demos how to build a war file to be deployed on a Tomcat server.
+
+## Build
diff --git a/bin/build b/bin/build
new file mode 100644
index 0000000..a0cbda4
--- /dev/null
+++ b/bin/build
@@ -0,0 +1,12 @@
+#!/bin/bash -exu
+
+# brew install maven # for macosx
+mvn package
+# move the artifact into pkg so we do not have to send the whole target file
+# to the docker build context. We will dockerignore target.
+mvn package # creates target/demo.war
+# Move the artifact into pkg so we do not have to send the whole target file
+# to the docker build context. We will dockerignore target because it contains
+# other build files that bloats the upload context sent to docker.
+mkdir -p pkg
+mv target/demo.war pkg/demo.war
diff --git a/dockerfile b/dockerfile
new file mode 100644
index 0000000..9c40fcd
--- /dev/null
+++ b/dockerfile
@@ -0,0 +1,17 @@
+FROM tomcat:8.5
+MAINTAINER Tung Nguyen
+
+# Debugging tools: A few ways to handle debugging tools.
+# Trade off is a slightly more complex volume mount vs keeping the image size down.
+RUN apt-get update && \
+ apt-get install -y \
+ net-tools \
+ tree \
+ vim && \
+ rm -rf /var/lib/apt/lists/* && apt-get clean && apt-get purge
+
+RUN echo "export JAVA_OPTS=\"-Dapp.env=staging\"" > /usr/local/tomcat/bin/setenv.sh
+COPY pkg/demo.war /usr/local/tomcat/webapps/demo.war
+
+EXPOSE 8080
+CMD ["catalina.sh", "run"]
diff --git a/src/main/java/Hello.java b/src/main/java/Hello.java
new file mode 100644
index 0000000..b49dec7
--- /dev/null
+++ b/src/main/java/Hello.java
@@ -0,0 +1,26 @@
+// Import required java libraries
+import java.io.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+// Extend HttpServlet class
+public class Hello extends HttpServlet {
+
+ private String message;
+
+ public void init() throws ServletException {
+ // Do required initialization
+ message = "Hello World: src/main/java/Hello.java";
+ }
+
+ public void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+
+ // Set response content type
+ response.setContentType("text/html");
+
+ // Actual logic goes here.
+ PrintWriter out = response.getWriter();
+ out.println("" + message + "
");
+ }
+}
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..bca72b7
--- /dev/null
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,25 @@
+
+
+
+ demo java web app
+
+ index.html
+ index.htm
+ index.jsp
+ default.html
+ default.htm
+ default.jsp
+
+
+
+ Hello
+ Hello
+
+
+ Hello
+ /Hello
+
+
+
diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp
new file mode 100644
index 0000000..8d86027
--- /dev/null
+++ b/src/main/webapp/index.jsp
@@ -0,0 +1,5 @@
+
+
+Hello World: src/main/webapp/index.jsp
+
+