A Java web application (J2EE-style) that simulates an e-commerce and logistics flow: user registration, login, product browsing, cart/session management, and checkout with persistent order storage in MySQL.
This repository is packaged as a Maven WAR project named OnlineShopping.
- Handles user registration and login with
HttpSessiontracking - Loads and displays a product catalog from MySQL
- Maintains a session-based shopping cart (
cart-list) across requests - Executes checkout by persisting orders to the
orderstable - Uses a clean MVC + DAO architecture with JSP views, Servlet controllers, and JDBC data access
online-shopping-website/
|- pom.xml
|- mvnw / mvnw.cmd
|- docs/
| |- requirements.txt
| |- setup_dependencies.py
| `- update_requirements.py
`- src/
`- main/
|- java/com/example/onlineshopping/
| |- AddToCartServlet.java
| |- CheckOutServlet.java
| |- LoginServlet.java
| |- LogoutServlet.java
| |- ProductServlet.java
| |- RegisterServlet.java
| |- RemoveFromCartServlet.java
| |- dao/
| | |- OrderDAO.java
| | |- ProductDAO.java
| | `- UserDAO.java
| |- model/
| | |- Cart.java
| | |- Order.java
| | |- Product.java
| | `- User.java
| `- util/
| `- DBConnection.java
`- webapp/
|- index.jsp
|- login.jsp
|- products.jsp
|- cart.jsp
|- orders.jsp
|- css/style.css
`- WEB-INF/web.xml
src/main/java/com/example/onlineshopping/model/contains POJOs (User,Product,Cart,Order)CartandOrderuse inheritance fromProductsrc/main/java/com/example/onlineshopping/dao/isolates SQL operations (UserDAO,ProductDAO,OrderDAO)src/main/java/com/example/onlineshopping/util/DBConnection.javacentralizes DB connectivitysrc/main/webapp/contains JSP pages for UI and request flow
- Model: POJOs in
src/main/java/com/example/onlineshopping/model/User,Product,Cart,OrderCartandOrderextendProduct
- View: JSP pages in
src/main/webapp/index.jsp,login.jsp,products.jsp,cart.jsp,orders.jsp
- Controller: Servlets in
src/main/java/com/example/onlineshopping/RegisterServlet,LoginServlet,ProductServlet,AddToCartServlet,CheckOutServlet,LogoutServlet,RemoveFromCartServlet
- DAO layer: JDBC data operations in
src/main/java/com/example/onlineshopping/dao/UserDAO,ProductDAO,OrderDAO
- DB Utility:
DBConnectioninsrc/main/java/com/example/onlineshopping/util/
To build and run this project successfully, ensure the following prerequisites are installed and configured:
- A working
gitinstallation - Java JDK (target currently configured as Java 25 in
pom.xml) - Maven Wrapper (
mvnw/mvnw.cmd) or Maven installed globally - MySQL server running locally
- Apache Tomcat 10.1+ for deployment
- OpenJDK (version matching project target)
- Maven and Git
- MySQL Server
Example:
# Arch
sudo pacman -S jdk-openjdk maven git mysql
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y openjdk-21-jdk maven git mysql-server- JDK installed and added to
PATH - Maven (optional if using Maven Wrapper)
- MySQL Server and Workbench (optional)
- PowerShell terminal
- VS Code / IntelliJ IDEA
- GitHub Desktop
- Postman (for endpoint testing)
Note: If your local JDK is lower than 25 (for example Java 17), update
maven.compiler.sourceandmaven.compiler.targetinpom.xmlaccordingly.
git clone https://github.com/Code-Crew-Nexus/online-shopping-website.git
cd online-shopping-websiteThe docs/ folder includes Python scripts for managing dependency setup and ongoing requirement updates.
py -3 docs/setup_dependencies.pyDry run preview:
py -3 docs/setup_dependencies.py --dry-runAppend new packages:
py -3 docs/update_requirements.py --mode append --packages requests==2.32.3Overwrite requirements completely:
py -3 docs/update_requirements.py --mode overwrite --packages flask==3.1.0 requests==2.32.3Overwrite from current environment (pip freeze):
py -3 docs/update_requirements.py --mode overwrite --from-freezeThis project includes .gitattributes to reduce CRLF/LF conflicts between Windows 11 and Arch Linux:
- LF is enforced for source/config/documentation files (
.java,.jsp,.xml,.md,.py, etc.) - CRLF is enforced for Windows command scripts (
.bat,.cmd,.ps1) - Binary assets are marked as binary to avoid EOL conversions
.\mvnw.cmd clean packageThis generates target/OnlineShopping-1.0-SNAPSHOT.war.
mvn clean package- Copy
target/OnlineShopping-1.0-SNAPSHOT.warinto Tomcatwebapps/ - Start Tomcat
- Open:
http://localhost:8080/OnlineShopping-1.0-SNAPSHOT/index.jsp(registration)http://localhost:8080/OnlineShopping-1.0-SNAPSHOT/login.jsp(login)
POST /register-> register a new userPOST /login-> authenticate and create sessionGET /products-> load products and forward toproducts.jspGET /add-to-cart?id=<productId>-> add/increment cart item in sessionGET /cart-check-out-> persist orders from cartGET /logout-> invalidate session
The request lifecycle follows:
- User authenticates (
LoginServlet) and session storesauthUser - Product catalog is fetched via
ProductDAOand rendered byproducts.jsp - Cart operations mutate
cart-listinsideHttpSession - Checkout iterates cart lines and persists each order through
OrderDAO - Orders are displayed in
orders.jspfor authenticated users
The app expects a MySQL database named shop_db (based on DBConnection.java).
CREATE DATABASE IF NOT EXISTS shop_db;
USE shop_db;
CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
role VARCHAR(50) DEFAULT 'USER'
);
CREATE TABLE IF NOT EXISTS products (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
description TEXT,
image_url VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS orders (
o_id INT PRIMARY KEY AUTO_INCREMENT,
p_id INT NOT NULL,
u_id INT NOT NULL,
o_quantity INT NOT NULL,
o_date VARCHAR(20) NOT NULL,
o_address VARCHAR(255),
FOREIGN KEY (p_id) REFERENCES products(id),
FOREIGN KEY (u_id) REFERENCES users(id)
);INSERT INTO products (id, name, price, description, image_url) VALUES
(1, 'Container A', 120.00, 'Standard dry container', NULL),
(2, 'Container B', 250.00, 'Refrigerated container', NULL),
(3, 'Pallet Bundle', 75.50, 'Bulk pallet pack', NULL)
ON DUPLICATE KEY UPDATE name = VALUES(name), price = VALUES(price);Update src/main/java/com/example/onlineshopping/util/DBConnection.java if needed:
- URL:
jdbc:mysql://localhost:3306/shop_db - Username/password: your local MySQL credentials
.\mvnw.cmd test- Session state management: Stores cart in
HttpSessionasArrayList<Cart> - Session guarding:
products.jspandcart.jspredirect unauthenticated users tologin.jsp - Checkout workflow: Creates an order record for each cart line item and clears the session cart after success
- DAO abstraction: SQL logic isolated in DAO classes
- OOP modeling: Inheritance used in
CartandOrder
This project demonstrates end-to-end enterprise web application fundamentals using Java Servlets, JSP, JDBC, and MySQL. It is designed for academic learning and practical understanding of MVC/DAO architecture, session management, and order processing workflows.
- Mangali Sai Krishna
- Md. Abdul Rayain
- Rishit Ghosh
- Yaram Karthik
Future contributors welcome! Fork the repo, submit pull requests, and help improve the project.
- Passwords are currently stored in plain text (for academic/demo use). In production, use hashing (for example, BCrypt).
- Database connection settings are hardcoded in
DBConnection.java. CheckOutServletcurrently writes a static shipping address (Hyderabad Hub (PBL Demo)).- Developed as part of Year II, Semester 2 PBL (Problem-Based Learning) coursework.