본문 바로가기
programming/web

[jsp]JSTL

by 힐무새 2017. 5. 19.

JSTL(jsp Standard Tag Library)

html로 지원하는 tag를 확장해서 jsp에서 개발자가 활용하는 태그를 만든 것을 커스텀 태그라고 합니다. 커스텀 태그 중에서 많이  사용되는 것을 모아서 JSTL이라는 규약을 만들고 이를 활용하고 있습니다.
스크립트 코드를 사용할 때 보다 간결하고 이해하기 쉬운 jsp 코드를 작성할 수 있게끔 도와주는 유용한 라이브러리입니다.
  • 태그 종류
    1. 코어(<c:XXX>) : 변수, 흐름 제어, url 처리
    2. 국제화(<fmt:XXX>): 숫자 및 날짜 형식 처리
    3. XML(<x:XXX>): 

jstl 라이브러리 활용

  1. jstl 라이브러리 다운로드
    http://tomcat.apache.org/download-taglibs.cgi
  2. WEB-INF/lib 위치
  3. jsp 상단
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


코어 태그

  • if~else나 변수의 지정 등과 같이 논리적 처리
  • 태그 라이브러리
    • 변수지원
      <c:set> : jsp에  사용될 변수를 지정
      - var: 변수명, value: 변수에 매핑되는 값
          ex) <c:set var="num01" value="25" />
      <c:remove> : 설정한 변수 제거
    • 흐름 제어
      <c:if> : 조건을 제어할 때 활용
          - test : boolean 조건식(el)
          ex) <c:if test="${param.num01>=60}">합격/>

jsp에서의 scope 범위

  • <c:set page="속성값"/>
    • page:
    • session:
    • request:
    • application:

<c:set 객체 할당

  • 처리 프로세서
    1. 객체 생성:
      request/session.attribute("key",객체);
      person p= new Person();
    2. 객체 변수 할당
      <c:set var="obj01" value="객체참조${key} scope="session/application"/>
      value:${key}, <%=p%>
      ex) <c:set value="${key}"/>
    3. 객체의 메서드 활용
      ${obj01.property} getName  ==> name
    4. 메서드(property)를 통해 필드 값의 변경
      <c:set target="${obj01}" property="name" value="신길동"/>
      ==> obj01.setName("신길동")

흐름제어 태그

  • jstl로 화면상의 내용을 조건에 의해서 처리하는 것을 필요로 할때 활용됩니다.
    <c:if test="${조건}">
    조건이 true일 때 보여줄 화면 내용...
    프로세서 처리
    </c:if>

</c:if>


<c:choose> 조건 선택

  • switch문과 if-else문의 혼합된 형태로 <c:if> 에서 else 구문을 지원하지 않기에 처리하는 형태를 말합니다.
  • 형식

<c:forEach> 반복문

  • var: 반복문 안에서 활용된 단위 변수나 객체
  • begin: 시작 번호
  • end: 마지막 번호
  • step: 증감 단위

forEach 객체 단위

  • <c:forEach var="p" items="${list}" varStatus="sts"></c:forEach>
  • varStatus를 통한 옵션 처리
    • sts.index : 인덱스값 가져오기
    • sts.count: 카운트(1~)
    • sts.first: 첫번째 값인 경우, boolean true
    • sts.last: 마지막 값인 경우, boolean true


위와 같은 java에서의 forEach문은 jstl로 다음과 같이 표현할 수 있습니다.



<c:forTokens>

  • 속성
    • var: 단위 데이터
    • items: 구분자를 포함한 데이터
    • delims: 구분자

자원포함 처리 태그

  • 내부/외부 자원의 삽입(<c:import>)
  • url 생성(<c:url>)
  • 리다이렉트(<c:redirect>)
와 같은 간결한 코드로 한 페이지 내에서 여러 자원을 활용할 수 있습니다.
  • <c:import 속성="속성값">
    1. url: 내부/외부 자원 호출
          ex) url="top.jsp",
          url="http://www.naver.com"
    2. var: 변수명

숫자 및 날짜 formatting 처리 태그

  1. <fmt:formatNumber> 태그
      • 숫자를 양식에 맞춰 문자열(String)으로 변환해준다.
      • DB(number) ==> java.lang.Integer/..  ==> 3,500
    • 속성
      • value : 실제 입력한 숫자  data
      • type: 값 타입 (ex : currency(통화), percent(%) )
      • pattern: 패턴 (ex: 0000,000.00 )
      • currentCode: 통화코드
    • ex)
      <fmt:formatNumber value="999999" type="currency" currencySymbol="원"/>
  2. <fmt:formatDate 속성="속성값">
    • 속성
      • value : 날짜 및 시간
      • type: 날짜, 시간, 또는 둘 다 ex) time, date, both
        <fmt:formatDate type="both"/>
      • dateStyle: 정의 포맷팅 스타일 ex)default, short, medium, long, full
      • timeStyle: 정의된 시간 포맷팅 ex)default, short, medium, long, full
      • pattern: 사용자 정의 패턴으로 날짜와 시간 표시
        timeZone, var, scope

국제화 태그(<fmt:XXX>)

  • 로케일 지정
    • setLocale: 지역을 지정한다
    • requestEncoding: 요청 파라미터 인코딩 지정
  • 메시지 처리
  • 기본 형식
    • <fmt:setLocale value="" scope="">
      국제화 태그들이 사용할 locale 지정
    • <fmt:requestEncoding value="euc-kr">
      요청 파라미터의 캐릭터 인코딩 지정

jstl에서 쓰이는 함수

  • 설정
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
  • 형식:${fn:함수명(변수)}
  • 주요함수 내용
    • length(): 문자열의 길이
    • toUpperCase(): 대문자 변환처리
    • substring(변수, 시작 index, 마지막 index)
    • trim() : 양 옆 공백문자 삭제
    • replace(문자열,변경할 문자열, 변경될 문자열): 
    • split(문자열, 구분자): 해당 문자열을 구분자로 배열을 만듦

정리

  • jsp에서 활용되는 변수의 scope 4가지를 기술하세요 (requset, session, page, application)
  • jstl을 사용하기 위하여 lib파일은 어떤 파일이 필요하고 설정 위치는 어디인가?
  • web application context(프로젝트명)을 가져오기 위한 el은 무엇이며 default 경로는 어디를 지정하는가?
  • form 하위에 <input name="call"/> 이라는 tag로 설정하여 요청값을 전달한다. el로 해당 데이터의 요청값을 가져오려면 어떤 code가 필요한가?
  • 오늘 날짜를 등록하고 날짜를 다음과 같은 형식으로 출력하고자 한다. jstl code를 기술하세요
    출력 형식: 2017/05/23 AM 11:47
  • scope 범위로 session이 있다. 이는 구체적으로 웹 상에서 어느 범위를 말하는가? client와 server의 입장에서 기술하세요.
  • emp 데이터를 jstl을 통해서 해당 내용을 list하면서 가장 첫번째 컬럼에 1부터 numbering을 하려고 한다. jstl 코드를 기술하세요.


'programming > web' 카테고리의 다른 글

[jsp] 액션 태그, 에러 페이지  (2) 2017.05.24
[jsp]mvc pattern  (0) 2017.05.23
[jsp]EL(Expression Language)  (6) 2017.05.19
[jsp]Session  (6) 2017.05.17
[jsp]multi check data, response  (0) 2017.05.15