Servlet 표준을 기반으로 작성된 웹 어플리케이션 개발 언어
동적으로 웹 콘텐츠를 생성하는 데 사용되는 서버 측 기술로, HTML 내에 Java 코드를 작성하여 웹 페이지를 동적으로 생성할 수 있게 도움
지시자, 스크립트 요소, JSP 기본 객체, 표현 언어, action tag와 JSTL
| 태그 유형 | 설명 | 형식 |
|---|---|---|
| 스크립트릿 | Java 코드를 삽입하여 동적 콘텐츠 생성 | <% ... %> |
| 선언부 | 메서드와 변수를 정의 | <%! ... %> |
| 표현식 | 표현식을 평가하고 결과를 출력 | <%= ... %> |
| 주석 | JSP 페이지 설명 작성 | <%-- ... --%> |
| 지시자 | JSP 페이지의 설정(속성)을 정의하는 태그 | <%@ %> |
JSP 페이지 내에서 Java 코드를 삽입할 때 사용하는 요소
<% ... %>
<%
String message = "Hello, JSP!";
out.println(message);
%>
JSP 페이지에 메서드와 멤버변수를 정의할 수 있는 영역
<%! ... %>
<%!
public String greet() {
return "Welcome to JSP!";
}
%>
선언부 vs 스크립트릿
| 특성 | 선언부 (Declaration) | 스크립트릿 (Scriptlet) |
|---|---|---|
| 구문 | <%! ... %> | <% ... %> |
| 목적 | 변수를 선언하고 메서드를 정의 | 동적인 Java 코드를 실행 |
| 범위 | 전역 범위(JSP 전체에서 사용 가능), 메서드 안에 선언 | 로컬 범위(스크립트릿 내에서만 사용 가능), 클래스 안에 선언 |
| 실행 시점 | JSP 페이지 로드 시 초기화 | 요청 시마다 실행 |
<%!
// 선언부에서 메서드 선언
public String greet(String name) {
return "Hello, " + name + "!";
}
%>
<%
// 스크립트릿에서 메서드 호출
out.println(greet("John"));
%>
Java 객체의 속성을 출력할 때 사용
변수의 값, 계산식, 함수를 호출한 결과를 문자열 형태로 웹문서에 출력
<%= ... %>
<%= name() %>
out.print(name);
⇒ servlet 코드가 out.print(name)으로 바꿔서 출력해준다고 보면 됨
JSP 페이지 내에서 코드에 대한 설명 추가
HTML 주석문은 클라이언트에게 보여지지만, JSP 주석문은 보여지지 않음
<%-- ... --%>
<%-- This is a comment --%>
JSP로 바뀔 때 JSP주석은 아예 날라가서 읽혀짐
JSP 페이지의 속성을 설정하는 데 사용되며, 페이지의 전반적인 정보를 정의

1. Page Directive
| 속성 | 설명 | 예시 |
|---|---|---|
contentType | JSP 페이지의 콘텐츠 타입 설정 | <%@ page contentType="text/html; charset=UTF-8" %> |
language | 사용할 프로그래밍 언어 설정 (기본값 : Java) | <%@ page language="java" %> |
import | 사용할 Java 클래스나 패키지를 임포트 | <%@ page import="java.util.*, java.sql.*" %> |
session | 세션 사용 여부 설정 | <%@ page session="true" %> |
isErrorPage | 오류 페이지로 사용될 수 있도록 설정 | <%@ page isErrorPage="true" %> |
2. Include Directive
: 페이지가 로드될 때 다른 파일의 내용을 포함하므로 코드의 재사용성을 높임
| 속성 | 설명 | 예시 |
|---|---|---|
file | 포함할 파일의 경로 설정 | <%@ include file="header.jsp" %> |
3. Taglib Directive
: 코드의 가독성을 높이고 다양한 기능을 제공하여 JSP 페이지의 개발을 간편하게 만들어 줌
| 속성 | 설명 | 예시 |
|---|---|---|
uri | 태그 라이브러리의 URI 정의 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> |
2가지 방식
포워드(Forward)와 리다이렉트(Redirect)는 둘 다 웹 애플리케이션에서 페이지 간 이동을 처리하는 방법이지만, 동작 방식과 특징에 차이 존재
| 포워드(Forward) | 리다이렉트(Redirect) |
|---|---|
| 서버 내부에서 요청을 전달 | 클라이언트가 서버에 다시 요청 |
| URL이 변경되지 않음 | URL이 변경됨 |
| 하나의 요청/응답 사이클 | 두 번의 요청/응답 사이클 |
| 클라이언트는 페이지 이동을 인식하지 못함 | 클라이언트는 페이지 이동을 인식함 |
| 성능이 상대적으로 빠름 | 성능이 조금 더 느릴 수 있음 |
: 포워드는 서버 내부에서 페이지를 이동하는 방식
클라이언트는 다른 페이지로 이동한 사실을 알지 못하고, 서버가 내부적으로 요청을 다른 리소스(JSP, 서블릿 등)로 전달
RequestDispatcher dispatcher = request.getRequestDispatcher("nextPage.jsp");
dispatcher.forward(request, response);: 리다이렉트는 클라이언트가 서버에 새로운 요청을 하도록 하는 방식
서버는 클라이언트에게 다른 URL로 요청하라고 응답하며, 클라이언트는 그 URL로 다시 요청을 보냄
response.sendRedirect("nextPage.jsp");