JSTL(JSP Standard Tag Library)
->커스텀태그(사용자가 임의로 만든 태그)
->사용자정의 태그
->sun사의 개발자들(jakarta프로젝트)
->불러다 사용한다.
JSTL은 자주사용하는 커스텀태그의 표준이라고 할 수 있다. 즉, JSTL은 많은 JSP어플리케이션을 간단한 태그로 캡슐화 한다.
아래의 문장은 우리가 자바빈 객체를 생성할 때 사용했던 액션태그이다. 액션태그는 일종의 시스템이 제공하는 커스텀태그라고 할 수 있다.
<jsp : useBean id="article" class="ch12.BoardDataBean">
JSTL이 나온 배경 -> el이 나온 배경과 동일하다.
모델1은 html+jsp코드로 구성되어있어 코드가 복잡하고 이해도가 떨어져 디버깅 시간이 오래걸린다.
스크립트와 html코드를 같이 혼용하여 사용하면 개발의 편리성을 제공하긴 하지만 코드의복잡성을 증가시키는 문제점이 있다.
JSTL을 사용하면 작업을 수행하는 코드들을 태그로 간략화할 수 있다.
JSTL을 사용하기 위한 환경설정
->환경설정을 위한 jstl.jar, standard.jar두개의 jar파일을 아래 사이트에서 다운로드받는다.
http://jakarta.apache.org/
=>http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi
jakarta-taglibs-s수ndard~.zip -> lib -> standard.jar, jstl.jar파일이 필수
->doc, javadoc -> jstl문법에 대한 API도움말 파일참조
->tld -> 개발되어진 샘플링 tld파일이 보관되어있다.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
jstl문법을 사용
1.jstl이라는 컨텍스트를 작성
=>C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\jstltest\WEB-INF
2.lib폴더에 다운로드받은 standard.jar, jstl.jar파일만 복사해주면 자동인식된다.
=>C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\jstltest\WEB-INF\lib
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
jstl패턴
1.core -> 변수,상수,el,제어문
변수선언, 삭제등 변수와 관련된 작업과 제어문 URL처리등에 사용된다.
prefix = c
2.fmt -> 날짜, 숫자, 양식에 맞게 출력
3.xml
4.sql -> DB의 자료를 웹에 출력
5.funcitons
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1.core http://java.sun.com/jsp/jstl/core
-> 변수,상수,el,제어문
변수선언, 삭제등 변수와 관련된 작업과 제어문 URL처리등에 사용된다.
prefix = c
taglib디렉티브의 prefix속성은 uri속성에 명시도니 값 대신에 해당 페이지에서 prefix속성값으로
명시된 값을 사용하겠다는 것이다.
jstl core기능별 분류
표현언어(EL)지원기능 : <c:catch> : body위치에서 실행되는 코드의 예외를 잡아내는역할을 담당
<c:out> : jsp의 표현식을 대체하는 것으로 가장 많이 사용
<c:remove>: jsp의 removeAttribute()와 같은 역할을 한다.
(page|request|session|application)범위의 변수(속성)을 제거한다.
<c:set> : jsp의 setAttribute()와 같은 역할을 한다.
(page|request|session|application)범위의 변수(속성)을 설정한다.
흐름 제어 기능 : <c:choose>: 자바의 switch문과 같지만 조건에 문자열 비교도 가능한다.
서브태그로 <c:when> <c:otherwise> 를 가지고 있다.
<c:when> : <choose>의 서브태그로 조건을 만족한 경우에 사용.
<c:otherwise>: <choose>의 서브태그로 <when>태그 다음에 표시되는 것으로 조건을 만족하지
못한 경우에 사용한다.
<c:forEach>: 객체 전체에 걸쳐 반복 실행을 할 때 사용한다.
<c:forTokens>: 자바의 StringTokenizer클래스를 사용하는 것과 같다.
<c:if> : 조건문을 사용할 때 쓴다. tset속성에는 조건판별식이 들어간다.
URL 관리 기능 : <c:import>: 웹 어플리케이션 내부의 자원과 http, ftp와 같은 외부에 있는 자원을 가져온다.
자원을 자유롭게 가공할 수도 있고, 편집도 가능하다.<c:import>(c:param>)
<c:redirect>: response.sendRedirect()를 대체하는 태그로 지정한 다른 페이지로 이동한다.
<c:redirect>(<c:param>)
<c:url> : 쿼리 파라미터로부터 URL을 생성한다. <c:url>(<c:param))
예제 1 <%@page contentType="text/html;charset=euc-kr"%> <!-- 1.core를 사용 --> <%@ 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> |
<c:forTokens>태그
자바의 StringTokenizer클래스를 사용하는 것과 같다. 문자열을 주어진 구분자(delimiter)로 분할
<c:forTokens>의 기본형
<c:forTokens items="condition" delims="delimiter" begin="begin" end="end" step="step"
var="varName" varStatus="varStatus"/>
예제 2
<%@page contentType="text/html;charset=euc-kr"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <HTML> <HEAD> <TITLE> forTokens </TITLE> </HEAD> <BODY> <h3>콤마와 점을 구분자로 사용</h3> <c:forTokens var="token" items="빨강색,주황색.노란색.초록색,파랑색,남색.보라색" delims=",."> ${token}<br> </c:forTokens> <hr> <c:forTokens var="car" items="Sprinter Trueno AE86, AE86, RX-7 Savanna FC3S,Lancer Evolution Ⅲ, RX-7 Efini FD3S" delims=","> 자동차 이름 : <c:out value="${car}"/><br> </c:forTokens> </BODY> </HTML> |
url태그의 value값에 유형
url1 = ../shopping.do
url2 = /jstltest/shopping.do?Add=isbn-001
url3 = http://localhost:8081/jstltest/setTag.jsp
1.http://~ 완전한 url경로를 써주는 형태(url3)
2.web Application내의 절대 경로 (url2)
3.현재경로를 기준 -> 상대경로를 기술 (url1)
<c:redirect>태그
->response, sendRedirect("indext.jsp")
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2.fmt http://java.sun.com/jsp/jstl/fmt
: 문자, 숫자, 날짜 -> 포맷형식을 지정
date -> SimpleDateFormat클래스 작업
JSTL fmt는 jstl 국제화, 지역화 태그로 가국어 문서를 처리할 때 유용하며 날짜와 숫자형식을 다룰때 사용된다.
fmt태그 라이브러리를 사용하려면 JSP페이지에 다음과 같이 <%@ taglib>디렉티브를 작성해야 한다.
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
taglib디렉티브의 prefix속성은 uri속성에 명시되니 값 대신 해당 페이지에서 prefix속성값으로 명시된 값을 사용하겠다는 것이다.
1)bundle
2)message
3)formatting tag (formatNumber, parseNumber, formatDate, parseDate)
JSTL fmt기능별 분류
locale 설정 : <fmt:setLocale>
다국어를 지원하는 페이지를 만들기 위해 사용할 경우 ResourceBundle로 불러오는 *.properties파일들과
연계되어서 사용한다.
기본형 : <fmt:setLocale value="locale" variant="variant" [scope={page|request|session|application}"]/>
<fmt:requestEncoding>
request.setCharacterEncoding()과 같은 역활을 한다.
기본형 : <fmt:requestEncoding value="charsetName"/>
메세지 처리 : <fmt:bundle>
properties확장자를 사용하는 자원파일을 읽어오는 역할을 한다.
기본형 : <fmt:bundle basename="basename" prefix="prefix">
body내용
</fmt:bundle>
basename=>properties파일명이 기술된다. properties파일은 보통 WEB-INF/classes폴더안에 위치하며 디렉토리의 깊이에
따라서 패키지 형식의 이름을 가진다.
testBundle.properties파일이 bundle폴더안에 있다면 basename의 속성값은 bundle.testBundle로 기술한다.
로케일(locale)이 ko라면 testBundle_ko.properties파일을 읽어 오게 되며,locale이 맞지 않는 경우에는
testBundle.properties처럼 언어 코드가 붙지 않은 파일을 읽어 온다.
파일내용을 한글로 직접 입력할 수 없기 때문에 한글에 해당하는 유니코드로 변환해서 입력해야 한다.
한글의 유니코드 변경은 native2ascii.exe를 이용한다.
<fmt:message>
번들 태그에서 정한 값들을 가져 온다.
기본형 : <fmt:message key="messageKey" bundle="resourceBundle" var="varName" scope="{page|request|...}"/>
key=> 읽어올 메세지의 key값이 기술된다.
bundle=> setBundle태그를 사용해서 로딩한 번들을 읽어올 때 사용한다.
<fmt:param>
<fmt:message>의 서브태그로 <fmt:message>태그에서 설정하지 않은 값을 채워준다.
<fmt:setBundle>
페이지 전체에서 사용할 수 있는 번들을 지정할 때 사용한다.
기본형 : <fmt:setBundle basename="basename" var="varName" scope\"{page|request..}"/>
숫자날짜형식: <fmt:formatNumber> : 숫자형식을 표현할때 사용.
type속성 : 숫자, 통화,퍼센트(number|currency|percent)중 어느것으로 표시할 것인지 지정
<fmt:formatDate> : 날짜 형식을 표현할때 사용.
<fmt:parseDate> : 문자열에서 날짜로 파싱할 때 사용한다.
<fmt:parseNumber> : 문자열에서 수치로 파싱한다.
<fmt:setTimeZone> : 특정 스코프의 시간대(타임존)를 설정한다.
<fmt:timeZone>
-------------------------------------------------------------------
숫자 날짜 형식 예제
-------------------------------------------------------------------
<%@ 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> formatNumber, formatDate </TITLE>
</HEAD>
<BODY>
<c:set var="now" value="<%=new java.util.Date()%>"/><BR>
<fmt:formatDate value="${now}" type="date" dateStyle="full"/><BR>
<fmt:formatDate value="${now}" type="date" dateStyle="short"/><BR>
<fmt:formatDate value="${now}" type="time"/> <br>
<fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/><br>
<fmt:formatDate value="${now}" pattern="z a h:mm"/><br>
<HR>
<c:set var="price" value="10000" />
숫자 : <fmt:formatNumber value="${price}" type="number" var="numberType"/><br>
통화 : <fmt:formatNumber value="${price}" type="currency" currencySymbol="원" /><br>
퍼센트 : <fmt:formatNumber value="${price}" type="percent" groupingUsed="true"/><br>
패턴 : "#,#00.0#" : <fmt:formatNumber value="${price}" pattern="#,#00.0#"/><br>
숫자 : ${numberType}
</BODY>
</HTML>
------------------------------------------------------------------------------
화면에 메세지를 출력
->jsp1.2 -> out.println(" ~ ");
->jsp2.0 -> 자주 사용이 되는메세지등을 파일로 만들어서 웹에서 불러와 사용할수 있다.
(*.properties) -> 리소스 번들 파일
영문판, 한글판 사이트 => 다국어언어 지원
기본-> 한글언어(도구\인터넷옵션-> 언어(한국어)
=======================================================================
resource파일을 작성->~.properties
1.저장장소->컨텍스트명(jstltest)\WEB-INF\classes에 따로 폴더를 생성-> 불러온다.
패키지명.리소스파일명
setLocale태그->한글이 된 메세지파일 불러온다.
파일명_ko.properties
파일명.properties라는 파일을 불러온다.
유니코드->영어권을 제외한 다른나라의 언어를 지원
해주기위해 만들어진 언어체계
key값 = 메세지(문자열)
key2 = 메세지(문자열2)
...
=================
native2ascii.exe파일로 변환
한글파일 -> 순수한글로 된파일 -> 유니코드로된 파일
message_ko.properties.src message_ko.properties
>native2ascii message_ko.properties.src message_ko.properties :유니코드변경
setLocale() -> en으로 변경하지 않는 이상 언어부분에 설정된 기본 언어로 출력된다.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3.xml http://java.sun.com/jsp/jstl/xml
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4.sql http://java.sun.com/jsp/jstl/sql
JSTL sql은 DataSource를 이용해서 sql을 처리하는 작업 등에 사용된다.
sql태그라이브러리를 사용하려면 jsp페이지에 다음과 같이 작성해야 한다.
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
=======================================================================
DataSource => DBCP컨텍션풀을 환경설정
http://jakarta.apache.org/
1.컨넥션풀에 대한 3개의 jar파일을 다운
->Tomcat5.5\common\lib에 복사
->컨텍스트명\WEB-INF\lib에 복사
->드라이버도 같이
2.tomcat서버가 인식 -> server.xml
1)resource태그를 이용해서 등록
2)context태그를 이용해서 등록
물리적인 경로를 같이 등록 -> 로그파일도 같이 등록
3.web.xml -> resource를 등록(현재 사용중인 컨텍스트에 있는 web.xml)
4.JSP에서 불러다 사용
======================================================================
JSTL sql을 기능별로 분류
DataSource 설정 : <sql:setDataSource>
: datasource를 지정한다.
url 속성 : JDBC url
dataSource : 컨텍스트에 JNDI설정시 리소스 네임
driver 속성 : JDBC driver
SQL : <sql:query>
: sql태그의 속성 또는 body에 정의된 sql쿼리문장을 실행한다.
: executeQuery()와 같은 기능을 한다.
<sql:dateParam>
: java.sql.PreparedStatement.setTimestamp()역할을 한다.
<sql:param>
: java.sql.PreparedStatement.setString()의 역할을 한다.
<sql:update>
: sql태그의 속성 또는 body에 정의된 sql쿼리문장을 실행한다.
: executeUpdate()와 같은 기능을 한다.
<sql:transaction>
: 트랜잭션을 구현할 때 사용한다.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5.funcitons http://java.sun.com/jsp/jstl/functions
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++