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 처리등에 사용
- <%@ taglib %> 디렉티브
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
p649
*** 태그
(1) <c:set>
- JSP의 setAttribute와 같은 역할
- 변수 설정
- <c:set var="varName" value="value" target="targetObjectName" property="propertyName" scope="{page|request|session|application}"/>
- 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의 표현식을 대체
- 화면에 해당 변수값을 출력
- <c:out var="varName" default="defaultValue" escapeXml="{true|false}"/>
var : 변수명
default : 기본값
escapeXml : true로 설정시(기본값) < > & ‘ “ 문자들을 각각 <>&'"로 출력
예1) <c:out value="${abc}"/> 변수 abc 값을 출력
(3) <c:remove>태그
- JSP의 removeAttribute()와 같은 역할을 한다.
- <c:remove var="varName" scope="{page|request|session|application}"/>
var: 변수명
scope : 변수의 공유 범위
예1) <c:remove var="abc"/> 변수abc의 값을 제거
- <%@ 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> - 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위치에서 실행되는 코드의 예외를 잡아내는 역할
- <c:catch var="errMag"/>
var : 에러가 발생하면 변수에 에러메세지가 들어간다
(5) <c:if>
- 조건문
- <c:if test="condition" var="varName" scope="{page|request|session|application}"/>
test : 조건 판별식
var : 변수명
scope : 변수의 공유범위
예)
- <c:if test="${country=='korea'}">
This customer is based in korea.
</c:if>
country 변수값이 'korea'이면 밑의 문장 출력
(6) <c:choose>(<c:when>,<c:otherwise>)태그
- switch문과 비슷, 조건에서 문자열 비교가 가능
- <c:choose>
<c:when test="조건>body 내용</c:when>
<c:otherwise>body의 내용</c:otherwise>
</c:choose>
예)
- <%@ 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>
- 객체 전체에 걸쳐 반복 실행할 때 사용
- <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 출력
- <%@ 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까지 숫자 중에서 짝수 만 출력
- <%@ 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>
** 객체에서 반복하여 값을 출력
- <c:forEach var="customer" items = "${customers}">
Customer : <c:out value="${customer}"/>
</c:forEach>
*** 예
- <%@ 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클래스를 사용하는 것
- <c:forTokens items="condition" delims="delimiter" begin="begin" end="end" step="step" var="varName" varStatus="varStatus"/>
items : 객체명
delims : 구분자
begin : 시작값
end : 마지막 값
step : 증가값
var : 변수명
varStatus : 변수 상태
*** 예
- <%@ 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, - RX-7 Savanna FC3S,
- Lancer Evolution III,
- RX-7 Efini FD3S" delims=",">
- 자동차 이름: <c:out value="${car}"/><br>
</c:forTokens>
</body>
</html>
(9) <c:import>
- 자원 import
- <c:import url="url" var="varName" scope="{page|request|session|application}" varReader="varReader" charEncoding="charEncoding"/>
url : 읽어올 url
var : 변수명
scope : 변수의 공유 범위
varReader : 리소스의 내용을 Reader 객체로 읽어올 때 사용
charEncoding : 읽어온 데이터의 캐릭터 셋지정
예)
- <%@ 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
- <%@ 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()를 대체하는 태그
- <c:redirect url="url"/>
url : 이동할 URL
(11) <c:url>
- 쿼리 파라미터로부터 URL 생성
- <c:url var="varName" value="value" scope="{page|request|session|application}"/>
예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 변환등의 작업
- 디렉티브 작성
- <%@ taglib prefix="x" uri="http://java.sun.com/jsp/js시/xml" %>
- 태그 : p665
3) JSTL fmt
- JSTL 국제화, 지역화 태그로 다국어 문서를 처리할 때 유용
- 날짜와 숫자 형식을 다룰 때 사용
- 디렉티브 작성
- <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
- 태그 p667
(1) <fmt:setLocale>태그
- 다국어 지원페이지를 만들 때 사용
- ResourceBundle로 불러오는 *.properties 파일들과 연계하여 사용
- <fmt:setLocale value="locale" variant="variant" [scope="{page|request|session|application}"]/>
value : 두 글자로 된 언어 코드를 반드시 지정
한글의 경우 ko_kr
variant : 브라우저 스펙 기술
scope : 변수의 공유 범우;
예)
- <fmt:setLocale value="ko" />
(2)<fmt:requestEncoding>
- request.setCharcterEncoding()
- <fmt:requestEncoding value="charsetName"/>
value : 인코딩 값
예)
- <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 확장자를 이용하여 자원 파일을 읽어오는 역할
- <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>
- 번들 태그에서 정한 값을 가져온다
- <fmt:message key="messageKey" bundle="resourceBundle" var="varName"
scope="{page|request|session|application}" />
key : 읽어올 메시지의 key 값 기술
bundle : setBundle 태그를 이용하여 로딩한 번들을 읽어올 때 사용
var : 메시지를 저장할 변수명
scope : 변수 공유범위 지정
예)
- <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
- <%@ 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>
- 페이지 전체에서 사용할 수 있는 번들을 지정
- <fmt:setBundle basename="basename" var="varName" scope="{page|request|session|application}" />
basename : properties 파일명
var : 변수명
scope : 변수 공유 범위
(6) <fmt:formatNumber>
- 숫자 형식을 지정
- <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>
- 문자열에서 수치로 파싱한다.
- <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>
+ 날짜 형식을 표현할 때 사용
- <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>
- 문자열에서 날짜로 파싱할 때 사용
- <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 : 변수 공유범위
예)
- <%@ 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>
- 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>
+ 시간대 설정
- <fmt:setTimeZone value="timeZone" var="varName"
scope="{page|request|session|application}"/>
- value : 설정한 시간대 지정
- var : 변수
- scope : 변수 공유범위
예)
- <%@ 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를 처리하는 작업 등에 사용
- <%@ 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 지정
- <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 : 변수의 공용범위
예) 표준 드라이버 사용
- <sql:setDataSource url="jdbc:oracle:thin:@localhost:1521:orcl" driver="oracle.jdbc.driver.OracleDriver" user="kkk" password="1234" var="ds" scope="application" />
예) 기존의 dataSource를 불러와 사용하는 경우
- <sql:setDataSource dataSource="jdbc/myoracle" var="ds" scope="application" />
dataSource : server.xml에서 정의한 <Resource> 태그의 name 속성의 값이 들어간다.
예) 컨텍스트에 JNDI가 설정되어 있는 겨우
- <sql:query var="rs" dataSource="jdbc/myoracle">
(2) <sql:query>
- sql 태그의 속성 또는 body에 정의된 SQL 쿼리 문장을 실
① 속성에 sql 쿼리 문장을 기술한 경우
- <sql:query sql="sqlQuery" var="varName" scope="{page|request|session|application}" dataSource="dataSource" maxRows="maxRows" startRow="startRow" />
② 속성에 sql 쿼리문장을 기술하고 쿼리의 파라미터가 body에 있는 경우
- <sql:query sql="sqlQuery" var="varName" scope="{page|request|session|application}" dataSource="dataSource" maxRows="maxRows" startRow="startRow" />
<sql:param>태그들
</sql:query>
③ body에 sql 쿼리 문장과 파라미터를 기술한 경우
- <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 : 쿼리 결과에 포함될 시작 행 번호
예제)
- <%@ 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}">
</c:if>
</td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
(3)<sql:dateParam>
- 날짜 형식
- java.sql.PreparedStatement.setTimestamp() 역할
- <sql:dateParam value="value" type="{timestamp|time|date}"}/>
value : 파라미터 값
type : 형식 설정
(4) <sql:param>
- 문자열 형식
- java.sql.PreparedStatement.setString()의 역할
- <sql:param value="value"/>
(5) <sql:update>
- sql 태그의 속성 또는 body에 정의된 sql 쿼리 문장을 실행
- executeUpdate()와 같은 기능
① 속성에 sql 쿼리 문장을 넣는 경우
- <sql:update sql="sqlUpdate" dataSource="dataSource" var="varName" scope="{page|request|session|application}"/>
② 속성에 쿼리 문장을 기술하고 쿼리의 파라미터가 body에 있는겨우
- <sql:update sql="sqlUpdate" dataSource="dataSource" var="varName" scope="{page|request|session|application}">
<sql:param>태그들
</sql:update>
③body에 sql 쿼리 문장과 파라미터들을 기술하는 경우
- <sql:update dataSource="dataSource" var="varName" scope="{page|request|session|application}">
sql 쿼리 문장
<sql:param>태그들
</sql:update>
sql : sql 문장
var : 쿼리 결과를 저장
scope : 변수의 공유 범위
dataSource : JNDI의 리소스 네임 또는 DriverManager를 위한 파라미터 네임
예제)update
- <%@ 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}">
</c:if>
</td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
(6) <sql:transaction>
- 트랜잭션을 구할 때 사용
- <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에서 제공하는 각종 함수를 사용해서 문자열이나 콜렉션들을 처리
- <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/js시/functions" %>
- 태그(p692)
(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>