본문 바로가기

04번. IT 힌트얻기/▶ 자바

JSP에서 JSTL과 EL사용하기


목표 : JSTL과 EL을 사용함으로써 <% %>와 같은 스크립팅을 없앨 수 있다.
         JSP페이지 상에 자바 소스는 이제 안녕~

Expression Language는 JSP에서 기본으로 지원한다.
세팅을 해야 하는 것은 JSTL(JavaServer Pages Standard Tag Library)이다.

1. 다운로드

http://www.apache.org - Jakarta - Taglibs - Standard - JSTL 1.1 다운로드 (jakarta-taglibs-standard-1.1.2.zip)

JSTL 매뉴얼 : http://pds17.egloos.com/pds/201002/12/66/JSTL-Reference-11.pdf 


2. 설치

다운로드 받은 파일에 압축을 풀고 lib 폴더의 jstl.jar와 standard.jar 파일을 /WEB-INF/lib 에 복사 후 JSP 파일 상단에 다음의 지시문을 추가한다.
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
( core 태그 lib만 추가하였고 그외 fmt, sql, x 태그를 사용하기 위해선 지시문을 추가해야 한다. ) 

tip> 이클립스에서 JSP 생성시 자동으로 소스 추가하는 방법
window - Preferences - Web - JSP Files - Templates - JSP HTML에 내용 추가 

 
3. Expression Language

EL이란 JSP에서 저장객체를 출력할때 스크립팅을 전혀 쓰지 않을 수 있는 기술이다.
이것으로 인해 <%=request.getParameter("name")%> 와 같은 스크립팅 들을 쓸 필요가 없어진다. 

(1) 저장객체 접근

${param.name} => request.getParameter("name");

${member} => request.getAttribute("member");
 
저장객체의 attribute에 자동으로 접근하는데 자동검색순위는 page, request, session, application순이다.

${member.name}  => Member m = (Member)request.getAttribute("member");
                               m.getName(); 

attribute 저장된 member의 name속성(또는 키)에 접근
도트(.)의 왼쪽은 Beans 이거나 Map 타입이어야 함

${list["0"]} => List list = (List)request.getAttribute("list"); 
                          list.get(0);
attribute 저장된 list를 가져온다
[]안의 값은 list의 키값 또는 프로퍼티명 또는 인덱스이다.
[]의 왼쪽은 Map, Beans, 배열, List 타입이 올 수 있다.

여기서 알아야 할 점이 하나 있는데 EL에서는 해당 값이 null이거나 공백일 경우에는 아무 내용도 표시하지 않고에러도 발생하지 않는다. 

 
(2) 연산자
EL은 연산자들을 사용할 수 있다. 예제는 JSTL에서 같이 사용하는 걸 보자.

1) 산술연산자 : + - * / (div) % (mod)
2) 논리연산자 : &&(and) ||(or) !(not)
3) 관계연산자 : ==(eq) !=(ne) <(it) >(gt) <=(le) >=(ge) 
4) 삼항연산자 : ?:
ex) ${colors==null ? "transparent" : colors}
5) 그외 예약어 : true, false, null, instanceof, empty(null이거나 공백일때)


4. JSTL

core 태그 중에서 유용한 것만 살펴보자.
모든 내용을 보고싶다면 JSTL 매뉴얼 참조, 태그에 진하게 표시된 속성은 필수 항목임..

(1) <c:out>
▷ 단순히 내용을 출력하는 기능이다.

<c:out value="${member.name}" default="홍길동"/>

 위와 같이 쓸 경우 일반적으로 ${member.name}을 쓴것과 같지만 ${member.name}이 null일 경우 default에 있는 값으로 대체한다.

(2) <c:set>
▷ 저장객체의 setAttribute 기능을 한다.

<c:set var="addr" value="myaddr" scope="session"/>
<c:set var="no" value=${member.age+1}"/> 

 첫번째는 session에 addr이란 이름으로 myaddr 스트링을 저장한 것이다. 
 두번째는 no이란 이름으로 member.age+1으로 산술연산된 값을 저장하는데 scope가 생략되면 기본으로 page에 저장된다. 

(3) <c:remove>
▷ removeAttribute의 기능을 한다. 

<c:remove var="no" scope="page"/> 

 지정된 scope의 no란 이름이 attribute를 remove한다.
 scope를 생략할 경우 모든 범위의 attribute가 지워진다. 

(4)  <c:if>
▷ if 조건문을 사용한다. 단 else if와 else는 지원하진 않고 유사한 <c:choose>가 존재한다.

<c:if test="${member.age<20}" var="result" scope="page">

    당신은 미성년자입니다.
</c:if>
<c:if test="${!empty list}">
    content
</c:if> 

 test에서 조건을 검사하고 true일 경우에만 <c:if>태그안의 내용이 보여진다. 여기서 EL의 연산자들을 쓸 수 있다.
 var는 조건을 검사하고 리턴되는 boolean값을 저장하는 attribute이름이고 scope는 var가 저장되는 범위이다.scope가 없을시 기본값을 page이다. 

(5) <c:choose> 
▷ if, else if, else와 유사하다

<c:choose>
<c:when test="${vo.type==1}">

    <img src="<%=cp%>/images/antenna/type1.jsp"/>

</c:when> 
<c:when test="${vo.type==2}">
    <img src="<%=cp%>/images/antenna/type2.jsp"/>
</c:when>
<c:when test ="${vo.type==2 or vo.type==3}">
    <img src="<%=cp%>/images/antenna/typement.jsp"/>
</c:when>
<c:otherwise>
    <img src="<%=cp%>/images/antenna/typeheart.jsp"/> 
</c:otherwise>
</c:choose> 


<c:choose>안에서 순서대로 <c:when>의 조건문을 검사해 true가 나오면 해당 <c:when>태그안에 내용을 보여주고 <c:choose> 문은 끝나게 된다.
만약, 모든 <c:when>의 조건문이 false일 경우 <c:otherwise>안에 내용을 보여주게된다. 

(6) <c:forEach>
▷ Collection을 반복할 때 쓰인다. 게시판 같은 반복적인 처리를 할때 매우 유용하다.
지원되는 컬렉션은 다음과 같다.
Arrays(배열)
java.util.Collection
java.util.Iterator
java.util.Enumeration
java.util.Map

<table>
<c:forEach items="${list}" var="notice" varStatus="status">
<tr>
    <td>${status.count}</td> 
    <td>${notice.title}</td> 
    <td>${notice.writer}</td> 
    <td>${notice.wdate}</td> 
    <td>${notice.readcount}</td> 
</tr> 
</c:forEach>
</table>  

items는 Collection 객체를 말한다.
var는 Collection에서 객체를 하나씩 가져올때마다 담는 객체다.
그 객체가 Beans일 경우 Beans 클래스를 자동으로 찾아 담는다.
varStatus는 일련의 속성을 정의한 객체다.

(7) <c:forTokens>

▷ <c:forTokens items="${param.text}" delims=",." var="word" begin="1" end="10" step="1">
           ${word}
    </c:forTokens>



출처 : http://slog2.egloos.com/3581446













 

'04번. IT 힌트얻기 > ▶ 자바' 카테고리의 다른 글

디자인 패턴  (0) 2012.01.13
JRE/JDK  (0) 2011.12.06
Java Memory 구조  (0) 2011.12.06
CLASSPATH/JAVA PATH  (0) 2011.12.06
[Java] 자바 JDBC  (0) 2011.12.02