Project: Maven WAR Deploy
Introduction
This lab walks through an end-to-end Maven WAR deploy: build a small API WAR, copy it to Tomcat webapps/, verify with curl, and redeploy after a code change. It consolidates Your First Servlet Application and Deploying WAR into one repeatable checklist.
Prerequisites
- Tomcat 10.1 installed — Installing Tomcat
- JDK 17+ and Maven 3.9+
- Start, Stop, and Environment
Project Goals
- Maven
packaging>war</packaging>projectblog-api - Servlet
GET /postsreturns JSON-ish plain text - Deploy
blog-api.war→ context/blog-api - Redeploy v2 without leaving stale files
Step 1: Create Project
bash
mkdir -p blog-api/src/main/java/com/example/blog
mkdir -p blog-api/src/main/webapp/WEB-INF
cd blog-apipom.xml:
xml
PostsServlet.java:
java
Step 2: Build
bash
mvn clean package
jar tf target/blog-api.war | grep PostsServletExpected: WEB-INF/classes/com/example/blog/PostsServlet.class
Step 3: Deploy to Tomcat
bash
export CATALINA_HOME=/opt/tomcat
$CATALINA_HOME/bin/shutdown.sh
rm -rf $CATALINA_HOME/webapps/blog-api $CATALINA_HOME/webapps/blog-api.war
cp target/blog-api.war $CATALINA_HOME/webapps/
$CATALINA_HOME/bin/startup.shStep 4: Verify
bash
curl -s http://127.0.0.1:8080/blog-api/posts
curl -I http://127.0.0.1:8080/blog-api/
grep -i blog-api $CATALINA_HOME/logs/catalina.$(date +%Y-%m-%d).logPass criteria:
- JSON body contains
Hello WAR - Log shows deployment of
/blog-api
Step 5: Redeploy v2
Change response string to Hello WAR v2, then:
bash
mvn clean package
$CATALINA_HOME/bin/shutdown.sh
rm -rf $CATALINA_HOME/webapps/blog-api $CATALINA_HOME/webapps/blog-api.war
cp target/blog-api.war $CATALINA_HOME/webapps/
$CATALINA_HOME/bin/startup.sh
curl -s http://127.0.0.1:8080/blog-api/postsConfirm v2 appears—proves you replaced both WAR and exploded directory.
Acceptance Checklist
-
mvn packagesucceeds - WAR name matches desired context
/blog-api -
curlhits/blog-api/posts, not/postsalone - Redeploy removes old
webapps/blog-api/folder - No
SEVEREinlogs/catalina.*.log
What You Learned
| Skill | Chapter reference |
|---|---|
| Maven WAR layout | 08 |
| Context path = WAR name | 07 |
| Clean redeploy | 07 |