A fully functional Java web application built with Gradle for build automation, designed to run on Apache Tomcat without a database.
This project demonstrates:
- Java Servlet development
- REST API endpoints
- Gradle build automation
- Web application structure and deployment
- In-memory data management (no database)
java-gradle-webapp/
βββ src/
β βββ main/
β β βββ java/
β β β βββ com/example/
β β β βββ controller/
β β β β βββ HelloServlet.java
β β β β βββ UserServlet.java
β β β βββ model/
β β β β βββ User.java
β β β βββ service/
β β β βββ UserService.java
β β βββ webapp/
β β βββ WEB-INF/
β β β βββ web.xml
β β βββ index.html
β β βββ error.html
β βββ test/
β βββ java/
βββ gradle/
β βββ wrapper/
β βββ gradle-wrapper.jar
β βββ gradle-wrapper.properties
βββ build.gradle
βββ settings.gradle
βββ gradlew
βββ gradlew.bat
βββ .gitignore
βββ README.md
- Java 11 - Programming language
- Gradle 7.5.1 - Build automation and dependency management
- Apache Tomcat 9 - Servlet container (target deployment)
- Servlet 4.0 API - Web application framework
- GSON - JSON serialization/deserialization
- SLF4J - Logging framework
- JUnit 4 - Testing framework
- Java 11 or higher installed
- Gradle 7.5.1 (or use the included Gradle Wrapper)
- Apache Tomcat 9 (for deployment)
- Linux VM with Tomcat installed (for deployment)
git clone https://github.com/xCaptain404/java-gradle-webapp.git
cd java-gradle-webappUsing Gradle Wrapper:
# Linux/Mac
./gradlew build
# Windows
.\gradlew.bat buildOr with Gradle installed:
gradle build./gradlew appRunThe application will be accessible at: http://localhost:8080
./gradlew warThe WAR file will be created at: build/libs/java-gradle-webapp-1.0.0.war
GET /hello
Simple servlet that returns HTML response.
Example:
curl http://localhost:8080/helloGET /api/user?action=list
Returns all users in JSON format.
Response:
[
{
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"city": "New York",
"createdAt": "2024-05-22T10:30:00"
},
...
]GET /api/user?action=get&id=1
Returns a specific user by ID.
Response:
{
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"city": "New York",
"createdAt": "2024-05-22T10:30:00"
}POST /api/user
Creates a new user.
Parameters:
name(required) - User's full nameemail(required) - User's email addresscity(required) - User's city
Example:
curl -X POST http://localhost:8080/api/user \
-d "name=Alice Johnson" \
-d "email=alice@example.com" \
-d "city=Boston"Response:
{
"id": 4,
"name": "Alice Johnson",
"email": "alice@example.com",
"city": "Boston",
"createdAt": "2024-05-22T10:35:00"
}./gradlew war# On your development machine
scp build/libs/java-gradle-webapp-1.0.0.war user@your-vm-ip:/path/to/tomcat/webapps/
# Or rename for root deployment
scp build/libs/java-gradle-webapp-1.0.0.war user@your-vm-ip:/path/to/tomcat/webapps/ROOT.war# SSH into the VM
ssh user@your-vm-ip
# Navigate to Tomcat
cd /path/to/tomcat
# Stop Tomcat
bin/shutdown.sh
# Start Tomcat
bin/startup.sh
# Check logs
tail -f logs/catalina.outhttp://your-vm-ip:8080/
or
http://your-vm-ip:8080/java-gradle-webapp (if not deployed as ROOT)
# Build the project
./gradlew build
# Clean build
./gradlew clean
# Run tests
./gradlew test
# Build WAR
./gradlew war
# Display Gradle tasks
./gradlew tasks
# Show dependencies
./gradlew dependencies
# Run locally with Gretty
./gradlew appRun
# Debug run
./gradlew appRunDebugThis project uses Gradle for build automation. Key files:
Defines:
- Plugins (java, war, gretty)
- Dependencies (servlets, logging, JSON processing)
- Build properties
- Custom tasks
Defines the root project name
Allows building without Gradle installation
Run tests using:
./gradlew test- HelloServlet.java - Basic servlet demonstrating simple request/response
- UserServlet.java - REST API servlet for user management
- User.java - User entity/POJO
- UserService.java - Business logic for user operations (in-memory storage)
- index.html - Interactive frontend for testing the API
- error.html - Error page
- web.xml - Web application deployment descriptor
This is a demonstration project. For production:
- Add input validation and sanitization
- Implement authentication and authorization
- Use HTTPS
- Add CSRF protection
- Implement proper error handling
- Use a proper database instead of in-memory storage
- Add rate limiting
- Gradle Official Documentation
- Apache Tomcat Documentation
- Java Servlets Tutorial
- REST API Best Practices
Feel free to fork and submit pull requests for improvements.
This project is open source and available under the MIT License.
xCaptain404
./gradlew appRun -Dhttp.port=8081chmod +x gradlewEnsure Java 11+ is installed:
java -version- Check Tomcat logs:
logs/catalina.out - Verify WAR file syntax:
unzip -l java-gradle-webapp-1.0.0.war - Ensure correct permissions on webapps folder
Happy coding! π