05.JSP2009. 1. 22. 15:21
반응형

1. 개요

  • JSP에서는 사용자가 태그를 정의해서 사용하는 것이 가능(Custom Tag)
  • Custom Tag중 자주 사용하는 것을 표준화 시켜 놓은 것을 JSTL
  • 작업을 수행하는 코드들을 태그로 간략화

2. JSTL을 사용하기위한 환경 설정

  1) http://jakarta.apache.org → downloads → Taglibs → standard 1.1 Taglib → 1.1.2.zip을 클릭하여 다운로드
  2) 압축을 풀어 jstl.jar, standard.jar 두 개의 파일을 톰캣홈\webapps\study\WEB-INF\lib폴더에 복사


3. JSTL 1.1 라이브러리


라이브러리

URI

Prefix

(접두어)

예시

Core

http://java.sun.com/jsp/jstl/core

c

<c:tagname...

XML processing

http://java.sun.com/jsp/jstl/xml

x

<x:tagname..>

I18N capable formatting

http://java.sun.com/jsp/jstl/fmt

fmt

<fmt:tagname..>

Database access(SQL)

http://java.sun.com/jsp/jstl/sql

sql

<sql:tagname..>

Functions(함수)

http://java.sun.com/jsp/jstl/functions

fn

fn:functionName(....)

4. JSTL 1.1 라이브러리

1) JSTL Core

  • 변수 선언, 삭제 등 변수와 관련된 작업
  • if문, for문 등과 같은 제어문, 그리고 URL 처리등에 사용
  1. <%@ taglib %> 디렉티브

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

p649


    *** 태그

(1) <c:set>
  • JSP의 setAttribute와 같은 역할
  • 변수 설정

  1. <c:set var="varName" value="value" target="targetObjectName" property="propertyName" scope="{page|request|session|application}"/>
  2.   var : 변수명
      value : 변수 값
      target : 자바빈 객체명,Map 객체명
      property : property 명
      scope : 공유범위

      예1) <c:set var="abc" value=${20}>  변수 abc에 값 20을 설정

      예2) <c:set value="20" target="kkk" property="age"}

             객체 kkk의 property  age의 값에 20을 설정


(2) <c:out>
  • JSP의 표현식을 대체
  • 화면에 해당 변수값을 출력

  1. <c:out var="varName" default="defaultValue" escapeXml="{true|false}"/>
            var : 변수명
            default : 기본값
            escapeXml : true로 설정시(기본값) < > & ‘ “ 문자들을 각각 &lt;&gt;&amp;&#039;&#034;로 출력

    예1) <c:out value="${abc}"/> 변수 abc 값을 출력


(3) <c:remove>태그
  • JSP의 removeAttribute()와 같은 역할을 한다.
  1. <c:remove var="varName" scope="{page|request|session|application}"/>
          var: 변수명
          scope : 변수의 공유 범위

예1) <c:remove var="abc"/> 변수abc의 값을 제거

  1. <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
     <title>JSTL core 예제 - set, out, remove</title>
    </head>
    <body>
  2.  browser변수값 설정
      <c:set var="browser" value="${header['User-Agent']}"/><br>
      <c:out value="${browser}"/><p>
     browser변수값 제거 후
      <c:remove var="browser"/>
      <c:out value="${browser}"/>
    </body>
    </html>

(실습1) 수량과 단가 기억장소에 data를 기억한 후 금액을 출력하는 프로그램 작성
    금액 = 수량 * 단가



(실습2) 이름과 국어,영어, 수학 점수를 폼에서 입력 받아서
EL과 JSTL을 이용하여 다음과 같이 출력


xxx님의 총점은 xxx이고 평균은 xxx입니다.


(4) <c:catch>
  • body위치에서 실행되는 코드의 예외를 잡아내는 역할
  1. <c:catch var="errMag"/>

        var : 에러가 발생하면 변수에 에러메세지가 들어간다


