JSP 는 서버에서 동적으로 웹 페이지를 생성하기 위한 기술이다.
HTML 내에 Java 코드를 포함할 수 있는 구조를 가진다.
Servlet 기반으로 동작하며, 주로 Spring Legacy(Spring MVC) 환경에서 View를 렌더링하는 데 사용된다.
HTML + Java : HTML 코드에 Java 코드를 직접 삽입할 수 있다.
Servlet 기반 : JSP 파일은 내부적으로 Servlet으로 변환되어 실행된다.
동적 페이지 : 클라이언트 요청에 따라 동적으로 콘텐츠를 생성 할 수 있다.
JSTL 및 EL(Expression Language) 지원 : 코드의 가독성을 높여 유지보수를 쉽게 한다.
이 과정에서 JSP는 한 번 변환되면 계속 재사용되며,
JSP 파일이 수정되면 자동으로 다시 변환된다.
JSP에서 Java 코드를 직접 삽입 할 수 있는 방법
1)선언문 (<%! %>)
JSP 페이지에서 클래스 변수 또는 메서드를 선언할 때 사용
Servlet 클래스 내부의 멤버 변수처럼 동작
// 고정 상수처럼 바뀌지 않는 값을 지정할때에 가끔 사용( 거의 안씀 )
예시)
<%!
int count = 0;
public int getCount() {
return count++;
}
%>
2) 스크립틀릿 (<% %>)
JSP 페이지에서 Java 코드를 실행할 때 사용
service() 메서드 내부에 포함됨
// 각 사용자들이 받는 데이터를 저장하거나 제어 할 때 사용( 주로 쓰는 방식 )
예시)
<%
String name = "Gunwoo";
int age = 25;
%>
<p>이름: <%= name %></p>
<p>나이: <%= age %></p>
3) 표현식 (<%= %>)
Java 코드의 결과 값을 출력하는 용도로 사용
예시)
<p>현재 카운트: <%= getCount() %></p>
JSP는 여러 개의 내장 객체(Implicit Objects)를 제공하여 웹 애플리케이션을 쉽게 개발할 수 있다.
| 내장 객체 | 설명 |
|---|---|
| request | 클라이언트의 요청 정보 (ex. 파라미터, 헤더 등) |
| response | 클라이언트에 응답 보낼 때 사용 |
| session | 사용자별 세션 데이터를 저장 |
| application | 웹 애플리케이션 전체에 공유되는 데이터 저장 |
| out | JSP 페이지 객체 출력 (HTML 출력) |
| pageContext | JSP 페이지 컨텍스트 정보 관리 |
| config | JSP 설정 정보 저장 |
| exception | 예외 처리 시 사용 (errorPage에서 활용) |
예시) request
<%
String username = request.getParameter("username");
%>
<p>환영합니다, <%= username %> 님!</p>
JSP에서 특정 설정을 지정하는 요소로, 주로 페이지 설정과 import에 사용
JSTL(JavaServer Pages Standard Tag Library)을 사용하기 위해 선언
// JSP에서 JSTL을 사용하기 위해서는 아래 선언을 해야 한다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
현재 JSP 페이지의 설정을 지정
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
코드 분석 )
language="java"
JSP에서 사용할 프로그래밍 언어를 지정
현재는 Java만 지원하므로 사실상 필요 없는 속성.
contentType="text/html; charset=UTF-8"
응답(response)의 콘텐츠 타입 설정.
text/html → HTML 문서임을 명시.
charset=UTF-8 → 클라이언트(브라우저)에서 UTF-8 인코딩으로 해석하도록 지정.
pageEncoding="UTF-8"
JSP 파일 자체의 인코딩 방식을 지정.
JSP 파일을 UTF-8로 저장 및 해석하도록 설정. (서버)
다른 JSP 파일을 포함할 때 사용, 다른 JSP 파일을 불러와 사용 할 수 있다.
예시)
<%@ include file="header.jsp" %>
Spring MVC에서 JSP를 View로 설정할 경우,
InternalResourceViewResolver를 설정해야 한다.
예시)
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
코드 분석)
1. InternalResourceViewResolver(bean class)
- Spring MVC에서 View를 색인하고 렌더링하는 역할을 하는 뷰 리졸버(View Resolver).
- 클라이언트가 요청한 URL을 기반으로 JSP 파일의 물리적 경로를 결정함.
- prefix와 suffix를 조합하여 최종 JSP 파일 경로를 만들어,
RequestDispatcher.forward() 방식으로 이동함.
RequestDispatcher.forward() 방식 :
서버 내부에서 페이지를 전환(포워딩)하는 방식으로,
클라이언트의 요청을 다른 JSP, 서블릿 또는 다른 리소스로 넘겨서 처리하는 방식2. prefix와 suffix 속성의 역할
- prefix : 뷰 파일(JSP)의 기본 경로를 설정하는 속성.
- suffix : 뷰 파일의 확장자를 설정하는 속성.