# ehmjamiu/todoapp architecture

> Architecture diagram of the GitHub repository ehmjamiu/todoapp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ehmjamiu/todoapp
- Repository: https://github.com/ehmjamiu/todoapp

## Overview

#### Purpose and Runtime
This is a Java server-rendered todo application. It runs as a Servlet/JSP web application, with Maven as the Java build system and an additional Node package manifest present. Deployment and servlet routing are defined in `src/main/webapp/WEB-INF/web.xml`.

#### Application Entry Points
The operational entry points are HTTP servlet endpoints:
- Authentication/session lifecycle: `src/main/java/servlets/LoginServlet.java`, `src/main/java/servlets/LogoutServlet.java`
- Task commands: `src/main/java/servlets/AddTaskServlet.java`, `src/main/java/servlets/ChangeStatusServlet.java`, `src/main/java/servlets/DeleteTaskServlet.java`
- Task viewing: `src/main/java/servlets/ViewTaskServlet.java`

`src/main/java/com/example/todoapp/HelloApplication.java` and `src/main/java/com/example/todoapp/HelloResource.java` suggest a separate Jakarta/REST-style scaffold, but the servlet/JSP stack is the primary application structure indicated by the repository.

#### Web and Presentation Layer
JSPs render pages and forms:
- Landing/login UI: `src/main/webapp/index.jsp`, `src/main/webapp/login.jsp`
- Task creation and list views: `src/main/webapp/addTask.jsp`, `src/main/webapp/taskList.jsp`

Servlets form the controller boundary: they receive browser requests, manage request/session state, invoke persistence operations, then forward or redirect to JSP views. `src/main/webapp/WEB-INF/web.xml` is the central container-facing configuration boundary.

#### Domain Model
Task state is represented by:
- `src/main/java/model/Task.java`
- `src/main/java/model/TaskStatus.java`

`Task` is the persistence and UI transfer object; `TaskStatus` constrains lifecycle/status values. Status changes flow from `ChangeStatusServlet` through the DAO to the database, then back to the task-list presentation.

#### Persistence Boundary
`src/main/java/dao/TaskDAO.java` centralizes database access for task retrieval and mutations. It is the key separation between HTTP/controller code and SQL/JDBC operations.

`src/main/java/util/DBConnection.java` owns database connection creation/configuration. The repository includes `console.sql`, likely supporting schema setup or manual database inspection. Database credentials, transaction handling, and connection lifecycle are therefore important operational concerns.

#### Primary Flow
1. A user authenticates through `LoginServlet`; logout is handled by `LogoutServlet`.
2. Authenticated browser requests invoke task servlets.
3. Task servlets map submitted parameters to `Task`/`TaskStatus`.
4. `TaskDAO` reads or modifies records via `DBConnection`.
5. The controller forwards/redirects to JSP pages, especially `taskList.jsp`, to display current task state.

#### Infrastructure and Integration Boundaries
The application depends on a Java Servlet container with JSP support, JDBC-compatible database access, and Maven dependencies declared by `pom.xml`. CDI metadata exists at `src/main/resources/META-INF/beans.xml`, though its practical role is unclear from the tree. `package.json` and `package-lock.json` indicate possible frontend/package tooling, but no client source tree is present.

