JSP 페이지에서 많이 사용되는 논리적인 판단, 반복 처리, 포맷 처리를 위한 커스텀 태그를 표준으로 만들어서 정의한 것이다.
JSP는 HTML코드와 스크립트 코드가 섞이기 때문에 코드를 보는게 쉽지 않다. 그래서 HTML태그와 비슷한 코드를 사용해서 처리할 수 있도록 만든 것이다. 그래서 JSTL을 사용해 보기 좋고 이해하기 쉬운 코드를 작성하는 것이다.
EL의 정식 명칭은 표현 언어(Expression Language)라고 하며 줄여서 EL이라고 부른다.
EL은 값이 없는 변수(null)에 대해 좀 더 관대하고 데이터 형 변환을 자동으로 해주는 특징이 있다. EL을 사용하면 값이 없거나 형 변환 등에 전혀 신경 쓸 필요 없이 서버로 전송해서 형변환 없이 사용할 수 있다.
HTML코드 내에 java 코드인 스크립틀릿 <%= name %> 은
${name}
이런식으로 대체하여 사용한다.
객체명 | 설명 |
---|---|
${pageScope} | page Scope에 접근하기 위한 객체 |
${requestScope} | request Scope에 접근하기 위한 객체 |
${sessionScope} | session Scope에 접근하기 위한 객체 |
${applicationScope} | application Scope에 접근하기 위한 객체 |
${param} | 파라미터 값을 가져오기 위한 객체 |
${header} | 헤더 값을 가져오기 위한 객체 |
${cookie} | 쿠키 값을 가져오기 위한 객체 |
${initParam} | JSP 초기 파라미터를 가져오기 위한 객체 |
${pageContext} | pageContext 객체에 접근하기 위한 객체 |
연산부호 | 연산자 |
---|---|
+ | + |
* | * |
/ | div |
/&/& | and |
| | | or |
== | eq (equal) |
!= | ne (not equal) |
< | gt (greater) |
> | lt (little) |
<= | ge (greater or equal) |
>= | le (little or equal) |
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
2.jar를 WEB-INF/lib 디렉토리에 복사하여 사용할 수 있다.
JSTL이 제공하는 태그 중 제일 많이 쓰이는 것은 코어이다.
코어 태그를 사용하기 위해서는 JSP 페이지에 taglib 디렉티브를 추가해야 한다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
흐름 제어 태그에는 if, choose, forEach, forToken 4가지가 있다.
자바 언어의 if 블록과 비슷한 기능을 제공한다. 중첩된 if-else 블록과 같은 효과를 낼 순 없지만 단순한 if블록을 쉽게 대체할 수 있기 때문에 많이 사용한다.
<c:if test="조건">
...
</c:if>
<c:if test="${param.name == 'bk'}">
name 파라미터 값이 ${param.name} 입니다.<br>
</c:if>
<c:choose>
<c:when test="조건">
...
</c:when>
<c:when test="조건">
...
</c:when>
</c:choose>
else를 사용하려면 otherwise 사용
<c:choose>
<c:when test="${ url eq null }">
url이 없습니다.
</c:when>
<c:otherwise>
<a href="${ url }">url로 이동</a>
</c:otherwise>
</c:choose>
스크립틀릿의 for문의 역할을 한다.
<c:forEach var="i" begin="1" end="10" step="1">
<c:out value="${i}" />
<br>
</c:forEach>
List의 배열 요소를 순서대로 처리할 수 있습니다.
<c:forEach var="name" items="${nameList}">
<c:out value="${name}" />
</c:forEach>
EL 변수 값이나 EL변수의 프로퍼티 값을 지정할 때 사용한다.
1. EL 변수 생성
<c:set var="변수명" value="값" [scope="영역"] />
<c:set var="변수명" [scope="영역"]>값</c:set>
value에 고정된 값 넣기
<c:set var="name" value="홍길동" />
Expression 태그를 이용한 가변 값 넣기
<c:set var="name" value="<%= m.getFirstName() %>" scope="request" />
EL을 이용한 가변 값 넣기
<c:set var="name" value="${m.lastName} ${m.firstName}" />
JSP에서는 page,request, session, application 등의 네가지 객체 범위를 제공한다. 각 객체마다 적용되는 범위가 다르며 다른 범위 두 곳에서 같은 이름으로 변수가 저장 될 경우 원하지 않은 객체를 불러드릴 수도 있다. 작은 범위부터 page < request < session < application 순이며 만약 같은 이름의 변수가 page, request에 저장되어 있을 경우, 그 변수를 부르면 작은 범위에 있는 page에 저장되어 있는 변수가 불러진다. page 객체는 jsp에서만 존재하므로 jsp에서만 부를 수 있다.
한번에 클라이언트 요청이 오면 하나의 페이지가 응답한다. page 영역은 이때 하나의 페이지 내에서만 객체를 공유하는 영역을 의미한다. 예를 들어 jsp 페이지를 보면 해당 페이지에는 pageContext가 내장되어 있고 이 객체는 page 영역에서만 유효하다.
클라이언트로부터 요청이 들어와서 서버가 어떤일을 수행한 다음 응답을 보낼때까지 사용할 수 있는 범위이다.
Servlet에서 forward 또는 include를 사용하면 Request 요청 객체가 공유되어 Request 영역이 된다. JSP에서는 Request 내장변수를 사용하고, 화면에서 요청한 정보를 모두 Request에 담아 진행을 한다.
하나의 브라우저 당 1개의 session 객체가 생성된다. 즉 같은 브라우저 내에서 요청되는 페이지들은 같은 객체를 공유하게 되는 것을 세션 영역이라고 한다. 세션은 종료되면 객체는 반환이 된다. 보통 웹프로그램에서는 로그인 시에 세션을 생성하고 로그아웃 시에 세션을 삭제한다. 보통 세션은 몇 가지 간략한 정보만 세션에 담는다. 이유는 세션에 너무 많은 정보를 담으면 서버에 부하가 발생되기 때문이다. 처리할 정보들은 Request에 담아 처리한다.
웹 어플리케이션이 시작되고 종료 될때까지 변수를 사용할 수 있다. 웹 어플리케이션 하나당 하나의 application 객체가 사용된다. 모든 클라이언트가 공통으로 사용해야 할 값들이 있을 때 사용한다.