'JSTL'에 해당되는 글 3건

  1. 2013.06.17 [jstl] jstl 문법 2
  2. 2013.06.17 [jstl] jstl 문법 1
  3. 2013.05.21 [JSTL] <c:url> 1

[jstl] jstl 문법 2

jstl 2013. 6. 17. 13:31

[jstl] jstl 문법 2



출처 : http://cafe.naver.com/hermeswing/406

원문 :

 

JSTL (JSP Standard Tag Library)

 

http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi

 

1. 위 사이트에서 JSTL 을 다운 받습니다.

2. 압축을 풀고 lib 디렉토리 안의 jstl.jar  standard.jar 를 복사합니다.

3. Tomcat 의 디렉토리 내의 common\lib 안에 복사 해놓고 쓰면 됩니다.

<%@ taglib prefix="c" uri="java.sun.com/jsp/jstl/core" %> 와 같이 선언하면 됩니다.

 

기본적인 기능

<%@ taglib prefix="c" uri="java.sun.com/jsp/jstl/core" %>

 

XML 처리

<%@ taglib prefix="x" uri="java.sun.com/jsp/jstl/xml" %>

 

국제화와 형식화

<%@ taglib prefix="fmt" uri="java.sun.com/jsp/jstl/fmt" %>

 

데이터베이스 작업

<%@ taglib prefix="sql" uri="java.sun.com/jsp/jstl/sql" %>

 

 

JSTL 설치

  • 톰캣 설치기 설치 옵션에서 Examples를 선택하면 설치되는 예제 애플리케이션에 들어있음
  • 위치 : webapps/jsp-examples/WEB-INF/lib/jstl.jsr
  • 위의 파일을 WEB-INF/lib 디렉토리에 복사

 

 

스크립팅 없이 루핑 돌리기

<c:forEach>

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <c:forEach var="movie" items="${movieList}" varStatus="movieLoopCount" >
  3. <tr>

  4. <td>${movie} </td>

  5. <td>${movieLoopCount.count}</td>

  6. </tr>

  7. </c:forEach>

var : 컬렉션에 있는 각각 항목을 나타내는 변수로, 한번 회전할 때마다 값이 바뀝니다.

items : 루핑을 돌 실제 데이터(배열, 컬렉션, 맵 또는 콤마 분리 문자열)

varStatus : 루핑 횟수 알기

 

배열을 불러올때는 ${param.movieList} 가 아닌 ${paramValues.movieList}로 items에 저장해야 한다.

 

<c:forEach>안에 <c:forEach>품기

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <c:forEach var="listElement" items="${movies}" varStatus="movieLoopCount" >
  3. <c:forEach var="movie" items="${listElement}">
  4. <tr>

  5. <td>${movie} </td>

  6. <td>${movieLoopCount.count}</td>

  7. </tr>

  8. </c:forEach> 
  9. </c:forEach>

속성 : begin, end, step

 

조건문

<c:if>

  1. <c:if test="${userType eq 'member'}:>
  2. <jsp:include page="inputComments.jsp" />

  3. </c:if>

 

<c:choose>, <c:when>, <c:otherwise>

  1.  <c:choose>
  2. <c:when test="${userPref == 'preformance'}">

  3. go 1

  4. </c:when>

  5. <c:when test="${userPref == 'preformance'}">

  6. go 2

  7. </c:when>

  8. <c:otherwise>

  9. go 3

  10. </c:otherwise>

  11. </c:choose>

 

 

속성 입력

<c:set>

  1. <c:set var="userLevel" scope="session" value="Cowboy" />
  2. <c:set var="userLevel" value="${person.dog}" />
  3. <c:set var="userLevel" scope="session">
  4. Sheriff, Bartender, Cowgirl

  5. </c:set>
  1. var : session 생존범위에 "userLevel" 이란 이름의 속성이 없으면 <c:set> 태그는 하나를 새로 만듭니다.
  2. scope : 옵션값
  3. value : 꼭 문자열일 필요는 없습
  4. 기타 : value가 널 인경우 변수는 제거됩니다.

 

빈과 맵에 <c:set> 태그 사용하기

 <c:set> 태그는 빈 프로퍼티와 맵 값 두 가지 경우에만 동작합니다.

리스트나 배열에 값을 추가하기 위해서 사용할 수 없슴

  1. <c:set target="${petMap} property="dogName" value="Clover" />
  2. // target은 널이어서는 안 됩니다.
  3. // target이 맵인 경우 dogName은 키 이름이 됩니다 
  4. // target이 빈인 경우 dogName은 프로퍼티 이름이 됩니다.
  5. <c:set target="${person}" property="name" >
  6. // target 속성에 id 이름을 기입하면 안됩니다.
  7. ${foo.name}

  8. // 몸체 안에는 문자열 또는 표현식이 들어갈 수 있습니다.

  9. </c:set>

 target 속성에는 객체(Object)가 들어가야 합니다. 빈이나 맵의 "id" 이르을 쓰면 안됩니다.

 

scope 속성을 명기하지 않으면?

컨테이너는

  1. page 
  2. request 
  3. session 
  4. application(context) 

순으로 찾음, 못 찾을 경우 page 생존범위로 해서 하나를 새로 만듬

 

<c:remove> 로 속성 제거하기

  1. <c:remove var="userStatus" scope="request" /> 
  2. // var 속성에는 문자열을 넣어야함. 표현식을 넣으면 안됨

 

 

<c:import> 로 컨텐츠 포함

  1. <c:import url="http://www.lazyartist.co.kr"/>

