Skip to content

YourNote 202: Project Structure

Zhamri Che Ani edited this page May 3, 2026 · 2 revisions

Common Project Structure

MyWebApp/
│
├── src/                         → Java source files
│   └── com/example/
│       ├── servlet/
│       │   └── LoginServlet.java
│       ├── model/
│       │   └── User.java
│       └── dao/
│           └── UserDAO.java
│
├── WebContent/   (or webapp/)   → Web resources
│   ├── index.jsp
│   ├── login.jsp
│   ├── home.jsp
│   │
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── script.js
│   │
│   └── WEB-INF/
│       ├── web.xml
│       ├── lib/                 → external JAR files
│       └── classes/             → compiled .class files (auto-generated)
│
└── build/ (or target/)          → compiled output (if using Maven/Gradle)

1. src/ (Java Code Layer)

Organize using packages

  • servlet/ → all Servlets (controller layer)
  • model/ → JavaBean / POJO (data)
  • dao/ → database access (JDBC)

This follows MVC pattern:

  • Model → model
  • View → JSP
  • Controller → Servlet

2. WebContent/ or webapp/

This is what the browser can access.

Common files:

  • index.jsp → entry page
  • .jsp files → UI (View)
  • css/, js/ → frontend assets

3. WEB-INF/

This folder is NOT accessible directly via browser.

Contains:

  • web.xml → deployment descriptor (Servlet mapping)
  • lib/ → JAR dependencies. Example:
    • mysql-connector-j-8.0.33.jar
    • jakarta.servlet-api-6.0.0.jar
    • commons-lang3-3.13.0.jar
  • classes/ → compiled Java classes

Example:

http://localhost:8080/MyWebApp/WEB-INF/web.xml ❌ NOT ALLOWED

4. web.xml Servlet Mapping

Example:

<web-app>
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.example.servlet.LoginServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
</web-app>

Modern Structure (Maven Project)

If you want a cleaner + industry style, use Maven

MyWebApp/
│
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/...
│   │   │
│   │   ├── webapp/
│   │   │   ├── index.jsp
│   │   │   └── WEB-INF/
│   │   │       └── web.xml
│   │   │
│   │   └── resources/
│   │
│   └── test/
│
├── pom.xml
└── target/

This is the structure used in:

  • enterprise apps
  • CI/CD pipelines (GitHub Actions, Jenkins)
  • Docker deployments

Simple Version (For Beginners)

MyWebApp/
│
├── src/
│   └── LoginServlet.java
│
├── WebContent/
│   ├── index.jsp
│   ├── result.jsp
│   └── WEB-INF/
│       └── web.xml

webapp/ vs WebContent/

Feature webapp WebContent
Used by Maven / Gradle Eclipse (Dynamic Web Project)
Standard ✅ Yes (industry) ❌ No (IDE-specific)
Modern? ✅ Yes ❌ Older
Recommended? ✅ YES OK for beginners

Best Practices

  1. Always separate:
    • Servlet (logic)
    • JSP (UI)
  2. ❌ Do NOT write ALL Java code inside JSP (bad practice)
  3. Use packages (com.uum.student)
  4. Follow MVC pattern
  5. Use meaningful folder names

Clone this wiki locally