
스크립트 요소(scripting elements)
동적인 컨텐츠를 만들기 위해 프로그램 작성에 사용되는 요소
- 스크립트릿(Scriptlet,
<% ... %>) : Java 코드 작성
- 표현식(Expression,
<%= ... %>) : 변수나 수식의 결과 표현(String 형식)
- 선언(Declaration,
<%! ... %>) : 멤버변수와 메소드의 선언
지시어(directives)
<%@ 지시어이름 속성="값" ... %>
페이지 번역이나 실행 과정에 사용되는 JSP 페이지의 설정 정보를 웹 컨테이너에게 지시
- page
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
페이지에 대한 정보를 지정
- include
<%@ include file="/layout/header.jsp" %>
정적 include, 특정 영역에 공통으로 사용할 태그나 변수, 메소드 등을 포함시킬 때 사용
- taglib
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
사용할 태그 라이브러리 선언, 태그 라이브러리의 위치와 접두어를 지정
<jsp:액션이름 속성="값"> … </jsp:액션이름>
요청을 처리할 때 특별한 기능을 수행
- <jsp:include>
동적 include, 페이지의 실행결과를 포함
- <jsp:forward>
원래 페이지에서 사용했던 reuqest, response 기본 객체가 이동 페이지로 넘어감
- 원래 페이지의 실행은 포워딩되며 종료되고 버퍼의 내용은 지워짐
- 원래 페이지를 대신하여 다른 페이지를 실행, 이동 전/후 두 페이지는 같은 request 영역에 존대
- 웹 브라우저 주소는 원래 페이지의 URL을 표시하므로 클라이언트는 강제 이동을 알 수 없음
- <jsp:param>
include, forward를 수행할 때 기존 파라미터보다 해당 태그에서 정의된 파라미터가 우선됨
- request.setCharacterEncoding("UTF-8")를 통해 인코딩 설정 가능
- 전달 데이터는 String으로 제한되므로, 다른 종류의 데이터를 전달시에는 request 내장 객체에 속성을 저장 후 전달하면 됨.
내장 객체(implicit objects)
JSP 컨테이너가 번역 과정에서 만들어서 제공하는 객체
- Request (javax.servlet.ServletRequest, javax.servlet.http.HttpServletRequest)
클라이언트의 HTTP 요청정보를 저장하고 있는 객체
- Response (javax.servlet.ServletResponse, javax.servlet.http.HttpServletResponse)
HTTP 요청에 대한 응답정보를 저장하고 있는 객체
- Session (javax.servlet.http.HttpSession)
클라이언트에 서버에 접속했을 때 세션정보를 저장한 객체
- PageContext (javax.servlet.jsp.PageContext)
page 표현과 영역을 관리, 페이지에서 사용되는 객체들의 레퍼런스 저장
다른 내장 객체의 참조 값을 리턴하는 메소드 제공
- Application (javax.servlet.ServletContext)
web.xml에 저장된 설정 정보의 조회, 웹 컨테이너의 정보 조회, 로그 메시지의 기록, 폴더 정보 조회
특정 웹 애플리케이션에 포함된 모든 JSP페이지 → 하나의 application 객체 공유
- Out (javax.servlet.jsp.JspWriter)
클라이언트로 보낼 컨텐츠를 출력할 때 사용되는 출력 스트림
- Config (javax.servlet.ServletConfig)
JSP 페이지에 대한 설정 정보 관리
- Page (java.lang.Object)
특정 페이지의 서블릿 설정 정보를 저장하고 있는 객체
- Exception (java.lang.Throwable)
예외 처리를 위한 객체
표현 언어(EL; expression language)
데이터를 쉽게 다루기 위한 간결한 수식 언어로 표현식 <%= … %>을 대신 할 수 있음
⇨${수식}, ${객체}, ${객체.속성}, ${객체["속성"]}, ${객체['속성']}, ${배열[첨자]}
- 자바빈이나 영역의 속성에서 저장된 데이터를 쉽게 표현 가능
- 스크립트 요소 밖에서 사용되며, 데이터 출력 및 태그 속성 값 지정시 사용
- 영역 내장 객체에 저장된 속성, 자바빈 객체를 쉽게 다룰 수 있음
- 리턴 타입 : String
내장객체
- pageScope, requestScope, sessionScope, applicationScope
- 각 영역별 생명주기에 사용되는 저장소
- 객체를 검색할 때 나열된 순서대로 객체를 검색
- 만약, 특정 영역에 있는 객체를 바로 찾고자 할 때에는 ${영역이름.객체}로 접근
- param, paramValues : 파라미터 값
- header, headerValues : 헤더 정보
- cookie : 쿠키 정보
- initParam : 컨텍스트의 초기화 파라미터 값
- pageContext : 페이지 범위의 컨텍스트 저장소
연산자
not(!), empty, and(&&), or(||), mod(%), div(/),
lt(<), gt(>), le(<=), ge(>=), eq(==), ne(!=)
다양한 언어 조건에서 사용하기 위해 기존에 쓰는 연산 기호를 키워드 형태로 사용할 수 있음
사용자 정의 태그
사용자가 정의하는 태그로 자신만의 태그 라이브러리 개발 가능
⇨ 태그 핸들러 클래스, TLD 파일 필요
형식
액션 태그와 커스텀 태그는 모두 XML 태그
<prefix:tagName 속성="값" … />
<prefix:tagName 속성="값"> 내용 </prefix:tagName>
JSTL(JSP Standard Tag Library)
유용한 사용자 정의 태그들을 모아 표준화한 태그들의 집합
사용방법
- 톰캣설치폴더에 위치한 JSTL 태그 라이브러리를 복사하여 프로젝트 경로 내에 저장
- [톰캣설치폴더]\webappas\examples\WEB-INF\lib\
- taglibs-standard-impl-{버전}.jar
- taglibs-standard-spec-{버전}.jar
- [프로젝트 경로]\src\main\webapp\WEB-INF\lib\
- JSTL을 사용하는 페이지 상단에 추가
<%@ taglib prefix="접두어" uri="주소" %>
종류
- 코어(c) : 변수, 흐름제어, URL처리
- 선언 : taglib 지시어를 이용 →
<%@ taglib prefix="c" uri="주소" />
- 사용 :
<c:태그 … scope="영역"> ... </c:태그>
- 태그 : set, remove, if, choose, forEache, forTokens, import, redirect, url, catch, out
- XML(x) : XML 관련 처리
- 국제화(fmt) : 메시지 형식, 숫자 및 날짜 형식
- 데이터베이스(sql) : SQL
- 함수(fn) : 컬렉션 처리, String 처리
TLD(Tag Library Descriptor)
- 경로 : WEB-INF/{파일명}.tld
- 형식 : XML
컴파일러는 /에서 /까지 모든 것을 무시합니다.
컴파일러가 컴파일 하지 않는 부분으로 프로그램 동작에 영향을 미치지 않는 코드
| 이름 |
형태 |
설명 |
| Single Line Comment |
// text |
//을 시작하는 그 라인의 끝까지 주석 처리 된다. |
| Multi Line Comment |
/* text */ |
/* 에서 */까지의 모든 내용이 주석 처리 된다. |
| Documentation Comment |
/** documentation */ |
/**에서 */ 까지의 모든 내용이 주석처리 된다. |