요청이 들어오는 시점에 url 속성에 명기한 파일을 현재 컨텐츠에 포함합니다.

<c:import>는 외부 자원도 포함할 수 있습니다.

 

<c:param> 으로 포함될 파일 동적 변화 시키기

  1. <c:import url="header.jsp">
  2. <c:param name="subTitle" value="we take the String" />

  3. </c:import>

 포함될 파일에

  1. ${param.subTitle} 

 

 

<c:url>로 url 재작성

  1. <a href="<c:url value='/imputComments.jsp' />
  2. // value에 들어있는 상대경로 뒤에 jsessionid를 추가합니다.(쿠키를 사용하지 못 하는 경우)

 

url 인코딩

  1. <c:url value='/imputComments.jsp' var="inputURL" />
  2. <c:param name="firstName" value="${first}" />

  3. <c:param name="lastName" value="${last}" />

  4. // param 태그를 사용합으로써 url인코딩까지 해준다.(공백에 +를 넣어줌)

  5. </c:url>

     

  6. <a href="${inputURL}">

 

 

오류 페이지 설정

오류 페이지에서만 쓸 수 있는 객체 : exception

  1. <%@ page isErrorPage="true" %>
  2. ${pageContext.exception}

 

오류 발생 후 오류 페이지로 이동하지 않고 자체 페이지에서 해결하기 : <c:catch>

  1. <c:catch>
  2. <% int x = 10/0; %>

  3. // 에러가 발생하면 다음을 실행하지 않고 </c:catch>로 곧장 이동한다.

  4. </c:catch>

 

exception을 속성으로 만들어 에러 메시지 읽기
  1. <c:catch var="myException">
  2. ...

  3. </c:catch>
  4. ${myException.message}
  5. // 타입이 Throwable이니 message프로퍼티가 있음 

 

 

JSTL API

코어(Core) 라이브러리

  • 일반적인 것 

    • <c:out> 
    • <c:set> 
    • <c:remove> 
    • <c:catch> 
  • 조건

    • <c:if> 
    • <c:choose> 
    • <c:when> 
    • <c:otherwise> 
  • URL 관련

    • <c:import> 
    • <c:url> 
    • <c:redirect> 
    • <c:param> 
  • 반복

    • <c:forEach> 
    • <c:forEachToken> 

 

 포맷팅 라이브러리

  • 국제화

    • <fmt:message> 
    • <fmt:setLocale> 
    • <fmt:bundle> 
    • <fmt:setBundle> 
    • <fmt:param> 
    • <fmt:requestEncoding> 
  • 포맷팅

    • <fmt:timeZone> 
    • <fmt:setTimeZone> 
    • <fmt:formatNumber> 
    • <fmt:parseNumber> 
    • <fmt:parseData> 

 

SQL 라이브러리

  • 데이터베이스 접근

    • <sql:query> 
    • <sql:update> 
    • <sql:setDataSource> 
    • <sql:param> 
    • <sql:dataParam> 

 

XML 라이브러리

  • 코어 xml 액션 

    • <x:parse> 
    • <x:out> 
    • <x:set> 
  • xml 흐름 제어

    • <x:if> 
    • <x:choose> 
    • <x:when> 
    • <x:otherwise> 
    • <x:forEach> 
  • 변환 액션

    • <x:transform> 
    • <x:param>


'jstl' 카테고리의 다른 글

[jstl] jstl 문법 1  (0) 2013.06.17
[JSTL] <c:url>  (1) 2013.05.21
Posted by airlueos
,

[jstl] jstl 문법 1

jstl 2013. 6. 17. 13:30

[jstl] jstl 문법 1




출처 : http://searchstory.tistory.com/332

JSP에서 JSTL과 EL사용하기

04번. IT 힌트얻기/▶ 자바 2012/01/18 23:05

목표 : 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

'jstl' 카테고리의 다른 글

[jstl] jstl 문법 2  (0) 2013.06.17
[JSTL] <c:url>  (1) 2013.05.21
Posted by airlueos
,

[JSTL] <c:url>

jstl 2013. 5. 21. 09:18

[JSTL] <c:url>

url에 프로젝트 이름 안적어도 자동으로 잡아줌

프로젝트 내 script 등 경로를 지정시 컨텍스트 루트가 포함되지 않을 경우 포장작업 필요

src="/resource/~~" 인 경우 앞에 컨텍스트 루트 포함하기 위해 src="<c:url value='/resource/~' />"포장작업

<a href="<c:url value='/list.jsp' / > ">목록</a>

/ 앞에 프로젝트 경로가 잡힘




출처 : http://javastore.tistory.com/26

<c:url>

- 현재 서블릿 콘텍스트 됨(프로젝트 이름을 URL에 써야하는데 이걸 쓰면 url에 프로젝트를 써도 되고 안쓰면 자동으로 처리해준다)
- 세션 관리를 위한 URL 재작성
- 요청 매개변수 이름과 값의 URL 인코딩

<!--파라미터가 없는 형태 -->
<a href="<c:url value='/list.jsp' / > ">목록</a>

<!-- 파라미터가 있는 형태-->
<c:url value="/list.jsp" >

<c:param name="searchColumn" value="${searchColumn}" />
<c:param name="searchWord" value="${searchWord}" />
</c:url>


'jstl' 카테고리의 다른 글

[jstl] jstl 문법 2  (0) 2013.06.17
[jstl] jstl 문법 1  (0) 2013.06.17
Posted by airlueos
,