Loading repository data…
Loading repository data…
wahidali-glitch / repository
A full-stack Java web application for secure personal expense management using JSP, Servlets, Hibernate, PostgreSQL, and BCrypt authentication.
██████╗ ███████╗██████╗ ███████╗ ██████╗ ███╗ ██╗ █████╗ ██╗
██╔══██╗██╔════╝██╔══██╗██╔════╝██╔═══██╗████╗ ██║██╔══██╗██║
██████╔╝█████╗ ██████╔╝███████╗██║ ██║██╔██╗ ██║███████║██║
██╔═══╝ ██╔══╝ ██╔══██╗╚════██║██║ ██║██║╚██╗██║██╔══██║██║
██║ ███████╗██║ ██║███████║╚██████╔╝██║ ╚████║██║ ██║███████╗
╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝
███████╗██╗ ██╗██████╗ ███████╗███╗ ██╗███████╗███████╗
██╔════╝╚██╗██╔╝██╔══██╗██╔════╝████╗ ██║██╔════╝██╔════╝
█████╗ ╚███╔╝ ██████╔╝█████╗ ██╔██╗ ██║███████╗█████╗
██╔══╝ ██╔██╗ ██╔═══╝ ██╔══╝ ██║╚██╗██║╚════██║██╔══╝
███████╗██╔╝ ██╗██║ ███████╗██║ ╚████║███████║███████╗
╚══════╝╚═╝ ╚═╝╚═╝ ╚══════╝╚═╝ ╚═══╝╚══════╝╚══════╝
████████╗██████╗ █████╗ ██████╗██╗ ██╗███████╗██████╗
╚══██╔══╝██╔══██╗██╔══██╗██╔════╝██║ ██╔╝██╔════╝██╔══██╗
██║ ██████╔╝███████║██║ █████╔╝ █████╗ ██████╔╝
██║ ██╔══██╗██╔══██║██║ ██╔═██╗ ██╔══╝ ██╔══██╗
██║ ██║ ██║██║ ██║╚██████╗██║ ██╗███████╗██║ ██║
╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
A secure, full-stack expense management system — built with enterprise Java and live-deployed on AWS EC2
This project is not just code — it is fully built, packaged as a
.warfile, and live-deployed on a real AWS EC2 cloud server. Click any link below to access the running application.
| What | Live Link |
|---|---|
| 🌐 Apache Web App | http://32.236.81.179/Front_back_end/ |
| 🐱 Tomcat Deployment | http://32.236.81.179:8080/Front_back_end/ |
| ⚙️ Tomcat Manager Panel | http://32.236.81.179:8080/manager/html |
Personal Expense Tracker is a production-ready, multi-user web application engineered to help individuals take full control of their finances. Built from the ground up using core Java enterprise technologies, this project goes beyond local development — it is compiled into a deployable .war artifact and live-hosted on AWS EC2 with Apache Tomcat 10.
"Track every rupee. Own every decision."
This project is a complete demonstration of full-stack Java development + real cloud deployment, from secure user authentication and real-time expense management to WAR packaging and cloud server configuration — all wired together with clean MVC architecture and persistent PostgreSQL storage.
| Concept | Implementation |
|---|---|
| Authentication & Authorization | Session-based login with BCrypt password hashing |
| ORM Mapping | Hibernate / JPA with entity relationships |
| MVC Pattern | Servlets as Controllers, JSP as Views, POJOs as Models |
| Database Integration | PostgreSQL with Hibernate dialect |
| Security Practices | Encrypted passwords, session guards, user-scoped data |
| Build Management | Maven WAR packaging for production deployment |
| Cloud Deployment | AWS EC2 instance with Apache Tomcat 10 live server |
| Server Management | Tomcat Manager dashboard for WAR deployment & monitoring |
This application was manually deployed to a live AWS EC2 cloud instance — not run locally. The complete deployment pipeline involved:
.war file using MavenTomcat Manager — WAR Successfully Deployed
Tomcat Deployment Confirmation
Apache Dashboard — Deployment Proof 1
Apache Dashboard — Deployment Proof 2
┌─────────────────────────────────────────────────────────────┐
│ PRESENTATION LAYER │
│ JSP · HTML5 · CSS3 · JavaScript │
├─────────────────────────────────────────────────────────────┤
│ CONTROLLER LAYER │
│ LoginServlet · RegisterServlet · ExpenseServlet │
│ LogoutServlet │
├─────────────────────────────────────────────────────────────┤
│ SERVICE / DAO LAYER │
│ UserDao · ExpenseDao │
│ BCrypt Utility │
├─────────────────────────────────────────────────────────────┤
│ ORM / PERSISTENCE │
│ Hibernate ORM · JPA · Maven │
├─────────────────────────────────────────────────────────────┤
│ DATABASE │
│ PostgreSQL │
├─────────────────────────────────────────────────────────────┤
│ CLOUD INFRASTRUCTURE │
│ AWS EC2 · Apache Tomcat 10 · Linux │
└─────────────────────────────────────────────────────────────┘
| Layer | Technology |
|---|---|
| Language | Java 17+ |
| Web Layer | JSP, Servlets (Jakarta EE) |
| ORM | Hibernate 6 / JPA |
| Database | PostgreSQL 15 |
| Build Tool | Apache Maven (WAR packaging) |
| Server | Apache Tomcat 10 |
| Security | BCrypt (jBCrypt) |
| Frontend | HTML5, CSS3, Vanilla JavaScript |
| Cloud | AWS EC2 (Ubuntu Linux) |
| Deployment | WAR file via Tomcat Manager |
This application strictly follows the Model-View-Controller (MVC) design pattern, ensuring clean separation of concerns across all layers.
┌──────────┐
│ Browser │
└────┬─────┘
│ HTTP Request
▼
┌──────────────────────┐
│ AWS EC2 Server │
│ Apache Tomcat 10 │
└──────────┬───────────┘
│
┌──────────────▼──────────────┐
│ CONTROLLER │
│ ┌──────────────────────┐ │
│ │ LoginServlet │ │
│ │ RegisterServlet │ │
│ │ ExpenseServlet │ │
│ │ LogoutServlet │ │
│ └──────────┬───────────┘ │
└─────────────┼───────────────┘
┌────────┴────────┐
▼ ▼
┌───────────────┐ ┌─────────────────┐
│ MODEL │ │ VIEW │
│ ┌─────────┐ │ │ ┌──────────┐ │
│ │ User │ │ │ │ JSP │ │
│ │ Expense │ │ │ │ Pages │ │
│ └────┬────┘ │ │ └──────────┘ │
└───────┼───────┘ └─────────────────┘
│
┌───────▼───────┐
│ DAO LAYER │
│ ┌─────────┐ │
│ │ UserDao │ │
│ │Expense │ │
│ │ Dao │ │
│ └────┬────┘ │
└───────┼───────┘
│ Hibernate / JPA
┌───────▼───────┐
│ PostgreSQL │
│ (on EC2) │
└───────────────┘
Security was a first-class priority throughout the entire development process — not an afterthought.
┌─────────────────────────────────────────────────────┐
│ SECURITY LAYERS │
├─────────────────────────────────────────────────────┤
│ 🔑 BCrypt Password Hashing │
│ └── Plain-text passwords never stored │
│ │
│ 🛡️ Session-Based Authentication │
│ └── Server-side session validation │
│ │
│ 🚪 Protected Route Guards │
│ └── Unauthenticated requests redirected │
│ │
│ 👤 User-Scoped Data Isolation │
│ └── Users access only their own expenses │
│ │
│ 🚫 SQL Injection Prevention │
│ └── Hibernate parameterized queries │
└─────────────────────────────────────────────────────┘
users Table| Column | Type | Constraints | Description |
|---|---|---|---|
id | SERIAL | PRIMARY KEY | Auto-incremented user ID |
name | VARCHAR(100) | NOT NULL | Full name of the user |
email | VARCHAR(150) | UNIQUE, NOT NULL | Login email address |
password | VARCHAR(255) | NOT NULL | BCrypt-encrypted password hash |
expenses Table| Column | Type | Constraints | Description |
|---|---|---|---|
id | SERIAL | PRIMARY KEY | Auto-incremented expense ID |
| `descri |