언제 폴더 경로를 써야 하고, 언제 안 써도 되는지

📁 파일 타입별 경로 규칙

JSP 파일 → 📄 전체 경로 필요 (폴더/파일.jsp)
서블릿   → 🔗 URL 매핑만 (폴더 없이)
이미지   → 🖼️ 웹 경로 (/프로젝트명/폴더/파일)

📄 JSP 파일 경로 (폴더 포함)

Why 전체 경로?

JSP는 실제 파일이라서 정확한 위치를 알려줘야 함

// ✅ 올바른 JSP 경로 (폴더 포함)
RequestDispatcher dispatcher = req.getRequestDispatcher("chapter07/fileupload02.jsp");
RequestDispatcher dispatcher = req.getRequestDispatcher("chapter07/fileupload02_process.jsp");
프로젝트 구조와 비교:
src/main/webapp/
├── chapter07/          ← 이 폴더명 포함!
│   ├── fileupload02.jsp           ← 이 파일
│   └── fileupload02_process.jsp   ← 이 파일
└── index.jsp

패턴:

// 패턴: "폴더명/파일명.jsp"
req.getRequestDispatcher("chapter07/fileupload02.jsp");
req.getRequestDispatcher("chapter08/loginForm.jsp");  
req.getRequestDispatcher("member/signup.jsp");

// ❌ 틀린 예시
req.getRequestDispatcher("fileupload02.jsp");  // 폴더 없으면 못 찾음!

🔗 서블릿 URL (폴더 없이)

Why 폴더 없이?

서블릿은 가상 URL이라서 실제 폴더 구조와 상관없음

<!-- ✅ 올바른 서블릿 연결 (폴더 없이) -->
<form action="exam7_2" method="post">
<a href="exam7_4">파일 업로드</a>
// 서블릿은 어느 패키지에 있든 상관없음
package chapter07;  // ← 실제로는 이 폴더에 있지만
@WebServlet("/exam7_2")  // ← URL은 그냥 "/exam7_2"

패턴:

<!-- HTML/JSP에서 서블릿 호출 -->
<form action="exam7_2">     <!-- 폴더 없이 그냥 이름만 -->
<form action="loginServlet">
<a href="fileUpload">
<a href="memberList">

<!-- ❌ 틀린 예시 -->
<form action="chapter07/exam7_2">  <!-- 서블릿은 폴더 안 써도 됨! -->

🖼️ 이미지/리소스 경로 (웹 경로)

Why 특별한가?

브라우저가 직접 접근하는 웹 리소스라서 전체 웹 경로 필요

<!-- ✅ 올바른 이미지 경로 -->
<img src="/JSPBook/resources/images/<%= filename %>">
웹 경로 구조:
/JSPBook/                    ← 프로젝트명 (Context Path)
├── resources/               ← 웹에서 접근 가능한 폴더
│   └── images/              ← 이미지 폴더
│       ├── photo1.jpg       ← 실제 이미지 파일
│       └── photo2.png
└── chapter07/               ← JSP 폴더 (브라우저가 직접 접근 안 함)
    └── fileupload02.jsp

패턴:

<!-- 이미지 경로: /프로젝트명/폴더/파일 -->
<img src="/JSPBook/resources/images/photo.jpg">
<img src="/JSPBook/resources/css/style.css">

<!-- 상대 경로로도 가능 -->
<img src="resources/images/photo.jpg">

<!-- ❌ 틀린 예시 -->
<img src="images/photo.jpg">  <!-- resources 폴더 빠짐! -->

🔍 비교표로 완전 정리

타입 사용 위치 경로 작성법 예시
JSP 파일 서블릿 → JSP 폴더/파일.jsp "chapter07/fileupload02.jsp"
서블릿 HTML/JSP → 서블릿 서블릿명만 "exam7_2"
이미지 JSP → 브라우저 /프로젝트명/폴더/파일 "/JSPBook/resources/images/photo.jpg"

📝 실제 코드 예시로 확인

예시 1: 파일 업로드 플로우

// 1. 서블릿에서 JSP로 (폴더 포함)
@WebServlet("/exam7_2")  // ← URL (폴더 없음)
public class exam7_2 extends HttpServlet {

    protected void doGet() {
        // JSP 파일 (폴더 포함)
        RequestDispatcher ds = req.getRequestDispatcher("chapter07/fileupload02.jsp");
        ds.forward(req, resp);
    }

    protected void doPost() {
        // 처리 후 결과 JSP (폴더 포함)  
        RequestDispatcher ds = req.getRequestDispatcher("chapter07/fileupload02_process.jsp");
        ds.forward(req, resp);
    }
}
<!-- 2. JSP에서 서블릿으로 (폴더 없음) -->
<form action="exam7_2" method="post">  <!-- 서블릿 (폴더 없음) -->
    <input type="file" name="filename">
    <input type="submit" value="업로드">
</form>
<!-- 3. JSP에서 이미지 표시 (웹 경로) -->
<img src="/JSPBook/resources/images/<%= filename %>">  <!-- 이미지 (전체 웹 경로) -->

🎯 헷갈리지 않는 방법

기억하기 쉬운 규칙:

1. .jsp 확장자가 있으면 → 폴더 포함

req.getRequestDispatcher("chapter07/fileupload02.jsp");     // ✅
req.getRequestDispatcher("member/login.jsp");              // ✅

2. 서블릿 이름이면 → 폴더 없이

<form action="exam7_2">        // ✅
<a href="loginServlet">        // ✅

3. 브라우저가 직접 보는 거면 → 전체 웹 경로

<img src="/JSPBook/resources/images/photo.jpg">    // ✅
<link href="/JSPBook/resources/css/style.css">     // ✅

🚨 자주 하는 실수들

❌ 실수 1: 서블릿에 폴더 경로 붙이기

<!-- 틀림 -->
<form action="chapter07/exam7_2">

<!-- 맞음 -->  
<form action="exam7_2">

❌ 실수 2: JSP에서 폴더 빼먹기

// 틀림
req.getRequestDispatcher("fileupload02.jsp");

// 맞음
req.getRequestDispatcher("chapter07/fileupload02.jsp");

❌ 실수 3: 이미지 경로에서 프로젝트명 빼먹기

<!-- 틀림 -->
<img src="resources/images/photo.jpg">

<!-- 맞음 -->
<img src="/JSPBook/resources/images/photo.jpg">

🔄 내 프로젝트에 맞게 바꾸는 법

// 내 프로젝트명이 "MyProject"라면
<img src="/MyProject/resources/images/photo.jpg">

// 내 JSP가 "views" 폴더에 있다면  
req.getRequestDispatcher("views/upload.jsp");

// 내 서블릿이 "FileUploadServlet"이라면
<form action="FileUploadServlet">

'JSP' 카테고리의 다른 글

JSP에 필요한 자바 공부 순서  (0) 2025.05.28
요청->서블릿->뷰 3단계 설명  (0) 2025.05.27
MultipartRequest  (0) 2025.05.27
DiskFileUpload 순서도 (시험 X)  (0) 2025.05.27
[오류log] 서버 깨질 때 서블렛 확인할 것  (0) 2025.05.27