Java Server Pages의 약자로, HTML 소스코드 안에 자바 소스코드를 삽입하여 웹 페이지를 동적으로 생성할 수 있게 하는 기술이다.
HTML, CSS, JS, JSON, XML, 일반 텍스트 등이 여기에 해당한다.
템플릿 데이터는 클라이언트로 그대로 출력된다.
스트립트릿(Scriptlet)
<% 코드 %>
태그 안에 실행될 자바 코드를 입력하면 된다.
스크립트릿 태그 안에 작성한 코드는 서블릿 파일을 만들 때 그대로 복사된다.
선언문
<%! 코드 %>
변수, 메서드 등을 선언할 때 사용한다.
여기에서 선언된 변수와 메서드는 서블릿 클래스의 멤버가 된다.
표현식
<%= 코드 %>
문자열을 출력할 때 사용한다.
따라서 표현식 태그 안에는 결과를 반환하는 자바 코드가 와야 한다.
지시어
<%@ page … %><%@ include %><%@ taglib … %>JSP에서 기본으로 제공하는 태그들의 집합니다.
| 액션 | 설명 |
|---|---|
| <jsp:useBean> | 자바 인스턴스를 준비한다. 보관소에서 자바 인스턴스를 꺼내거나 자바 인스턴스를 새로 만들어 보관소에 저장하는 코드를 생성한다. 자바 인스턴스를 자바 빈(Java Bean)이라고 부른다. |
| <jsp:setProperty> | 자바 빈의 프로퍼티 값을 설정한다.자바 객체의 settet()를 호출하는 코드를 생성한다. |
| <jsp:getProperty> | 자바 빈의 프로퍼티 값을 꺼낸다.자바 객체의 getter()를 호출하는 코두를 생성한다. |
| <jsp:include> | 정적(HTML, 텍스트 파일 등) 또는 동적(서블릿/JSP) 자원을 including하는 자바 코드를 생성한다. |
| <jsp:forward> | 현재 페이지의 실행을 멈추고 다른 정적, 동적 자원으로 forwarding하는 자바 코드를 생성한다. |
| <jsp:param> | jsp:include, jsp:forard, jsp:params의 자식 태그로 사용한다.ServletRequest 객체에 매개변수를 추가하는 코드를 생성한다. |
| <jsp:plugin> | OBJECT 또는 EMBED HTML 태그를 생성한다. |
| <jsp:element> | 임의의 XML 태그나 HTML 태그를 생성한다. |
JSP에서 자바 코드를 작성할 때 별도의 선언 없이 사용할 수 있는 자바 객체이다.
종류: request, response, pageContext, session, application, config, out, page, exception
JSP 2.0에 추가된 개념으로 내장 객체를 보다 간결한 표현으로 접근할 수 있다.
null에 대해 좀 더 관대하고 데이터 형 변환을 자동으로 해준다는 특징이 있다.
사용법: ${변수}
아래의 두 가지 방법은 동일한 결과를 보인다.
// JSP Expression
<%=request.getParameter("name") %>
<%=request.getParameter("address") %>
// EL
${param.name}
${param.address}
EL 연산자
EL 표기법
${}: JSP가 실행될 때 즉시 반영됨. 객체 프로퍼티 값을 꺼낼 때 주로 사용#{}: 시스템에서 필요하다고 판단될 때 그 값을 사용함. 사용자 입력값을 객체의 프로퍼티에 담는 용도로 주로 사용EL 예약 키워드
and, or, not, eq, ne, lt, gt, le, ge, true, false, null, instanceof, empty, div, mod
⚠️ 서블릿 보관소에 객체를 저장할 때 key가 EL 예약 키워드이면 에러가 발생한다.
EL에서 접근 가능한 내장 객체
pageScope → pageContext의 속성requestScope → request 객체의 속성sessionScope → session 객체의 속성applicationScope → application 객체의 속성param → request.getParameter() 호출paramValues → request.getParameterValues()header → request.getHeader()cookie → request.getCookies()JSTL은 JSP Standard Tag Library의 약자이다.
JSP에서 반복, 조건, 데이터 관리 포맷, XML 조작, 데이터베이스 엑세스 등의 기능을 구현할 수 있도록 해준다.
JSTL을 사용하기 위해서는 라이브러리를 별도로 다운받아 세팅해야 한다. (참고) ⇒ 링크달기!
먼저 위에서 설명한 taglib 태그를 사용하여 다음과 같은 형식으로 선언한다.
<%@ taglib prefix="접두사" uri="URI" %>
태그 라이브러리 별 선언문
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>prefix를 반드시 이렇게 지정해야 하는 건 아니지만 JSTL에서 제안하는 표준 접두사이므로 동일하게 사용하는 것이 좋다.
JSTL 주요 문법은 여기를 참고!

JSP로 작성된 파일은 웹 서버에서 실행되고, 그 결과를 HTML로 변환하여 클라이언트로 전송된다.
즉, 웹 서버가 클라이언트로부터의 요청 내용을 분석하고 서블릿 컨테이너에 전달하면 컨테이너가 HTML 문서를 반환하는 과정이라고 볼 수 있다.
JSP의 동작 원리에 대해 제대로 알기 위해서는 Servlet이라는 개념에 대해 알아야 한다.
간단하게 말하면, 클라이언트의 요청을 처리하고 그 결과를 반환하는 프로그래밍 기술이다.
웹 요청이 오면 서블릿 컨테이너가 JSP 페이지를 파싱하여 자바 파일로 변환하는데, 이것이 서블릿 객체가 된다.
서블릿 객체는 Servlet 클래스의 구현 규칙을 지켜 생성되고, 해당 서블릿에서 service() 메서드를 호출하여 비즈니스 로직을 수행하게 된다.
서블릿을 관리하고 실행시켜주는 프로그램이다. 대표적인 예시로는 Apache Tomcat을 들 수 있다. 개발자가 비즈니스 로직 작업에만 전념할 수 있도록 요청이 올 때마다 웹 서버에서 반복적으로 수행해야 하는 작업을 대신 수행하는 역할을 한다.
반복적인 작업 예시:
public class MyServlet extends HttpServlet {
@Override
public void init() {
...
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
...
}
@Override
public void destroy() {
...
}
}