- Java 기반의 서버 사이드 스크립트 언어. HTML 내에 Java 코드를 삽입하여 동적 웹 페이지를 생성할 수 있는 기술
- Servlet으로 UI를 처리하는 데 어려움이 있어, HTML과 Java를 혼합해서 효율적으로 화면을 구성하기 위해 등장
- 웹 서버(Tomcat 등)에서 실행되며, 최종적으로는 Servlet으로 변환되어 동작
-
특징
- 클라이언트(브라우저)에 보여지는 동적 웹 콘텐츠 생성
- Servlet보다 코드 가독성이 높고 유지보수에 유리
- 표현 논리(View)는 JSP, 비즈니스 로직은 Servlet/Java Class로 분리 권장
JSP 5가지 기본 스크립팅 태그
| 태그 종류 | 문법 | 역할 및 설명 |
|---|
| 선언자(declaration) | <%! ... %> | 멤버 변수 및 메소드 선언 (서블릿 클래스의 멤버 필드로 변환됨) |
| 표현식(expression) | <%= ... %> | 출력용 태그로 out.print()로 변환되어 HTML에 출력됨 |
| 스크립틀릿(scriptlet) | <% ... %> | Java 코드 실행 블록, 제어문이나 로직 처리에 사용 |
| 지시자(directive) | <%@ ... %> | JSP 파일의 설정 정보를 정의, 예: 인코딩, import 등 |
| 주석(comment) | <%-- ... --%> | JSP 주석, 서버에서 무시되며 클라이언트에 노출되지 않음 (HTML 주석과는 다름) |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%-- 선언자: 멤버 변수 및 메소드 정의 --%>
<%!
String name = "fisa";
public String getName() {
return name;
}
%>
<!DOCTYPE html>
<html>
<body>
1. 표현식 출력: <%= name %> <br>
2. 메소드 호출 출력: <%= getName() %> <br>
3. 스크립틀릿 코드 실행:
<%
out.println("Hello, " + name);
%>
</body>
</html>
JSP 내장 객체 (Implicit Objects)
JSP에서 별도 선언 없이 사용할 수 있는 9개의 내장 객체가 존재
| 객체명 | 설명 |
|---|
request | 클라이언트 요청 관련 정보 (파라미터, 헤더 등) |
response | 응답 관련 설정 (헤더, 인코딩 등) |
out | 출력 스트림 (JSP에서 HTML 출력할 때 사용) |
session | 사용자 세션 관리 객체 |
application | 웹 어플리케이션 전역 컨텍스트 |
config | JSP 설정 정보 |
pageContext | JSP 페이지 컨텍스트. 다른 내장 객체에 접근 가능 |
page | 현재 JSP 페이지 객체 (this와 유사) |
exception | 에러 페이지에서 예외 정보를 다룰 때 사용 (isErrorPage="true"인 경우만 사용 가능) |
MVC 패턴에서 JSP의 역할
MVC 구조 요약
| 구성요소 | 역할 | 사용 기술 예시 |
|---|
| Model | 비즈니스 로직, DB 처리 | Java Class, DAO, DTO |
| View | 사용자에게 보여지는 화면 | JSP (+ JSTL + EL) |
| Controller | 요청 처리, 흐름 제어 | Servlet, Spring Controller |
JSP의 역할
- View만 담당
- Java 로직을 최소화하고, JSTL + EL로 데이터 표현에 집중
JSTL (JSP Standard Tag Library)
- JSP에서 반복문, 조건문 등을 태그로 처리할 수 있게 해주는 표준 태그 라이브러리
- EL과 함께 사용하는 것이 일반적
주요 태그
| 태그 | 예시 | 설명 |
|---|
c:out | <c:out value="${name}" /> | EL 값 출력 (<%= %> 대체) |
c:if | <c:if test="${score > 80}">합격</c:if> | 조건문 |
c:choose | <c:choose> <c:when> ... <c:otherwise> ... </c:choose> | 다중 조건 분기 |
c:forEach | <c:forEach var="item" items="${list}"> | 반복문 |
c:set | <c:set var="name" value="홍길동" /> | 변수 설정 |
JSTL 사용을 위한 선언
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
EL (Expression Language)
- JSP에서 Java 코드를 최소화하고 데이터를 출력할 수 있는 표현 언어
${} 문법으로 request, session, application 범위의 데이터를 조회 가능
- 연산, 조건, 배열 접근, 객체 속성 접근 등도 가능
주요 기능
| 기능 | 예시 | 설명 |
|---|
| 출력 | ${name} | name 값을 출력 |
| 배열 접근 | ${arr[0]} | 인덱스로 배열 접근 |
| 객체 접근 | ${user.name} | getter를 통해 속성 출력 |
| 연산 | ${10 + 5} | 산술 연산 가능 |
| 비교/논리연산 | ${score > 60} | 조건문에서 사용 가능 |
| 범위 지정 | ${requestScope.name} | 명시적으로 범위 지정 가능 |
- 장점
<%= %> 대신 사용할 수 있어 가독성이 향상
- Java 코드를 제거하여 유지보수가 쉬움
JSP + EL + JSTL 실사용 예제
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
// 데이터 셋팅
request.setAttribute("name", "유진");
request.setAttribute("scores", new int[]{85, 92, 78});
%>
<!DOCTYPE html>
<html>
<head><title>JSP + EL + JSTL 예제</title></head>
<body>
<h3>EL 출력</h3>
<p>이름: ${name}</p>
<h3>JSTL 반복문</h3>
<ul>
<c:forEach var="score" items="${scores}">
<li>점수: ${score}</li>
</c:forEach>
</ul>
<h3>JSTL 조건문</h3>
<c:if test="${scores[0] >= 90}">
<p>첫 번째 점수는 우수입니다!</p>
</c:if>
</body>
</html>
총정리표
| 항목 | 설명 |
|---|
| JSP | HTML과 Java를 함께 사용하여 동적 웹페이지를 생성하는 기술 |
| 스크립팅 태그 | <%! %>: 선언자
<%= %>: 출력
<% %>: 자바 코드 실행
<%@ %>: 지시자
<%-- --%>: 주석 |
| JSP 내장 객체 | request, response, out, session 등 9가지 별도 선언 없이 JSP 페이지에서 사용 가능 |
| JSTL | 조건문, 반복문 등을 태그로 구현할 수 있는 JSP 표준 태그 라이브러리 |
| EL (Expression Language) | ${} 문법으로 request, session 등의 데이터를 출력 자바 코드 없이 간결하게 표현 |
| 추천 개발 방식 | 자바 로직 최소화 + EL + JSTL 사용 권장 View는 JSP, 로직은 Servlet/Controller로 분리 |