(5) <c:if>
  • 조건문
  1. <c:if test="condition" var="varName" scope="{page|request|session|application}"/>

       test : 조건 판별식
       var : 변수명
       scope : 변수의 공유범위


     예)

  1. <c:if test="${country=='korea'}">
        This customer is based in korea.
    </c:if>

country 변수값이 'korea'이면 밑의 문장 출력


(6) <c:choose>(<c:when>,<c:otherwise>)태그
  • switch문과 비슷, 조건에서 문자열 비교가 가능
  1. <c:choose>
      <c:when test="조건>body 내용</c:when>
      <c:otherwise>body의 내용</c:otherwise>
    </c:choose>

 예)

  1. <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
    <title>JSTL core 예제 - if, choose, when, otherwise</title>
    </head>
    <body>
    <c:set var="country" value="${'Korea'}"/>
    <c:if test="${country != null}">
      국가명: <c:out value="${country}"/>
    </c:if>
    <p>
    <c:choose>
      <c:when test="${country == 'Korea'}">
         <c:out value="${country}"/>의 겨울은 춥다.
      </c:when>
      <c:when test="${country == 'Canada'}">
         <c:out value="${country}"/>의 겨울은 너무 춥다.
      </c:when>
      <c:otherwise>
         그외의 나라들의 겨울은 알 수 없다.
      </c:otherwise>
    </c:choose>
    </body>
    </html>

(실습1) <c:if> 사용
변수에 수를 기억시키고
 기억된값이 0보다 크면 ‘양수입니다’
                 0이면 ‘0입니다’
                 0보다 작으면 ‘음수입니다’ 출력


(실습2) <c:choose>이용
변수에 이름과 점수를 기억시킨 후 점수에 따라 수우미양가 출력
  (예: 90점 이상 100점 이하이면 수)


(7) <c:forEach>
  • 객체 전체에 걸쳐 반복 실행할 때 사용
  1. <c:forEach items="items" begin="begin" end="end" step="step" var="varName" varStatus="varStatus"/>

      items : 반복할 객체명
      begin : 시작값
      end : 마지막 값
      step : 증가값
      var : 변수명
      varStatus : 변수 상태(index값이나 count값 출력)


예1) 0,2,4,6,8 출력

  1. <%@ page contentType="text/html;charset=euc-kr"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <c:forEach var="i" begin="0" end="9" step="2">
    ${i}<br>
    </c:forEach>

예2) 1에서 100까지 숫자 중에서 짝수 만 출력

  1. <%@ page contentType="text/html;charset=euc-kr"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <c:forEach var="k" begin="1" end="100">
       <c:if test="${k % 3 == 0}">
         ${k }<br>
       </c:if>
    </c:forEach>

 ** 객체에서 반복하여 값을 출력

  1. <c:forEach var="customer" items = "${customers}">
      Customer : <c:out value="${customer}"/>
    </c:forEach>

*** 예

  1. <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
      <title>JSTL core 예제 - forEach</title>
    </head>
    <body>
    <h3>Header 정보:</h3>
    <c:forEach var="head" items="${headerValues}" varStatus="status">
      param: <c:out value="${head.key}"/>
      <c:out value="${status.index}"/>  // index 값 출력
      <c:out value="${status.count}"/>  // 요소의 수를 출력
      <br>
      values:
       <c:forEach var="val" items="${head.value}">
         <c:out value="${val}"/>
       </c:forEach>
       <p>
    </c:forEach>
    </body>
    </html>

