MVC Architecture Pattern in Java
Learn MVC (Model View Controller) Architecture Pattern in Java with Spring MVC, request lifecycle, enterprise applications, UML diagrams, code examples, and real-world use cases.
What You Will Learn
- What is MVC?
- Why MVC is Needed
- MVC Components
- Request Processing Flow
- Java MVC Implementation
- Spring MVC Architecture
- Enterprise Use Cases
- Benefits and Limitations
- Interview Questions
Introduction
Most enterprise applications need to separate:
User Interface
Business Logic
Data Access Logic
Without proper separation:
public class CustomerPage {
public void saveCustomer() {
// UI Logic
// Business Logic
// Database Logic
}
}
Problems:
Huge Classes
Hard Maintenance
Difficult Testing
Poor Scalability
MVC solves this problem.
What is MVC?
MVC stands for:
M = Model
V = View
C = Controller
MVC separates application responsibilities into independent layers.
Purpose of MVC
Primary Goal:
Separation Of Concerns
Each layer has a dedicated responsibility.
MVC Architecture
flowchart LR
A[User]
B[Controller]
C[Model]
D[View]
A --> B
B --> C
C --> D
D --> A
MVC Components
Model
Represents:
Business Logic
Domain Objects
Database Data
Examples:
Customer
Account
Order
Employee
View
Responsible for:
Displaying Data
User Interface
HTML Pages
React Pages
Angular Pages
Controller
Acts as:
Request Handler
Traffic Controller
Coordinator
Receives requests and invokes business logic.
Real World Analogy
Restaurant Example:
Customer = User
Waiter = Controller
Chef = Model
Food = View
Workflow:
Customer Places Order
↓
Waiter Takes Order
↓
Chef Prepares Food
↓
Food Served
Request Flow
flowchart LR
A[Browser]
B[Controller]
C[Service]
D[Database]
E[View]
A --> B
B --> C
C --> D
D --> C
C --> B
B --> E
MVC Workflow
Step 1
User sends request.
GET /customers
Step 2
Controller receives request.
@GetMapping("/customers")
Step 3
Controller calls service layer.
Step 4
Service fetches data.
Step 5
Data returned to controller.
Step 6
Controller returns view.
Step 7
View displayed to user.
MVC Example
Customer Management Application.
Model Class
public class Customer {
private Long id;
private String name;
private String email;
// Getters Setters
}
Service Layer
@Service
public class CustomerService {
public List<Customer> getCustomers() {
return List.of(
new Customer(
1L,
"John",
"[email protected]"
)
);
}
}
Controller
@Controller
public class CustomerController {
@Autowired
private CustomerService service;
@GetMapping("/customers")
public String customers(
Model model) {
model.addAttribute(
"customers",
service.getCustomers());
return "customers";
}
}
View (Thymeleaf)
<table>
<tr th:each="customer : ${customers}">
<td th:text="${customer.name}"></td>
</tr>
</table>
MVC Execution Flow
sequenceDiagram
Browser->>Controller: GET /customers
Controller->>Service: getCustomers()
Service->>Database: Fetch Data
Database-->>Service: Customers
Service-->>Controller: Response
Controller-->>View: Model Data
View-->>Browser: HTML Page
Spring MVC Architecture
Core Components:
DispatcherServlet
Controller
Service
Repository
View Resolver
Spring MVC Flow
flowchart LR
A[Client]
B[DispatcherServlet]
C[Controller]
D[Service]
E[Repository]
F[Database]
G[ViewResolver]
A --> B
B --> C
C --> D
D --> E
E --> F
C --> G
DispatcherServlet
Heart of Spring MVC.
Responsibilities:
Receive Requests
Find Controller
Execute Controller
Return Response
Front Controller Pattern
Spring MVC internally uses:
Front Controller Pattern
Front Controller Flow
flowchart LR
A[Client Request]
B[DispatcherServlet]
C[Controllers]
A --> B
B --> C
Banking Example
Internet Banking Application.
Models:
Account
Transaction
Customer
Controllers:
AccountController
TransactionController
Views:
Account Summary
Transaction History
Banking MVC Flow
flowchart LR
A[User]
B[Account Controller]
C[Account Service]
D[Account Repository]
E[Database]
A --> B
B --> C
C --> D
D --> E
Insurance Example
Claim Management System.
Models:
Claim
Policy
Customer
Controllers:
ClaimController
PolicyController
Views:
Claim Dashboard
Policy Details
Insurance Workflow
flowchart LR
A[User]
B[Claim Controller]
C[Claim Service]
D[Claim Repository]
E[Database]
A --> B
B --> C
C --> D
D --> E
REST API MVC
Modern Spring Boot applications:
Controller
↓
Service
↓
Repository
Return:
{
"id": 1,
"name": "John"
}
Instead of HTML.
REST MVC Flow
flowchart LR
A[Client]
B[RestController]
C[Service]
D[Repository]
E[Database]
A --> B
B --> C
C --> D
D --> E
MVC In Spring Boot
Annotations:
@Controller
@RestController
@Service
@Repository
Enterprise Examples
Banking
Online Banking
Account Management
Transaction History
Insurance
Policy Management
Claims Processing
Retail
Order Management
Inventory Tracking
Healthcare
Patient Management
Appointment Scheduling
Benefits
✅ Separation Of Concerns
✅ Easier Maintenance
✅ Better Testability
✅ Improved Scalability
✅ Reusable Components
✅ Cleaner Architecture
Limitations
❌ More Layers
❌ Additional Complexity
❌ Small Applications May Not Need MVC
When To Use
Use MVC when:
- Building Web Applications
- Building Enterprise Systems
- Multiple Teams Work Together
- Clear Separation Is Needed
When Not To Use
Avoid when:
- Simple Utility Applications
- Very Small Projects
MVC vs Layered Architecture
| Feature | MVC | Layered |
|---|---|---|
| Focus | UI Separation | Business Layer Separation |
| View Layer | Yes | Optional |
| Web Applications | Excellent | Good |
MVC vs MVP
| Feature | MVC | MVP |
|---|---|---|
| Controller | Yes | No |
| Presenter | No | Yes |
| Coupling | Moderate | Lower |
MVC vs MVVM
| Feature | MVC | MVVM |
|---|---|---|
| Controller | Yes | No |
| ViewModel | No | Yes |
| Popular In | Spring | Angular, WPF |
Real Enterprise Architecture
flowchart LR
A[Client]
B[Controller]
C[Service]
D[Repository]
E[Database]
A --> B
B --> C
C --> D
D --> E
Interview Questions
What is MVC?
A software architecture pattern that separates application into Model, View, and Controller.
What is Model?
Business data and logic.
What is View?
Presentation layer.
What is Controller?
Handles requests and coordinates workflow.
What is DispatcherServlet?
Front Controller in Spring MVC.
MVC Used In?
Spring MVC
Spring Boot
Struts
JSF
Main Benefit?
Separation of concerns.
Key Takeaways
- MVC stands for Model View Controller.
- Separates UI, Business Logic, and Data.
- Improves maintainability and scalability.
- Spring MVC is the most common Java implementation.
- DispatcherServlet acts as Front Controller.
- Widely used in Banking, Insurance, Retail, and Healthcare applications.
- Foundation for modern Spring Boot applications.