템플릿 데이터, JSP 전용 태그, 내장 객체
- 템플릿 데이터 : 클라이언트로 출력되는 콘텐츠
Ex) HTML, Javascript, stylesheet, JSON, XML, 일반 텍스트 - JSP 전용 태그 : 서블릿 생성 시 특정 자바 코드로 바뀌는 태그
- Directives : <%@ %>
- Scriptlet Elements : <% %>
- Declartions : <%! %>
- Expressions : <%= %>
- JSP Action : <jsp:...>
- JSP 내장 객체 : JSP 기술 사양서에 정의된 필수적인 9개 객체, 별도 선언 없이 사용 가능
Ex) request, response, pageContext, session, application, config, out, page, exception
템플릿 데이터
- 클라이언트로 출력되는 콘텐츠
- 서블릿 코드를 생성할 때 출력문(톰캣의 경우 out.println)으로 변경
- jsp로부터 생성된 자바 서블릿 파일의 소스
JSP 전용 태그
Directives(지시자)
- JSP 지시자는 지시자, 속성에 따라 자바 코드를 생성
- JSP 지시자에는 page, taglib, include가 존재
<%@ 지시자 속성="값" 속성="값" ... %>
page
- JSP 페이지와 관련된 속성을 정의할 때 사용하는 태그
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
속성 | 설명 |
language | - 스크립틀릿, 표현식, 선언부를 작성할때 사용할 프로그래밍 언어를 지정 - 즉, JSP 페이지에 삽입되는 코드의 스크립팅 언어를 지정 - JSP 2.2에서는 'java'만 허용 (모두 소문자로 작성) - language 속성을 생략하면 기본값은 'java' |
contentType | - 출력할 데이터의 MIME 타입과 문자 집합을 지정 - MIME 타입이 'text/html'이면 출력할 데이터가 HTML이라는 의미 - 문자 집합이 'charset=UTF-8'이면 출력할 데이터를 UTF-8로 인코딩 - 문자 집합을 생략하면 기본값 'ISO-8859-1'을 사용 - 자바는 문자열을 다룰때 유니코드(UTF-16 BE)를 사용하는데 클라이언트로 문자열을 출력할때 유니코드를 contentType 혹은 pageEncoding에 설정된 문자 집합으로 인코딩하여 출력 |
pageEncoding | - 출력할 데이터의 문자 집합을 지정 (기본값 : ISO-8859-1) - contentType 설정값보다 우선시 됨 - 이 속성을 생략하면 contentType에 설정된 값을 사용 |
- page 지시자의 자바 코드
- contentType과 pageEncoding 속성에 지정된 값으로 setContentType() 호출 코드 생성
- language 속성은 JSP 엔진에 정보를 제공하는 역할이며 따로 코드를 생성하진 않음
taglib
- 태그 라이브러리를 선언 할 때 사용
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
속성 | 설명 |
uri | 사용할 태그 라이브러리 네임스페이스 식별자(URI) |
prefix | 태그 접두사 |
- JSTL Core
- JSP 표준 태그 라이브러리의 핵심 기능 제공
- 조건문, 반복문, URL 조작 등 일반적인 로직 처리를 쉽게 할 수 있게 해줌
기능 | 사용 예 |
URI | http://java.sun.com/jsp/jstl/core |
조건문 | <c:if> |
다중 조건문 | <c:choose> |
반복문 | <c:forEach> |
변수 설정 | <c:set> |
출력 | <c:out> |
- JSTL Fomatting
- 날짜, 시간, 숫자 등의 형식과 지역화 기능을 제공
기능 | 사용 예 |
URI | http://java.sun.com/jsp/jstl/fmt |
숫자 형식 지정 | <fmt:formatNumber> |
날짜 형식 지정 | <fmt:formatDate> |
다국어 번들 사용 | <fmt:bundle> |
메세지 출력 | <fmt:message> |
- JSTL SQL
- SQL 관련 작업을 JSP에서 수행할 수 있도록 도움
- DB Query 실행 또는 결과 처리하는 데 사용
※ 보안 문제로 인해 실무에서 권장되지 않으며 주로 학습 목적
- JSTL XML
- XML 데이터 처리 및 XPath를 활용한 데이터 접근을 지원
- XML 데이터를 파싱하고 원하는 데이터를 쉽게 추출 가능
기능 | 사용 예 |
URI | http://java.sun.com/jsp/jstl/xml |
XML 데이터 파싱 | <x:parse> |
XML 데이터 출력 | <x:out> |
XML 데이터 반복 처리 | <x:forEach> |
- Custom Tag Library
- URI : 사용자 정의
Ex) http://example.com/custom - 개발자가 특정 기능을 재사용하기 위해 만든 태그 라이브러리
- taglib URI는 보통 WEB-INF/tld 디렉토리에 위치한 TLD 파일에 정의
- URI : 사용자 정의
include
- 특정 JSP 파일 또는 HTML 파일을 다른 JSP 파일에 컴파일 시점에 포함시키는 기능을 제공
- 정적인 내용을 포함시키는 데 적합하며, 페이지가 컴파일될 때 포함된 파일의 내용이 현재 JSP에 통합
<%@ include file="filePath" %>
- file : 포함할 파일의 경로 지정
- 상대 경로나 절대 경로를 사용 가능
- 파일의 확장자는 .jsp, .html, .txt 등이 될 수 있음
<!-- header.jsp -->
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header>
<h1>Welcome to My Website</h1>
</header>
<!-- footer.jsp -->
<footer>
<p>© 2024 My Website</p>
</footer>
</body>
</html>
<!-- main.jsp -->
<%@ include file="header.jsp" %>
<section>
<h2>About Us</h2>
<p>This is the main content of the page.</p>
</section>
<%@ include file="footer.jsp" %>
Scriptlet Elements(스크립트릿)
- JSP에 자바 코드를 작성할 때 스크립트릿 태그 <% %> 안에 작성
- 스크립트릿 태그 안에 작성한 코드는 서블릿 파일을 만들 때 그대로 복사
→ JSP에서 생성된 자바 서블릿 소스에서 _jspService() 안에 그대로 복사
<% 자바 코드 %>
- JSP 스크립트 코드 예시
- 생성된 Java 코드
Declarations (선언문)
- 서블릿 클래스의 멤버(변수, 메소드)를 선언할 때 사용
- JSP에서 작성 위치는 상관 없음
→ 선언문은 _jspService() 메소드 안에 복사되는 것이 아니라 _jspService() 밖의 클래스 블록 안에 복사되기 때문
<%! %>
- JSP 선언문 예시
- 자바 서블릿 코드의 출력문으로 변환된 선언문의 예
Expressions(표현식)
- 문자열을 출력할 때 사용
- 따라서 표현식 <%= %> 안에는 결과를 반환하는 자바 코드가 와야 함
- 표현식은 출력문으로 만들어지며 스크립트릿과 같이 _jspService() 안에 순서대로 복사
<%= %>
- JSP 표현식의 예
- 자바 서블릿 코드의 출력문으로 변환된 표현식의 예
- JSP 표현식 안의 자바 코드가 out.print() 출력문의 인자값으로 복사
- 따라서 JSP 표현식 안에는 out.println()의 안자값으로 넣을 수 있는 결과를 반환하는 자바 코드가 와야 함
JSP Action
- JSP에서 기본으로 제공하는 태그들의 집합
- JSP 2.2에서 제공하는 Standard Action들
액션 | 설명 |
<jsp:useBean> | - 자바 인스턴스를 준비 - 보관소에서 자바 인스턴스를 꺼내거나 자바 인스턴스를 새로 만들어 보관소에 저장하는 코드를 생성 - 자바 인스턴스를 자바 빈(Java Bean)이라고 부름 |
<jsp:setProperty> | - 자바 빈의 프로퍼티 값을 설정 - 자바 객체의 setter()를 호출하는 코드를 생성 |
<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 내장 객체
- JSP에서 자바 코드를 작성 할 때 별도의 선언 없이 사용할 수 있는 자바 객체
Ex) JSP에서 선언 없이 사용할 수 있는 request 객체가 이에 해당 - JSP로부터 생성된 자바 서블릿 소스의 _jspService()를 보면 해당 객체들의 변수가 선언되어 있는 것을 확인 가능
- _jspService()는 javax.servlet.jsp.HttpJspPage 인터페이스에 선언된 메소드
- JSP 기술 사양서에는 JSP로 서블릿을 만들 때 반드시 이 인터페이스를 구현하도록 정의
- JSP 작성 시 선언 없이 즉시 사용할 수 있는 9개 객체 request, response, pageContext, session, application, config, out, page, exception 를 정의 (exception은 JSP가 예외 처리 페이지로 선언된 경우에만 존재)
- JSP 페이지 내장 객체 사용
- 자바 서블릿 소스에 선언된 내장 객체
Directives의 include와 JSP 액션 태그의 include 차이
특성 | include directive ( <%@ include %> ) | jsp:include ( <jsp:include /> |
타입 | 정적 포함 (컴파일 시 포함) | 동적 포함 (실행 시 포함) |
파일 변경 반영 | 서버를 재시작 해야 반영 | 즉시 반영 |
사용 예 | 헤더, 푸터, CSS 등 정적인 파일 | 동적으로 생성된 콘텐츠 |
참고 자료
'Language > Java' 카테고리의 다른 글
[GC] 가비지 컬렉터의 개념, 원리, 알고리즘 (1) | 2024.11.13 |
---|---|
[Java] Java의 컴파일 과정 (1) | 2024.11.13 |
[JVM] JVM의 개념과 필요한 이유 (0) | 2024.11.13 |
[OOP] 객체지향 프로그래밍의 개념과 특징 (2) | 2024.11.11 |
Call by Value와 Call by Reference의 차이 (0) | 2024.09.10 |