(8) <c:forTokens>
  • 자바의 StringTokenizer클래스를 사용하는 것
  1. <c:forTokens items="condition" delims="delimiter" begin="begin" end="end" step="step" var="varName" varStatus="varStatus"/>

    items : 객체명
    delims : 구분자
    begin : 시작값
    end : 마지막 값
    step : 증가값
    var : 변수명
    varStatus : 변수 상태


 *** 예

  1. <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
      <title>JSTL core 예제 - forTokens</title>
    </head>
    <body>
      <c:forTokens var="car" items="Sprinter Trueno AE86,
  2. RX-7 Savanna FC3S,
  3. Lancer Evolution III,
  4. RX-7 Efini FD3S" delims=",">
  5.    자동차 이름: <c:out value="${car}"/><br>
      </c:forTokens>
    </body>
    </html>

(9) <c:import>
  • 자원 import

  1. <c:import url="url" var="varName" scope="{page|request|session|application}" varReader="varReader" charEncoding="charEncoding"/>

       url : 읽어올 url
       var : 변수명
       scope : 변수의 공유 범위
       varReader : 리소스의 내용을 Reader 객체로 읽어올 때 사용
       charEncoding : 읽어온 데이터의 캐릭터 셋지정


    예)

  1. <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <c:import url="/ch07/date.jsp" var="url" />
    <html>
    <head><title>JSTL core 예제 - import</title></head>
    <body>
      ${url}
    </body>
    </html>

**date.jsp

  1. <%@ page contentType="text/html; charset=euc-kr" %>
    <%@ page import="java.util.*, java.text.*" %>
    <%@ page errorPage="err.jsp"%>
    <html>
      <body>
       <%
          Date date = new Date();
          SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd");
          String strdate = simpleDate.format(date);
       %>
       보통의 JSP 페이지의 형태입니다.<br>
       오늘 날짜는 <%= strdate%> 입니다.
      </body>
    </html>

(10) <c:redirect>
  • response.Redirect()를 대체하는 태그
  1. <c:redirect url="url"/>

     url : 이동할 URL


(11) <c:url>
  • 쿼리 파라미터로부터 URL 생성
  1. <c:url var="varName" value="value" scope="{page|request|session|application}"/>

   예1)

  1. <c:url value="/customers/register" var="registrationURL">
      <c:param name="name" value="${param.name}"/>
      <c:param name="country" value="${param.country}"/>
    </c:url>

 /customers/register?name=xxxx&country=xxxx의 값이 변수 registrationURL에 기억


2) JSTL XML

  • XML을 처리해 주기 위한 것
  • XML 출력, 흐름 제어, XML 변환등의 작업
  •  디렉티브 작성
  1. <%@ taglib prefix="x" uri="http://java.sun.com/jsp/js시/xml" %>
  • 태그 : p665

3) JSTL fmt

  • JSTL 국제화, 지역화 태그로 다국어 문서를 처리할 때 유용
  • 날짜와 숫자 형식을 다룰 때 사용
  • 디렉티브 작성
  1. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
  • 태그 p667

(1) <fmt:setLocale>태그
  • 다국어 지원페이지를 만들 때 사용
  • ResourceBundle로 불러오는 *.properties 파일들과 연계하여 사용

  1. <fmt:setLocale value="locale" variant="variant" [scope="{page|request|session|application}"]/>

       value : 두 글자로 된 언어 코드를 반드시 지정
                 한글의 경우 ko_kr
       variant : 브라우저 스펙 기술
       scope : 변수의 공유 범우;


   예)

  1. <fmt:setLocale value="ko" />

(2)<fmt:requestEncoding>
  • request.setCharcterEncoding()

  1. <fmt:requestEncoding value="charsetName"/>

        value : 인코딩 값

     예)

  1. <fmt:requestEncoding value="euc-kr"/>
    <%@ page contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>  
    <fmt:requestEncoding value="euc-kr"/>
    <html>
    <head>
    <title>Insert title here</title>
    </head>
    <body>
    파라미터 :<c:out value="${param.id}"/>
    <form method="post" action="jstlEx6.jsp">
       <input type="text" name=id>
       <input type="submit" value="확인">
    </form>  
    </body>
    </html>

