티스토리 뷰

1. 자바

(토쿄) 조세핀> JSP 에서 JSTL 과 EL

패스트코드블로그 2020. 6. 25. 10:29

Expression Language는 JSP에서 기본으로 지원한다

세팅해야 할 것은 JSTL( JavaServer Pages Standard Tag Library ) 이다

 

1. 다운로드

 

http://tomcat.apache.org/ - Taglibs - Standard - JSTL 1.1 download - binaries - jakarta-taglibs-standard-1.1.2.zip


직접다운로드경로 - http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/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 - Prefrences - 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의 키값 or 프로퍼티명 or 인덱스이다

    []의 왼쪽은 Map, Beans, 배열, List 타입이 올 수 있다

 


    여기서 알아야 할 점이 하나 있는데 EL에서는 해당값이 null이거나 공백일 경우에는 

    아무 내용도 표시하지 않고 에러도 발생하지 않는다..

 

 

(2) 연산자

 

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

 

1) 산술연산자 : + - * / (div) % (mod)

2) 논리연산자 : &&(and) ||(or) !(not)

3) 관계연산자 : ==(eq) !=(ne) <(lt) >(gt) <=(le) >=(ge)

4) 삼항연산자 : ?:

예) ${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일 경우 dafault에 있는 값으로 대채한다

 

 

(2) <c:set>

 

저장객체의 setAttriubte 기능을 한다

 

<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> 과 <c:otherwise>가 들어간다

 

<c:choose>

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

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

</c:when>

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

    <img src="<%=cp%>/images/antenna/type2.jpg" />

</c:when>

<c:when test="${vo.type==0 or vo.type==3}">

    <img src="<%=cp%>/images/antenna/type_ment.jpg" />

</c:when>

<c:otherwise>

    <img src="<%=cp%>/images/antenna/type_heart.jpg" />

</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는 일련의 속성들을 정의한 객체다 ( javax.servlet.jsp.jstl.core.LoopTagStatus )

 

 

다음은 일반적은 for문 처럼 사용한 예다

 

<c:forEach var="x" begin="0" end="10" step="2">

${x},

${x*x}

</c:forEach>

 

 

(7) <c:forTokens>

 

<c:forEach> 와 같이 반복 태그로 이것은 StringTokenizer 클래스를 이용한다.. 그다지 쓸일은 없다

구분자( delims ) 를 공백, 쉼표, 마침표 로 한 예이다

 

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

    ${word}

</c:forTokens>

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함