ShopFlow - E-Commerce Shopping Platform
ShopFlow is a Jakarta EE web application that demonstrates a full e-commerce workflow: product browsing, filtering, cart management, checkout, order tracking, REST APIs, and JSF admin dashboards.
Tech Stack
- Java 11
- Maven (WAR packaging)
- Apache Tomcat 10
- Jakarta Servlet / JSP / JSTL
- Jakarta Faces (JSF)
- Jakarta REST (JAX-RS, Jersey)
- Jakarta Persistence (JPA, Hibernate)
- H2 (default) + MySQL driver available
- Bootstrap 5 + custom CSS
Project Structure
src/main/java/com/yourname/ecommerce/
├── config
├── dto
├── exception
├── jsf
├── model
├── repository
├── resource
├── service
└── servlet
src/main/resources/
├── META-INF/persistence.xml
└── db/sample-data.sql
src/main/webapp/
├── WEB-INF/
│ ├── beans.xml
│ ├── web.xml
│ └── views/
├── admin/
├── assets/
└── account.xhtmlRun Locally
- Build:
mvn clean package- Install/start Tomcat 10 (first time):
brew install tomcat@10
brew services start tomcat@10- Deploy as ROOT:
cp target/ECommerceShoppingPlatform.war "$(brew --prefix tomcat@10)/libexec/webapps/ROOT.war"
brew services restart tomcat@10- Open:
- Home:
http://localhost:8080/ - Products:
http://localhost:8080/products - Cart:
http://localhost:8080/cart - Account:
http://localhost:8080/account.xhtml - Admin Products:
http://localhost:8080/admin/products.xhtml - Admin Orders:
http://localhost:8080/admin/orders.xhtml
If deployed without ROOT.war, use context path:
http://localhost:8080/ECommerceShoppingPlatform/...
REST API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/products | List products with filters and pagination |
| GET | /api/products/{id} | Get product details with reviews |
| GET | /api/categories | List categories |
| GET | /api/cart | Get session cart |
| POST | /api/cart | Add item to cart |
| DELETE | /api/cart/{itemId} | Remove item from cart |
| POST | /api/orders | Create order from cart |
| GET | /api/orders/{id} | Get order details |
| GET | /api/reviews | List reviews (optional productId) |
Quick API Test (cURL)
curl "http://localhost:8080/api/products?page=1&size=5"
curl -X POST "http://localhost:8080/api/cart" \
-H "Content-Type: application/json" \
-d '{"productId":1,"quantity":2}'
curl -X POST "http://localhost:8080/api/orders" \
-H "Content-Type: application/json" \
-d '{"userId":"guest-user","shippingAddress":"123 Main St, City"}'Notes
- Default database: H2 (
jdbc:h2:~/ecommerce_db;AUTO_SERVER=TRUE) - Seed data is auto-initialized on startup when tables are empty.
- Extra docs:
API_DOCS.mdADMIN_GUIDE.mdpostman/ECommerceShoppingPlatform.postman_collection.jsonpostman/ECommerceShoppingPlatform.postman_environment.json