Main entry points: [`src/main/webapp/WEB-INF/web.xml`](https://github.com/ehmjamiu/todoapp/blob/main/src/main/webapp/WEB-INF/web.xml) (Servlet routing), [`src/main/java/dao/TaskDAO.java`](https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/dao/TaskDAO.java) (Task DAO), [`src/main/java/servlets/ViewTaskServlet.java`](https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/servlets/ViewTaskServlet.java) (View tasks servlet), [`src/main/java/servlets/LoginServlet.java`](https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/servlets/LoginServlet.java) (Login servlet)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web delivery"]
  node_webxml["Servlet routing<br/>web.xml<br/>[web.xml]"]
  node_loginjsp["Login pages<br/>JSP views<br/>[login.jsp]"]
  node_indexjsp["Landing page<br/>JSP view<br/>[index.jsp]"]
  node_addtaskjsp["Task creation form<br/>JSP view<br/>[addTask.jsp]"]
  node_tasklistjsp["Task list<br/>JSP view<br/>[taskList.jsp]"]
end

subgraph group_controllers["Servlet controllers"]
  node_login["Login servlet<br/>auth endpoint<br/>[LoginServlet.java]"]
  node_logout["Logout servlet<br/>auth endpoint<br/>[LogoutServlet.java]"]
  node_taskcommands["Task command servlets<br/>task endpoints"]
  node_viewtasks["View tasks servlet<br/>task endpoint"]
end

subgraph group_domain["Domain and persistence"]
  node_task["Task<br/>domain model<br/>[Task.java]"]
  node_status["Task status<br/>enum<br/>[TaskStatus.java]"]
  node_dao["Task DAO<br/>JDBC data access<br/>[TaskDAO.java]"]
  node_dbconnection["DB connection<br/>JDBC connection factory<br/>[DBConnection.java]"]
end

subgraph group_runtime["Runtime and build"]
  node_maven["Maven build<br/>build manifest<br/>[pom.xml]"]
  node_container{{"Servlet/JSP container<br/>application runtime"}}
end

node_browser(("Browser<br/>client"))
node_database[("Database")]

node_browser -->|"HTTP requests"| node_container
node_container -->|"loads routing"| node_webxml
node_webxml -->|"maps auth route"| node_login
node_webxml -->|"maps auth route"| node_logout
node_webxml -->|"maps task commands"| node_taskcommands
node_webxml -->|"maps task view"| node_viewtasks
node_login -->|"forwards or redirects"| node_loginjsp
node_logout -->|"redirects"| node_indexjsp
node_taskcommands -->|"maps request data"| node_task
node_taskcommands -->|"applies status"| node_status
node_taskcommands -->|"mutates tasks"| node_dao
node_viewtasks -->|"loads tasks"| node_dao
node_taskcommands -->|"serves form flow"| node_addtaskjsp
node_taskcommands -->|"redirects to list"| node_tasklistjsp
node_viewtasks -->|"forwards task state"| node_tasklistjsp
node_dao -->|"maps records"| node_task
node_dao -->|"obtains connections"| node_dbconnection
node_dbconnection -->|"JDBC"| node_database
node_maven -.->|"builds deployable app"| node_container

click node_webxml "https://github.com/ehmjamiu/todoapp/blob/main/src/main/webapp/WEB-INF/web.xml"
click node_loginjsp "https://github.com/ehmjamiu/todoapp/blob/main/src/main/webapp/login.jsp"
click node_indexjsp "https://github.com/ehmjamiu/todoapp/blob/main/src/main/webapp/index.jsp"
click node_addtaskjsp "https://github.com/ehmjamiu/todoapp/blob/main/src/main/webapp/addTask.jsp"
click node_tasklistjsp "https://github.com/ehmjamiu/todoapp/blob/main/src/main/webapp/taskList.jsp"
click node_login "https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/servlets/LoginServlet.java"
click node_logout "https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/servlets/LogoutServlet.java"
click node_viewtasks "https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/servlets/ViewTaskServlet.java"
click node_task "https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/model/Task.java"
click node_status "https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/model/TaskStatus.java"
click node_dao "https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/dao/TaskDAO.java"
click node_dbconnection "https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/util/DBConnection.java"
click node_maven "https://github.com/ehmjamiu/todoapp/blob/main/pom.xml"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_webxml,node_loginjsp,node_indexjsp,node_addtaskjsp,node_tasklistjsp toneBlue
class node_login,node_logout,node_taskcommands,node_viewtasks toneAmber
class node_task,node_status,node_dao,node_dbconnection toneMint
class node_maven,node_container toneRose
class node_browser,node_database toneNeutral
```

## Components

### Web delivery

- [Servlet routing](https://github.com/ehmjamiu/todoapp/blob/main/src/main/webapp/WEB-INF/web.xml): web.xml · Container-facing servlet deployment configuration. · `src/main/webapp/WEB-INF/web.xml`
- [Login pages](https://github.com/ehmjamiu/todoapp/blob/main/src/main/webapp/login.jsp): JSP views · `src/main/webapp/login.jsp`
- [Landing page](https://github.com/ehmjamiu/todoapp/blob/main/src/main/webapp/index.jsp): JSP view · `src/main/webapp/index.jsp`
- [Task creation form](https://github.com/ehmjamiu/todoapp/blob/main/src/main/webapp/addTask.jsp): JSP view · `src/main/webapp/addTask.jsp`
- [Task list](https://github.com/ehmjamiu/todoapp/blob/main/src/main/webapp/taskList.jsp): JSP view · `src/main/webapp/taskList.jsp`

### Servlet controllers

- [Login servlet](https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/servlets/LoginServlet.java): auth endpoint · `src/main/java/servlets/LoginServlet.java`
- [Logout servlet](https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/servlets/LogoutServlet.java): auth endpoint · `src/main/java/servlets/LogoutServlet.java`
- **Task command servlets**: task endpoints · Create, status-change, and delete handlers.
- [View tasks servlet](https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/servlets/ViewTaskServlet.java): task endpoint · `src/main/java/servlets/ViewTaskServlet.java`

### Domain and persistence

- [Task](https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/model/Task.java): domain model · Persistence and UI transfer object. · `src/main/java/model/Task.java`
- [Task status](https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/model/TaskStatus.java): enum · Constrains task lifecycle values. · `src/main/java/model/TaskStatus.java`
- [Task DAO](https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/dao/TaskDAO.java): JDBC data access · Centralizes task queries and mutations. · `src/main/java/dao/TaskDAO.java`
- [DB connection](https://github.com/ehmjamiu/todoapp/blob/main/src/main/java/util/DBConnection.java): JDBC connection factory · `src/main/java/util/DBConnection.java`

### Runtime and build

- [Maven build](https://github.com/ehmjamiu/todoapp/blob/main/pom.xml): build manifest · `pom.xml`
- **Servlet/JSP container**: application runtime

### Other components

- **Browser**: client
- **Database**: JDBC database

## Connections

- Browser → Servlet/JSP container: HTTP requests
- Servlet/JSP container → Servlet routing: loads routing
- Servlet routing → Login servlet: maps auth route
- Servlet routing → Logout servlet: maps auth route
- Servlet routing → Task command servlets: maps task commands
- Servlet routing → View tasks servlet: maps task view
- Login servlet → Login pages: forwards or redirects
- Logout servlet → Landing page: redirects
- Task command servlets → Task: maps request data
- Task command servlets → Task status: applies status
- Task command servlets → Task DAO: mutates tasks
- View tasks servlet → Task DAO: loads tasks
- Task command servlets → Task creation form: serves form flow
- Task command servlets → Task list: redirects to list
- View tasks servlet → Task list: forwards task state
- Task DAO → Task: maps records
- Task DAO → DB connection: obtains connections
- DB connection → Database: JDBC
- Maven build → Servlet/JSP container: builds deployable app
