# Directory Structure

> Backend directory organization for the JSP + Servlet + MySQL application.

---

## Overview

Future backend code should follow the established B/S layered architecture.
There is no application source tree yet; the paths and package names below are
illustrative conventions to use when creating the first application code.

---

## Suggested Layout

```text
src/main/java/com/mzh/library/
  controller/       Servlet controllers such as BookServlet
  service/          Service interfaces such as BookService
  service/impl/     Business implementations such as BookServiceImpl
  dao/              DAO interfaces such as BookDao
  dao/impl/         MySQL DAO implementations such as BookDaoImpl
  entity/           JavaBeans/entities such as Book, Reader, BorrowRecord
  filter/           Authentication, authorization, encoding filters
  util/             Shared utilities such as JdbcUtil or DateUtil
src/main/resources/
  db.properties     MySQL connection configuration when introduced
src/main/webapp/
  WEB-INF/web.xml   Servlet/filter mappings when annotations are not used
```

Use the package root consistently once the first code is created. If a
different root package is chosen in IDEA, update this spec in the same change.

---

## Layer Responsibilities

- `controller`: Servlet classes dispatch requests, validate parameters, call
  services, choose JSP forwards or redirects, and return results.
- `service`: Business workflows including book warehousing/intake, borrowing,
  returning, renewals, inventory status updates, overdue statistics, and
  permission checks.
- `dao`: CRUD and query access to MySQL. DAOs should not perform presentation
  rendering or multi-step business workflows.
- `entity`: Plain data objects representing books, categories, readers,
  borrowing records, administrators, roles/permissions, and system logs.
- `filter`: Cross-cutting web concerns such as login checks, role guards, and
  request encoding.
- `util`: Small shared helpers only after searching for existing helpers first.

---

## Naming Conventions

- Servlet controllers use names such as `BookServlet`, `ReaderServlet`,
  `BorrowServlet`, and `LoginServlet`.
- Service interfaces and implementations use names such as `BookService` and
  `BookServiceImpl`.
- DAO interfaces and implementations use names such as `BookDao` and
  `BookDaoImpl`.
- Entity names should be singular Java nouns such as `Book`, `BookCategory`,
  `Reader`, `BorrowRecord`, `Administrator`, `RolePermission`, and
  `SystemLog`.

---

## Boundaries

Do not put SQL in JSPs or Servlets. Do not put HTML generation in DAOs or
services. Keep permission checks in filters/services and keep request parameter
parsing in controllers.