(3) <fmt:bundle>
  •   properties 확장자를 이용하여 자원 파일을 읽어오는 역할
  1. <fmt:bundle basename="basename" prefix="prefix">
    body의 내용
    </fmt>

          basename : properties 파일명
             WEB-INF/classes에 보통위치(패키지 형식의 이름 가질 수 있음)
             bundle 폴더안에 testBundle.properties의 경우 : bundle.testBundle
             로케일이 ko일 경우 : testBundle_ko.properties 파일을 읽어온다
             prefix 속성 : key이름


        ☞ properties의 내용을 한글로 입력할 수 없으므로 유니코드로 변환하여 입력

            (변환 프로그램 : native2ascii.exe) - 자바홈\bin


(4)<fmt:message>
  • 번들 태그에서 정한 값을 가져온다

  1. <fmt:message key="messageKey" bundle="resourceBundle" var="varName"
    scope="{page|request|session|application}" />

         key : 읽어올 메시지의 key 값 기술
         bundle : setBundle 태그를 이용하여 로딩한 번들을 읽어올 때 사용
         var : 메시지를 저장할 변수명
         scope : 변수 공유범위 지정


      예)

  1. <fmt:message key="message" var="msg"/>

         message에 해당하는 값을 .properties 파일로부터 읽어와 msg 변수에 저장

     (예제)

① classes 폴더에 bundle 폴더 생성

         testBundle_ko.properties 파일 생성
         name=\uc0ad\ub791\ud574\uc694
         message=JSTL \ub108\ubb34 \uc88b\uc544


         testBundle.properties 파일 생성

         name=I love you.
         message=JSTL very good


② jstlEx7.jsp
  1. <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt"  %>
    <fmt:bundle basename="bundle.testBundle">
    <html>
    <head><title>JSTL fmt 예제 - bundle , message</title></head>
    <body>
    <fmt:message key="name"/>
    <p>
    <fmt:message key="message" var="msg"/>
    <c:out value="${msg}"/>
    </fmt:bundle>
    </body>
    </html>

(5) <fmt:setBundle>
  • 페이지 전체에서 사용할 수 있는 번들을 지정
  1. <fmt:setBundle basename="basename" var="varName" scope="{page|request|session|application}" />

         basename : properties 파일명
         var : 변수명
         scope : 변수 공유 범위


(6) <fmt:formatNumber>
  • 숫자 형식을 지정

  1. <fmt:formatNumber value="numericValue" type="{number|currency|percent}"
    pattern="customPattern" currencyCode="currencyCode" currencySymbol="currencySymbol" groupingUsed="{true|false}" maxIntegerDigits="maxIntegerDigits" minIntegerDigits="minIntegerDigits" maxFractionDigits="maxFractionDigits" minFrationDigits="minFractionDigits" var="varName" scope="{page|request|session|application}" />

        value : Number로 형식화될 수치
        type : 숫자, 통화,퍼센트
        pattern : 사용자가 지정한 패턴 형식 지정
        currencyCode : ISO 4217 통화 코드 지정
        currencySymbol : 통화기호 지정
        groupingUsed : 출력에 그룹 분리 기호를 포함할지 여부 지정
        maxIntegerDigits : 출력에서 integer 최대 자릿수 지정
        minIntegerDigits : 출력에서 integer 최소 자릿수 지정
        maxFractionDigits : 출력에서 소숫점 이하 최대 자릿수 지정
        minFractionDigits : 출력에서 소숫점 이하 최소 자릿수 지정
        var : 출력 결과 문자열을 담는 scope에 해당하는 변수명 지정
        scope : 변수의 공유범위 지정


(7) <fmt:parseNumber>
  • 문자열에서 수치로 파싱한다.
  1. <fmt:parseNumber value="numericValue" type="{number|currency|percent}" pattern="customPattern" parseLocale="parseLocale" integerOnly="{true|false}" var="varName" scope="{page|request|session|application}" />

      value : 수치지정
      type : 숫자, 통화,퍼센트
      pattern : 사용자가 지정한 패턴 형식 지정
      parseLocale : Locale 지정
      integerOnly : 주어진 값에서 integer 부분만 파싱할 지 여부 지정
      var : 변수명 지정
      scope : 변수 공유범위 지정


