2010. 5. 27. 10:11
반응형
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 매뉴얼 -  16148092-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 매뉴얼 참조   16148092-JSTL-Reference-11.pdf
태그에 진하게 표시된 속성은 필수 항목이다

(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>



 JSTL 매뉴얼 -  16148092-JSTL-Reference-11.pdf
 
출처 : 이재원님의 이글루 (http://slog2.egloos.com/3581446)








  1. JSTL의 종류
  2. JSTL 설정 : jstl관련 jar파일이 WEB-INF/lib폴더에 있으면 된다.
  3. Core Tag : <%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core %>
    • 변수
      • set : <c:set var="varName" value="value" scope=""/>
        • var : 이후 사용할 변수 이름
        • value : varName에 할당될 값
        • scope : varName을 사용할 영역 - page, request, session, application
        • target : bean object의 인스턴스 지정
        • property : target에 지정한 bean object의 field 지정
        • 예)
          • <c:set var="member" value="<% new Member() %>" scope="request" />
          • <c:set target="${member}" property="name" value="java"/>
          • 사용자 명 : <b>${member.name}</b>
        • 참고 : HashMap의 활용
          • <c:set var="map" value="<% new java.util.HashMap() %>"/>
          • <c:set target="map" property="name" value="java"/>
          • ${map.name}
      • remove : <c:remove var="varName" scope=""/>
        • var : set 태그로 설정한 변수 이름
        • scope : set 태그에서 설정한 영역(동일해야함)
    • 흐름제어
      • if : else가 지원되지 않는 단순 조건 처리 - <c:if test="condition">...</c:if>
        • test : 조건이 true이면 ...부분을 처리한다.
      • choose : 다중 조건 처리 - <c:choose></c:choose>
        • <c:when test="condition">...</c:when>
          • choose태그 내에서 test조건이 true이면 ...부분을 처리한다.
        • <c:otherwise>...</c:otherwise>
          • choose태그 내에서 when태그의 조건이 true인 경우가 없으면 ...부분을 처리한다.
      • forEach : 반복처리 및 배열, Collection, Map등의 순환 처리 - <c:forEach var="" items="">...</c:forEach>
        • items : 배열등의 데이터
        • var : items에서 할당된 값 - 기본 데이터의 경우 wrapper class로 취급
        • begin : 반복 처리시 시작 값
        • end : 반복 처리시 종료값
        • step : begin과 end사이의 step
        • 예)
          • map.put("key1", "value1");
          • map.put("key2", "value2");
          • <c:forEach var="item" items="${map}">
          • ${item.key} : ${item.value}<br/>
          • </c:forEach>
      • forTokens : 분자열 분리 - <c:forTokens var="varToken" items="string" delims="">...</c:forTokens>
        • items : 분리할 문자열
        • delims : items문자열을 분리할 구분자
        • 예)
          • <c:forTokens var="token" items="버스,트럭,승용차" delims=",">
          • ${token}<br/>
          • </c:forTokens>
    • URL처리
      • import : <c:import url="http://..." charEncoding="euc-kr" var="varName" scope=""/>
        • url : 읽어올 경로, remote 경로나 같은 서버의 절대/상대경로
        • charEncoding :
        • var : 읽어온 데이터를 지정한 변수(varName)에 할당한다.
        • scope : varName의 범위 지정 - page, request...
        • param 태그 : url에 지정한 경로를 읽어 올때 파라미터를 지정할 수 있도록 한다. - <c:param name="paramName" value="paramValue"/> (<jsp:param .../>)
        • 참고 : 읽어온 내용을 바로 출력하지 않고 varName에 할당한 후 사용할 수 있다.
      • redirect : <c:redirect url="http://..."/>
        • <c:param... 태그를 활용해 파라미터를 줄 수 있다.
      • url : <c:url var="varName" value="http://..."/>
        • <c:param... 태그를 활용해 파라미터를 줄 수 있다.
        • 예)
          • <c:url var="url1" value="http://www.a.com">
          • <c:param name="param1" value="paramValue"/>
          • </c:url>
          • ${url1}
    • 기타
      • out : JspWriter에 데이타를 출력 - <c:out value="" default="" escapeXml=""/>
        • value : 출력할 내용
        • default : value에 지정된 값이 없을때 출력될 내용
        • escapeXml : <, >, &, ', "에 대한 escape 여부 - true/false
        • 참고 : value에 지정한 값이 java.io.Reader의 종류라면 해당 Reader객체의 데이터를 읽어 출력한다.
      • catch : 예외 처리 - <c:catch var="exName">...</c:catch>
        • var : catch 태그 내의 ...에서 예외가 발생하면 예외 객체가 exName에 할당된다.
  4. 국제화 태그 : <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    • 국제화 태그는 사용자의 각기 다른 언어 및 국가에 대한 지원을 위한 것으로 사용자 웹브라우저의 request header의 Accept-Language를 통해 적용된다.
    • 로케일 지정
      • setLocale : <fmt:setLocale value="ko" scope="request"/>
        • 사용자 환경의 locale을 강제 지정한다.
        • value : 두자리 언어 코드, 언어코드 뒤에 두자리의 "_국가코드"를 지정할 수 있다. (예, ko_kr, en_us)
        • scope :
      • requestEncoding : <fmt:requestEncoding value="euc-kr"/>
        • request 파라미터의 인코딩을 지정
        • 참고 : request.setCharacterEncoding("euc-kr");
    • 메세지 처리
      • 메세지 처리를 위한 번들 파일 작성 : WEB-INF/classes/resource/message.properties
        • 리소스 파일명을 message로 작성하고 언어 및 국가별로 해당 파일명의 "_언어코드_국가코드"를 붙혀 추가한다.
        • 적용되는 언어파일이 없을 경우 message파일의 내용으로 처리된다.
        • .properties파일 작성 : 라인 단위로 key = value형태로 작성
      • bundle : 리소스 번들 파일 지정 - <fmt:bundle basename="resource.propertiesFileName" prefix="msg_">...</fmt:bundle>
        • basename : ...부분에서 사용할 번들파일 이름 지정 (.properties는 쓰지 않는다.)
        • prefix : ...부분에서 사용될 message태그의 key부분값에 prefix의 문자열을 자동으로 붙혀준다.
        • 참고 : 번들 파일명 지정시 classes폴더 하위의 폴더에 대해 namespace형식으로 지정할 수 있다.
      • message : 번들파일의 내용 출력 - <fmt:message key="propertiesKey" var="varName" scope="request"/>
        • key : properties파일에 작성한 keyName
        • var : var지정시 해당 영역에 메세지를 출력하지 않고 varName에 할당한다.
        • scope :
        • bundle : setBundle 태그를 통해 지정된 bundle변수를 통해 message태그만으로 번들을 선택해서 출력할 수 있도록 한다.
        • 참고 : key로 부터 읽은 메세지에 파라미터를 치환할 수 있다.
          • properties파일 작성시 {0}, {1}과 같이 메세지에 파라미터 순서를 명시한다.
          • message태그 내의 <fmt:param value="">를 통해 파라미터를 적용한다.
          • param태그 순서대로 적용된다.
      • setBundle : 리소스 번들파일을 변수로 지정할 수 있도록 한다.
        • <fmt:setBundle var="bundleName" basename="propertiesFileName" scope=""/>
        • message태그에서 bundle을 지정할 수 있도록 bundle변수를 설정한다.
    • 포멧팅
      • formatNumber
        • value : 포멧을 지정할 값
        • var : 포멧적용 후 저장할 변수명 지정(없으면 바로 출력)
        • type : number, percent, currency
        • groupingUsed : [true]/false
        • currencyCode : 통화 코드(ISO 4217 - KRW : 원), type이 currency일때만 적용됨.
        • currentSymbol : 통화 표현기호, type이 currency일때만 적용됨.
        • pattern : 직접 출력양식 지정, java.text.DecimalFormat클래스의 패턴
        • scope :
      • formatDate
        • value
        • var
        • type : date, time, both
        • dateStyle : java.text.DateFormat의 스타일 (full, long, default, medium, short)
        • timeStyle : java.text.DateFormat의 스타일
        • pattern : java.text.simpleDateFormat클래스의 지정 스타일
        • timeZone : 시간대를 변경하고자 할경우, setTimeZone태그로 생성한 TimeZone객체
        • scope
      • parseDate
      • parseNumber
      • setTimeZone
      • timeZone : timeZone태그 설정 내의 formatDate태그에 영향을 줌
        • value : timeZone 설정, java.util.TimeZone클래스의 getAvailableIDs메서드를 통해 timeZone목록을 확인할 수 있다.
  5. 함수 태그 : <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    • length(obj) : List, Collection, String
    • toUpperCase(str)
    • toLowerCase(str)
    • substring(str, idx1, idx2) --> str.substring(idx1, idx2)
    • substringAfter(str1, str2) : str1에서 str2와 일치하는 문자 이후의 문자열
    • substringBefore(str1, str2) : str1에서 str2와 일치하는 문자 이전의 문자열
    • trim(str)
    • replace(str, src, dest) : str에서 src문자를 dest문자로 변환
    • indexOf(str1, str2) : str1에서 str2와 일치하는 문자의 인덱스
    • startsWith(str1, str2) : str1이 str2로 시작하면 true, 아니면 false
    • endsWith(str1, str2) : str1이 str2로 끝나면 true, 아니면 false
    • contains(str1, str2) : str1이 str2를 포함하고 있으면 true, 아니면 false
    • containsIgnoreCase(str1, str2) : 위의 contains를 대소문자 구분하지 않고 수행
    • split(str1, str2) : str1을 str2를 구분자로 분리하여 배열로 구함
    • join(arr, str1) : arr의 내용을 str1을 구분자로 합친다.
    • escapeXml(str) : XML객체 참조에 해당하는 특수 문자 처리(& --> &amp;)

 출처 : http://blog.naver.com/yu_hs?Redirect=Log&logNo=100100747114






el과 fn을 이용한 쉬운 처리 방법 sample
1. <c:set var="aaaaaaaa" value="${fn:length(test)}" />
2. ${fn:substring("test", 1, fn:length("test"))}

반응형

'Jsp-Servlet > Jsp' 카테고리의 다른 글

404, 500 error등의 처리  (1) 2011.12.09
Excel Download 공통단  (1) 2011.11.17
quartz setting (servlet 이용)  (3) 2011.10.31
jstl el 특이한 명령어들..  (4) 2011.01.09
custom tag lib 대략 정리  (1) 2010.08.05
Posted by seongsland