jstl 설정에서 무지하게 버벅거리다!
이와 같이 말이지요. 그래서 봤더니 taglib 설정 부분이 빠져 있더군요. 그래서 예전에 사용했던 방법으로 추가 했습니다.
이렇게 추가 했는데 오류가 나는 것입니다. lib에는 jstl.jar가 분명히 있었습니다. 무지 애먹다가 검색을 해 봤더니 standard.jar도 필요 했습니다. 또한 예전의 url도 변경되었더군요. 다음과 같이 변경되었더군요.
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
원문 : http://cafe.naver.com/yourhand.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=36
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 <HTML> <BODY> <c:choose> <%@page contentType="text/html;charset=euc-kr"%>
<!-- 1.core를 사용 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<HEAD>
<TITLE> jstl core예제 -if, choose, when, otherwise </TITLE>
</HEAD>
<c:set var="country" value="${'Korea'}"/>
<c:if test="${country != null}">
국가명 : <c:out value="${country}"/>
</c:if>
<p>
<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 <HTML> <BODY> <c:forTokens var="token" items="빨강색,주황색.노란색.초록색,파랑색,남색.보라색" delims=",."> <%@page contentType="text/html;charset=euc-kr"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<HEAD>
<TITLE> forTokens </TITLE>
</HEAD>
<h3>콤마와 점을 구분자로 사용</h3>
${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컨텍션풀을 환경설정
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
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++