(8) <fmt:formatDate>

       + 날짜 형식을 표현할 때 사용


  1. <fmt:formatDate vaue="date" type="{time|date|both}" dateStyle="{default|short|medium|long|full}" timeStyle="{default|short|medium|long|full}" pattern="customPattern" timeZone="timeZone" var="varName" scope="{page|request|session|application}"/>

        value : Data와 time 지정
        type : 형식 지정
        dateStyle : 날짜 style 지정
        timeStyle : 시간 style 지정
        pattern : 사용자가 지정한 패턴 형식 지정
        timeZone : java.util.TimeZone 형식으로 된 시간에 나타날 타임 존 지정
        var : 변수명
        scope : 변수 공유범위


(9) <fmt:parseDate>
  • 문자열에서 날짜로 파싱할 때 사용
  1. <fmt:parseDate value="dateString" type="{time|date|both}" dateStyle="{default|short|medium|long|full}" timeStyle="{default|short|medium|long|full}" pattern="customPattern" timeZone="timeZone" parseLocale="parseLocale" var="varName" scope="{page|request|session|application}"/>

        value : Data와 time 지정
        type : 형식 지정
        dateStyle : 날짜 style 지정
        timeStyle : 시간 style 지정
        pattern : 사용자가 지정한 패턴 형식 지정
        timeZone : java.util.TimeZone 형식으로 된 시간에 나타날 타임 존 지정
        var : 변수명
        scope : 변수 공유범위


   예)

  1. <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <html>
    <head><title>JSTL fmt 예제 - formatNumber, formatDate</title></head>
    <body>
    number  : <fmt:formatNumber value="12345.678" type="number"/><br>
    currency: <fmt:formatNumber value="12345.678" type="currency" currencySymbol="₩"/><br>
    percent : <fmt:formatNumber value="12345.678" type="percent"/><br>
    pattern=".0" :<fmt:formatNumber value="12345.678" pattern=".0"/> <p>
    <c:set var="now" value="<%= new java.util.Date() %>" />
    <c:out value="${now}"/><br>
    date : <fmt:formatDate value="${now}" type="date" /> <br>
    time : <fmt:formatDate value="${now}" type="time" /> <br>
    both : <fmt:formatDate value="${now}" type="both" />
    </body>
    </html>

  1. number : 12,345.678
    currency: ₩12,345.68
    percent : 1,234,568%
    pattern=".0" :12345.7
    Mon Dec 29 10:03:27 KST 2008
    date : Dec 29, 2008
    time : 10:03:27 AM
    both : Dec 29, 2008 10:03:27 AM
(10) <fmt:setTimeZone>,<fmt:timezone>

    + 시간대 설정


  1. <fmt:setTimeZone value="timeZone" var="varName"
    scope="{page|request|session|application}"/>

      - value : 설정한 시간대 지정
      - var : 변수
      - scope : 변수 공유범위


   예)

  1. <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <html>
    <head><title>JSTL fmt 예제 - timeZone</title></head>
    <body>
    <c:set var="now" value="<%= new java.util.Date() %>" />
    Korea   KST  : <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/><br>
    UK   GMT  : <fmt:timeZone value="GMT">
                      <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/>
                   </fmt:timeZone>
    </body>
    </html>

4) JSTL sql

  • DataSource를 이용해서 SQL를 처리하는 작업 등에 사용
  1. <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

태그

     transaction  : 트랜젝션 구현
     query : executeQuery()와 같은 기능
     update " executeUpdate()와 같은 기능
     param : java.sql.PreparedStatement.setString()의 역할
     dateParam : java.sql.PreparedStatement.setTimestamp() 역할
     setDataSource : DataSource 지정


