⏰ 2024.12.06 (D+42)
🖥️ JSP 처리 과정 (Execution Flow)
1. 클라이언트의 요청
: 클라이언트가 브라우저에서 JSP 페이지에 대한 HTTP 요청 보내기2. JSP 변환
- JSP 파일은 첫 번째 요청 시 서블릿으로 변환
: 웹 서버의 JSP 컨테이너는 JSP 파일을 서블릿(Java 서블릿 코드)으로 변환- 이 변환 과정에서 JSP 페이지의 내용은 서블릿 코드로 바뀌며, .java 파일로 컴파일
: 이 서블릿은 JSP 페이지가 로드될 때마다 실행3. 컴파일
- JSP 파일이 서블릿으로 변환되면, 변환된 .java 파일을 Java 컴파일러가 컴파일하여 .class 파일을 생성
- .class 파일은 서버에서 실행 가능한 서블릿 코드
4. 서블릿 실행
- 컴파일된 서블릿 파일이 클라이언트의 요청을 처리
- 서블릿의 service() 메소드가 호출되어 요청을 처리하고, 응답을 생성
- 서블릿 내부에서 JSP 코드에 해당하는 Java 코드를 실행하여 동적인 데이터를 처리하거나, HTML 콘텐츠를 생성
5. 응답 반환
- 서블릿은 요청에 대한 결과를 HTTP 응답으로 생성하여 클라이언트에 반환
- 클라이언트는 서버에서 받은 HTML을 브라우저에서 렌더링하여 웹 페이지를 표시
6. 후속 요청
- JSP 페이지는 이후 요청에 대해서는 이미 변환된 서블릿을 실행하여 응답을 처리
- JSP 파일이 변경되면, 서버는 새로운 서블릿으로 변환하여 실행
⭐ JSP 처리 과정 요약:
: 클라이언트 요청 → JSP 파일 변환 → 서블릿 실행 → 응답 반환 → 클라이언트로 출력
1) Directive (지시자)
✅ 목적
- JSP 페이지에 대한 설정 정보를 제공하는 태그
- 페이지의 전반적인 특성을 정의하며, 일반적으로 페이지의 속성이나 전처리 설정을 지정
☑️ 종류
- page: JSP 페이지의 속성을 설정
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
- include: 다른 JSP 파일을 포함하는 지시자
<%@ include file="header.jsp" %>
- taglib: 태그 라이브러리를 정의하여 JSP 페이지에서 사용
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2) Scriptlet (스크립틀릿)
✅ 목적
- JSP 페이지 내에서 Java 코드를 삽입하는 데 사용
- 동적인 콘텐츠를 생성할 때 유용
☑️ 형식
<% // Java 코드 %>✔️ 예시
<% String user = "Alice"; out.println("Hello, " + user); %>
- 사용 목적: 변수 선언, 조건문, 반복문 등을 처리할 때 사용
3) Expression (표현식)
✅ 목적
- Java 코드의 값을 직접적으로 출력하는 데 사용
- out 객체를 통해 클라이언트로 결과를 출력
☑️ 형식
<%= expression %>✔️ 예시
<%= new java.util.Date() %>
- 위 코드는 현재 날짜와 시간을 출력
4) Declaration (선언)
✅ 목적
- JSP 페이지 내에서 변수를 선언하거나 메서드를 정의할 때 사용
- 선언된 변수나 메서드는 JSP 페이지 전체에서 사용
☑️ 형식
<%! declaration %>✔️ 예시
<%! private int counter = 0; %>
5) Action (액션 태그)
✅ 목적
- JSP 페이지에서 서버 측 작업을 수행하는 태그
- 다른 JSP 페이지를 포함하거나 포워딩하는 등의 기능을 제공
✔️ 예시 1
- <jsp:include>: 다른 JSP 페이지를 포함
<jsp:include page="footer.jsp" />✔️ 예시 2
- <jsp:forward>: 요청을 다른 페이지로 전달
<jsp:forward page="nextPage.jsp" />
6) JSTL (JavaServer Pages Standard Tag Library)
✅ 목적
- JSP 페이지에서 자주 사용하는 작업을 처리할 수 있도록 도와주는 표준 태그 라이브러리
- 예를 들어 조건문, 반복문 등을 처리
✔️ 예시 1
- <c:if>: 조건문 처리
<c:if test="${user == 'Alice'}"> Hello, Alice! </c:if>✔️ 예시 2
- <c:forEach>: 반복문 처리
<c:forEach var="item" items="${items}"> <p>${item}</p> </c:forEach>
1) Scriptlet (스크립틀릿)
- Java 코드 블록을 삽입할 때 사용
✅ 형식
<% // Java 코드 %>✔️ 예시
<% int x = 10; int y = 20; out.println("Sum: " + (x + y)); %>
2) Expression (표현식)
- Java 표현식을 삽입하여 그 결과를 HTML 페이지에 출력할 때 사용
✅ 형식
<%= expression %>✔️ 예시
<%= 3 + 5 %> <!-- 8 출력 -->
3) Declaration (선언)
- Java 클래스 수준 변수나 메서드를 선언할 때 사용
- JSP 페이지에서 한 번 선언하면 페이지 내에서 공유
✅ 형식
<%! type variableName; %>✔️ 예시
<%! private int count = 0; %>
1) HTML 주석
✅ 목적
: JSP 페이지에서 HTML 내에 주석을 작성하는 경우, 클라이언트(브라우저)에 표시되지 ❌☑️ 형식
<!-- 이 부분은 HTML 주석입니다 -->
2) JSP 주석
✅ 목적
- JSP 페이지 내에서 사용되는 Java 코드 영역에 주석을 작성할 때 사용
- 이 주석은 서버에서 처리되지 않으며, 클라이언트에게 노출 ❌
☑️ 형식
<%-- 이 부분은 JSP 주석입니다 --%>✔️ 예시
<%-- 이 코드는 서버에서만 처리됩니다 --%>