JSP(Jakarta Server Pages)
✒️ 2025-06-21 23:00 내용 수정
JSP
HTML 내에 Java 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하고 웹 브라우저에 돌려주는 서버 사이드 스크립트 언어
- 참고 자료 : 위키백과 자카르타 서버 페이지, 푸실리's JSP_개념 정리
- 이전 명칭은 Java Server Pages
- Servlet과 유사하지만 HTML 표준으로 작성하며, Java 코드를 넣을 수 있다는 점에서 다르다.
- HTML 코드 중심 작업 덕에 수정이 용이하지만, 소스 보기로 소스가 공개되므로 중요 정보를 작성하기엔 부적합하다.
- JSP는 서버에서 실행 시 Servlet으로 변환되고 컴파일되어 실행된다.
- JSP가 하나의 Java 클래스이므로 모든 Java 라이브러리를 쉽게 가져와서 사용할 수 있다.
- 비슷한 언어로 PHP, ASP, ASP.NET 등이 있다.
- MVC Pattern에서 View 역할을 맡아 사용자에게 보여지는 화면을 표시하는 역할이다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Test</title>
</head>
<body>
<% String name = "Tester"; %>
<h1>JSP Test</h1>
<p>Hello, <%= name %>!</p>
</body>
</html>
동작
- 클라이언트에서 서비스를 request 하면 JSP가 실행된다.
- 웹 어플리케이션 서버의 Servlet Container(HttpJspBase)에서 JSP를 Servlet 코드로 변환(.java)한다.
- Servlet 코드는 컴파일(.class)된 후 실행되어 request에 대한 response를 HTML 형태로 클라이언트에게 돌려준다.

- 최초 요청 시에 JSP 파일을 Servlet으로 변환하는 과정을 거치며, 이후엔 이미 변환한 Servlet 파일을 재사용하여 요청에 응답으로 전송한다.
- JSP 파일의 생명 주기는 요청 접수 후 Servlet으로 변환하기 전까지다.
- JSP 파일을 수정하면 Container가 변환을 감지하여 자동으로 재변환을 수행한다.
JSP 프로젝트 구조
mywebapp/ ← 프로젝트 루트 (컨텍스트 경로)
├── index.html ← 웹앱 기본 페이지, 외부에서 직접 접근 가능
├── css/, js/, images/ ← 정적 리소스
├── WEB-INF/ ← 보안 폴더, 브라우저에서 직접 접근 불가능
│ ├── web.xml ← 서블릿/필터/리스너 설정
│ ├── classes/ ← 컴파일된 .class 파일
│ └── lib/ ← 외부 JAR 라이브러리 의존성
│ └── views/ ← JSP 화면 파일 (컨트롤러를 통해 포워드)
│ ├── error.jsp
│ └── editBook.jsp
└── META-INF/ ← 매니페스트 및 메타 정보 (WAR 패키징용
index.jsp를 브라우저에서 접근할 때의 URL은http://localhost:port/mywebapp/index.html형식으로 접근한다.mywebapp은 프로젝트 이름이다.
WEB-INF 디렉터리
- 프로젝트의 root 디렉터리 바로 하위에 위치하며 메타 정보를 가지고 있는 디렉터리다.
- WEB-INF 디렉터리 하위의 파일은 웹 브라우저에서 접근할 수 없다.
- 서버 내부에서만 접근할 수 있다.
web.xml: 웹 서버와 Servlet Container에 대한 정보를 저장한 파일이다.- Servlet, Filter, Listener, URL Mapping 등을 설정한다.
classes/: 컴파일된 Java 클래스를 저장한 디렉터리다.lib/: 외부 라이브러리 파일을 저장하는 디렉터리다.views/: JSP 파일을 저장하는 디렉터리로, Controller를 통해서만 접근할 JSP 파일은 이 위치에 저장한다.