(1)<sql:setDataSource>
  • DataSource 지정
  1. <sql:setDataSource {dataSource="dataSource"  |url="jdbcUrl" driver="driverClassName" user="userName" password="password" } var="varName" scope="{page|request|session|application}"/>

     url : JDBC url
     dataSource : 컨텍스트에 JNDI설정 시 리소스 네임
     driver : JDBC driver
     user : 사용자
     password : 패스워드
     var : 변수
     scope : 변수의 공용범위


 예) 표준 드라이버 사용

  1. <sql:setDataSource url="jdbc:oracle:thin:@localhost:1521:orcl" driver="oracle.jdbc.driver.OracleDriver" user="kkk" password="1234" var="ds" scope="application" />

 예) 기존의 dataSource를 불러와 사용하는 경우

  1. <sql:setDataSource dataSource="jdbc/myoracle" var="ds" scope="application" />

  dataSource : server.xml에서 정의한 <Resource> 태그의 name 속성의 값이 들어간다.


  예) 컨텍스트에 JNDI가 설정되어 있는 겨우

  1. <sql:query var="rs" dataSource="jdbc/myoracle">

(2)  <sql:query>
  • sql 태그의 속성 또는 body에 정의된 SQL  쿼리 문장을 실

① 속성에 sql 쿼리 문장을 기술한 경우
  1. <sql:query sql="sqlQuery" var="varName" scope="{page|request|session|application}" dataSource="dataSource" maxRows="maxRows" startRow="startRow" />

② 속성에 sql 쿼리문장을 기술하고 쿼리의 파라미터가 body에 있는 경우
  1. <sql:query sql="sqlQuery" var="varName" scope="{page|request|session|application}" dataSource="dataSource" maxRows="maxRows" startRow="startRow" />
    <sql:param>태그들
    </sql:query>

③ body에 sql 쿼리 문장과 파라미터를 기술한 경우
  1. <sql:query  var="varName" scope="{page|request|session|application}" dataSource="dataSource" maxRows="maxRows" startRow="startRow" />
    SQL 쿼리 문장
    <sql:param>태그들
    </sql:query>

   sql : sql 쿼리 문장
   var : 쿼리의 결과 저장
   scope : 변수 공용범위
   dataSource : JNDI의 리소스 네임 또는 DriverManger를 위한 파라미터
   maxRows : 쿼리 결과에 포함될 최대 행의 수
   startRow : 쿼리 결과에 포함될 시작 행 번호


  예제)

  1. <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
    <html>
    <head><title>JSTL sql 예제 - query</title></head>
    <body>
    <sql:query var="rs"  dataSource="jdbc/myoracle">
        select * from member
    </sql:query>
    <table border="1">
      <tr><%--필드명  출력--%>
        <c:forEach var="columnName" items="${rs.columnNames}">
          <th><c:out value="${columnName}"/></th>
        </c:forEach>
      </tr>
      <c:forEach var="row" items="${rs.rowsByIndex}"><%-- 레코드의 수 만큼 반복한다.[][] --%>
      <tr>
        <c:forEach var="column" items="${row}" varStatus="i"><%-- 레코드의 필드수 만큼 반복한다.[] --%>
       <td>
           <c:if test="${column!=null}"> <%--해당 필드값이 null이 아니면--%>
                <c:out value="${column}"/>
           </c:if> <%--해당 필드값이 null이면--%>
           <c:if test="${column==null}">
                &nbsp;
           </c:if>
        </td>
        </c:forEach>
      </tr>
       </c:forEach>
    </table>
    </body>
    </html>

(3)<sql:dateParam>
  • 날짜 형식
  • java.sql.PreparedStatement.setTimestamp() 역할
  1. <sql:dateParam value="value" type="{timestamp|time|date}"}/>

         value : 파라미터 값
         type : 형식 설정


