02. 챕터 만들기

x 뜨면 눌러서 임폴트를 해주고 이 파일에서 오른쪽 버튼 -> 소스 -> 오버라이드 메뉴를 눌러준다

/여부

/가 먼저 시작되면 절대경로

/가 중간에 있으면 폴더구분

경로 종류 의미 사용 여부
"chapter02/declaration02.jsp" ✅ 상대경로 webapp/chapter02/...에서 찾음 ⭕ 추천
"/chapter02/declaration02.jsp" ❌ 절대경로 프로젝트 루트(/) 기준 → 찾기 어려움 ❗ 실습에선 피하기
"chapter02/abc/declaration02.jsp" ✅ 상대경로 중간 /는 폴더 구분일 뿐 ⭕ 괜찮음

declaration02.java 파일을 기준


✅ 예제 2-2 기준 JSP 실습 정리표

Step 작업파일 Task 예시 코드 / 설명 ⚠️ 헷갈리면 안 되는 포인트
1 index.html 요청 작성 <a href="/JSPBook/exam2_2">2-2 예제 이동</a> 🔥 "exam2_2"@WebServlet("/exam2_2")의 경로와 일치해야 함. 자바 파일명 아님
2-1 declaration02.java 클래스 생성 public class declaration02 {} 클래스명은 파일명과 일치하게 설정 (declaration02)
2-2 declaration02.java 상속 public class declaration02 extends HttpServlet {} HttpServlet 임포트 필요. 직접 해야함 (javax.servlet.http.*)
2-3 declaration02.java 오버라이딩 doGet() 또는 doPost() 자동 생성 🔥 오버라이드 후 아래 코드 바로 삽입해야 함
⬇️ declaration02.java 오버라이드 후 코드 작성 System.out.println("2_2 예제 연결되었습니다.");
RequestDispatcher ds = req.getRequestDispatcher("chapter02/declaration02.jsp");
ds.forward(req, resp);
경로 앞에 슬래시(/)를 붙이면 톰캣 기준 절대경로, 안 붙이면 상대경로(webapp 기준)로 처리됨. 중간의 /는 단순히 폴더 경로 구분자일 뿐 절대/상대 여부에 영향을 주지 않음
2-4 declaration02.java 연결 작업 @WebServlet("/exam2_2") 🔥 index.html의 <a href="...">와 정확히 일치해야 함
2-5 declaration02.java 연결 확인용 출력 System.out.println(...) 🔥 브라우저 화면이 아니라 콘솔에서 확인됨
3 declaration02.java 뷰 전송 이미 위에서 RequestDispatcherdeclaration02.jsp로 전송함 JSP 파일이 사용자에게 보여지는 부분
4 declaration02.jsp 실습 JSP 작성 위치: src/main/webapp/chapter02/declaration02.jsp 🔥 파일명은 서블릿과 같아도 되고 달라도 됨. 이 예제에선 같음

✅ 흐름 요약 (예제 2-2)

  1. index.html/exam2_2 요청 발생
  2. declaration02.java@WebServlet("/exam2_2")으로 요청 처리
  3. doGet() → 연결 확인 출력 + JSP로 포워딩
  4. declaration02.jsp → 브라우저에 최종 화면 표시

🔥 정리

헷갈릴 수 있는 지점 설명
@WebServlet("/...") 값이 자바 파일명이 아님 이건 요청 URL이야. index.html의 링크랑 매칭돼야 작동
getRequestDispatcher()/ 붙이면 안 됨 /chapter02/declaration02.jsp ❌ → chapter02/declaration02.jsp
System.out.println()은 콘솔 출력 브라우저에 보이는 건 아님. 연결 확인용 로그
자바 파일명과 JSP 파일명은 같아도 되고 달라도 됨  

requestDispatcher ds = req.getRequestDispatcher ( "챕터02/declaration02.jsp");


"객체를 출력할 때 두 가지 방식"
① 기본 주소 출력 방식
toString() 방식


✅ 객체 출력의 두 가지 방식

방식 설명 출력 예시 동작 원리
1. 기본 출력 (주소처럼 보임) toString()을 오버라이딩하지 않았을 때 클래스명@해시코드
예: Person@3f99bd52
Object 클래스의 기본 toString()이 호출됨
2. toString() 객체 내부에서 toString()을 재정의했을 때 예: 이름: 홍길동 println()이 내부적으로 toString() 호출 → 오버라이딩된 내용 출력됨

🔹 1. 기본 방식 (주소처럼 출력됨)

public class Person {
    String name = "홍길동";
}

Person p = new Person();
System.out.println(p);

출력:

Person@3f99bd52

🔸 이유: Object의 기본 toString()이 실행됨 →
클래스명@16진수 해시코드


🔹 2. toString() 오버라이딩 방식

public class Person {
    String name = "홍길동";

    @Override
    public String toString() {
        return "이름: " + name;
    }
}

Person p = new Person();
System.out.println(p);

출력:

이름: 홍길동

🔸 이유: println()이 내부적으로 p.toString() 호출함 →
재정의한 문자열이 출력됨


요약

객체를 출력할 때, toString()을 오버라이딩하지 않으면 클래스명@해시코드가 출력된다.
오버라이딩하면 내가 정의한 문자열이 출력된다.
둘 다 println() 내부에서 toString()을 호출해서 출력하는 구조다.


 

JSTL파일 넣는 곳. WEB-INF -> lib 폴더 안에 JSTL 파일을 넣는다. 

jstl-1.2.jar
0.40MB

 

 

'JSP' 카테고리의 다른 글

HTML → Servlet → JSP  (0) 2025.05.23
JSP에서 Enumeration 개념  (0) 2025.05.23
147p 도서목록 표시하기 DAO DTO  (0) 2025.05.22
JSP 주요 문법 기호 정리  (0) 2025.05.21
00. 초기환경설정부터  (0) 2025.05.20