(4) <sql:param>
  • 문자열 형식
  • java.sql.PreparedStatement.setString()의 역할
  1.  <sql:param value="value"/>

(5) <sql:update>
  • sql 태그의 속성 또는 body에 정의된 sql 쿼리 문장을 실행
  •  executeUpdate()와 같은 기능
① 속성에 sql 쿼리 문장을 넣는 경우
  1. <sql:update sql="sqlUpdate" dataSource="dataSource" var="varName" scope="{page|request|session|application}"/>

② 속성에 쿼리 문장을 기술하고 쿼리의 파라미터가 body에 있는겨우
  1. <sql:update sql="sqlUpdate" dataSource="dataSource" var="varName" scope="{page|request|session|application}">
    <sql:param>태그들
    </sql:update>

③body에 sql 쿼리 문장과 파라미터들을 기술하는 경우
  1. <sql:update  dataSource="dataSource" var="varName" scope="{page|request|session|application}">
    sql 쿼리 문장
    <sql:param>태그들
    </sql:update>

    sql : sql 문장
    var : 쿼리 결과를 저장
    scope : 변수의 공유 범위
    dataSource : JNDI의 리소스 네임 또는 DriverManager를 위한 파라미터 네임


  예제)update

  1. <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
    <html>
    <head><title>JSTL sql 예제 - update, param</title></head>
    <body>
    <sql:update dataSource="jdbc/myoracle">
        update member set passwd=? where id= ?
        <sql:param value="${3456}"/>
        <sql:param value="${'abc'}"/>    
    </sql:update>
    <sql:query var="rs"  dataSource="jdbc/myoracle">
        select * from member
    </sql:query>
    <table border="1">
      <tr><%--필드명  출력--%>
        <c:forEach var="columnName" items="${rs.columnNames}">
          <th><c:out value="${columnName}"/></th>
        </c:forEach>
      </tr>
      <c:forEach var="row" items="${rs.rowsByIndex}"><%-- 레코드의 수 만큼 반복한다. --%>
      <tr>
        <c:forEach var="column" items="${row}" varStatus="i"><%-- 레코드의 필드수 만큼 반복한다. --%>
       <td>
           <c:if test="${column!=null}"> <%--해당 필드값이 null이 아니면--%>
                <c:out value="${column}"/>
           </c:if> <%--해당 필드값이 null이면--%>
           <c:if test="${column==null}">
                &nbsp;
           </c:if>
        </td>
        </c:forEach>
      </tr>
       </c:forEach>
    </table>
    </body>
    </html>

(6) <sql:transaction>
  • 트랜잭션을 구할 때 사용
  1. <sql:transaction dataSource="dataSource" isolation="isolationLevel">
    <sql:query> 태그
    <sql:update>태그
    .....
    </sql:transaction>

dataSource : JNDI의 리소스 네임 또는 DriverManager를 위한 파라미터 네임
   isolation : java.sql.Connection의 setTransactionIsolation()메소드 사용
                 "read_committed","read_uncommitted","repeatable_read","serializable" 중 하나를 사용


 (실습)

id,비밀번호,이름,등록일
폼에서 데이터 입력 후
jstl을 이용하여 DB에 데이터 입력 ,비밀번호 ‘3456’으로 변경하여 출력하는 프로그램 작성





5) JSTL functions

  • JSTL에서 제공하는 각종 함수를 사용해서 문자열이나 콜렉션들을 처리
  1. <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/js시/functions" %>
  • 태그(p692)

 (1)예

  1. <%@ page contentType = "text/html; charset=euc-kr" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    <html>
    <body>
      <c:set var="name" value="  Jsp 세계  "/>
      <c:set var="name" value="${fn:trim(name)}"/>
      <br/><c:out value="name: ${name}"/><br/><br/>
      <c:out value="length(name): ${fn:length(name)}"/><br/>
    </body>
    </html>

Posted by 1010