Java Web Programming 5일차.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
11 JSTL 사용하기.
제 12 장 표현 언어 학기 인터넷비즈니스과 강 환수 교수.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Power Java 제3장 이클립스 사용하기.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Internet Computing KUT Youn-Hee Han
제 08 장 자바 빈즈 학기 인터넷비즈니스과 강 환수 교수.
Ch.07-5 xml-rpc 사용하기 김상엽.
12 커스텀 액션.
컴퓨터 프로그래밍 기초 [Final] 기말고사
9 표준 액션.
4장. JSP의 구성요소와 스크립팅요소 제4장.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
forms 객체 입력상자 체크상자, 라디오 버튼 목록상자
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 9. 예외처리.
Lesson 6. 형변환.
24강. JSTL(JSP standard Tag Library)
5장. 참조 타입.
12 ███████████ 12.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
JSTL JSTL의 개념을 이해한다 JSTL의 분류 및 활용 범위를 익힌다 코어 태그 라이브러리의 활용 방법을 배운다
제 13 장 JSTL 학기 인터넷비즈니스과 강 환수 교수.
JSTL.
10장. 예외처리.
자바 5.0 프로그래밍.
11장. 1차원 배열.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
CHAP 12. 리소스와 보안.
C#.
13. 연산자 오버로딩.
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
7장 인터페이스와 추상 클래스.
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
인터넷응용프로그래밍 JavaScript(Intro).
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
제 14 장 커스텀 태그 학기 인터넷비즈니스과 강 환수 교수.
표현언어와 커스텀태그 표현 언어의 개념을 이해한다. JSP1.2 커스텀 태그 개발 방법을 익힌다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
JSTL Core 2015 Web Service Computing.
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Chapter 02. 자바 기본 문법.
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
객체기반 SW설계 팀활동지 4.
데이터 동적 할당 Collection class.
JSP Expression Language
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
에어 PHP 입문.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
13주 실습강의 학기, 소프트웨어 설계 및 실험(Ⅰ).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
JSP Programming with a Workbook
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
9 브라우저 객체 모델.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
 6장. SQL 쿼리.
Docker Study 6~7.
7 생성자 함수.
6 객체.
BoardGame 보드게임 따라가기.
20 XMLHttpRequest.
Presentation transcript:

Java Web Programming 5일차

Custom Tag란 사용자 정의 태그 useBean, param, setProperty 등의 미리 정의되어있는 태그를 액션 태그라고 한다. 커스텀 태그는 액션 태그의 한계성을 극복하여 사용자가 특성에 맞게 스스로 태그를 설계 이렇게 필요한 태그의 특성, 태그 해석의 방식, 그리고 태그들을 모아 라이브러리로 묶어 필요한 곳에 사용. 이를 Tag Library라고 한다. 자바 빈과 커스텀 태그 자바 빈 커스텀 태그 n    JSP 페이지의 내용을 조작할 수 없음 n    커스텀 태그에 비해 상대적으로 복잡한 처리과정 n    하나의 서블릿 클래스에 정의되어 다른 서블릿이나 JSP에 의해 사용됨 n    JSP 1.0 스펙 이상에서 사용가능 n    JSP 페이지의 내용을 조작 가능 n    상대적으로 빈보다 다루기 쉬움 n    많은 자체 작업을 정의할 수 있음 n    JSP1.1 스펙 이상에서 사용가능

Custom Tag library의 구성 태그 핸들러 클래스(Tag Handler Class) 태그 핸들러 클래스(Tag Handler Class)는 태그의 의미와 행동을 정의하는 클래스로, JSP 페이지에서 커스텀 태그를 사용할 때 어떤 일을 할 것인지 정의하고, 처리한다.   태그 라이브러리 서술파일(Tag Library Descriptor TLD) TLD는 태그 라이브러리를 설명해주는 파일로, XML의 표준형식을 따르는 XML 문서로서, XML Element 이름과 태그의 구현을 연결시키는 역할을 한다. 즉, JSP에서 태그가 호출되었을 때 그 태그를 처리하는 태그 핸들러로 연결시켜 주어 관련된 처리를 실행하게 한다. 태그를 사용하는 JSP 파일 커스텀 태그를 사용하는 JSP 파일로서, 태그를 사용하기 전에 taglib 지시자로 태그의 위치와 접두어를 지정해야 한다.

태그 핸들러 클래스(Tag Handler Class)

Tag 인터페이스 Tag 인터페이스는 JSP 페이지와 태그 핸들러 사이를 연결하는 기본적인 프로토콜과 메서드를 정의한다. 이것은 단순하고 기본적인 커스텀 태그를 구현하기 위해 만들어졌으며, 커스텀 태그의 Body 부분은 건드리지 않는 것을 원칙으로 한다. 즉, Tag 인터페이스는 태그에 Body 부분이 없거나, Body 부분을 그대로 나타내는 경우에 사용될 수 있다. Tag 인터페이스는 태그 핸들러의 주기를 정의하며, 태그가 시작하고 끝날 때 호출되는 메서드들을 정의하는데 사용한다.   BodyTag 인터페이스 BodyTag는 Tag 인터페이스를 상속한 인터페이스로 태그의 몸체를 다룰 수 있는 메서드를 제공한다. Tag 인터페이스가 제공하는 메서드 외에 부가적인 메서드를 제공합니다.

TagSupport 클래스 TagSupport는 Tag 인터페이스를 구현하는 클래스로, 새로운 태그 핸들러를 생성하는 기본이 되는 클래스입니다. Tag 인터페이스의 메서드 외에 setter,/getter 메서드 등, 태그를 다룰 때 유용하게 쓰일 수 있는 메서드들을 제공하고 있다.   BodyTagSupport 클래스 BodyTagSupport는 TagSupport 클래스를 상속 받고 BodyTag 인터페이스를 구현한 클래스. 이 클래스도 역시 상속 받고 구현된 것 이외에 getBodyContent 메서드등, 여러가지 유용한 메서드들을 가지고 있다. 많은 태그 핸들러들이 BodyTagSupport 클래스를 상속 받아서 몇 가지 소수의 메서드만 재정의해 쓰는 방식으로 만들어 진다. BodyContent 클래스 BodyContent는 JspWriter 클래스를 상속 받는 추상 클래스로서, 태그의 바디부분을 처리한 것을 캡슐화하고 있는 클래스. 즉, BodyContent의 내용은 Body 부분 처리의 결과로, 그것을 핸들러가 이용할 수 있다. 따라서 BodyContent는 그 내용을 스트링으로 변환하거나, 읽거나, 지울 수 있는 메서드를 가지고 있다.

<간단한 태그 핸들러> HelloTag. java package tags; import java. io <간단한 태그 핸들러> HelloTag.java package tags; import java.io.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class HelloTag implements Tag { PageContext pageContext; Tag parent; public int doStartTag() throws JspException{ try{ JspWriter out = pageContext.getOut(); out.write("Hello Tag!!!"); }catch(IOException e){} return SKIP_BODY; } public int doEndTag() throws JspException{ return EVAL_PAGE; }

public void release(){}   public void setPageContext(PageContext pg){     pageContext = pg;   }   public void setParent(Tag p){     parent = p;   }   public Tag getParent(){     return parent;   } }

태그 라이브러리 서술파일(Tag Library Descriptor TLD) noveltag.tld <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>noveljsp</short-name> <uri></uri> <description> novel jsp simple Hello Tag </description> <tag> <name>hello</name> <tag-class>tags.HelloTag</tag-class> <description>say Hello~ </description> </tag> </taglib>

JSP에서 기본적인 태그의 사용 < 기본적인 커스텀 태그를 사용하는JSP> hellotag.jsp <%@ page contentType="text/html; charset=euc-kr" %> <%@ taglib uri ="noveltag.tld" prefix = "noveljsp" %> <html><body> <h1><noveljsp:hello /></h1> </body></html>

속성을 가지는 태그 <속성 사용을 위한 태그 핸들러 > WelcomeTag.java package tags; import java.io.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class WelcomeTag extends TagSupport { private String name = ""; private String nation = ""; public int doStartTag() { try{ JspWriter out = pageContext.getOut(); out.print(name + " from " + nation + "<br>"); out.print("welcome to Korea!!!"); }catch(IOException e){} return SKIP_BODY; }

public void setName(String name){ this  public void setName(String name){     this.name = name;   }   public void setNation(String nation){     this.nation = nation;   } }

noveltag.tld <!—위에는 이미 정의된 부분 생략 --> <tag> <name>welcome</name> <tag-class>tags.WelcomeTag</tag-class> <description>say welcome~ </description> <attribute> <name>name</name> <required>true</required> </attribute> <attribute> <name>nation</name> <required>true</required> </attribute> </tag> <!-- WelcomeTag를 위해 추가된 부분 --> </taglib> welcometag.jsp <%@ page contentType="text/html; charset=euc-kr" %> <%@ taglib uri ="noveltag.tld" prefix = "noveljsp" %> <html><body> <h1><noveljsp:welcome name = "Alice" nation = "Wonderland"/></h1> </body></html>

Body를 가지는 태그 <prefix:tagname> body doStartTag 메서드의 리턴 값 SKIP_BODY : 바디의 내용 유무에 상관없이 무시 EVAL_BODY_INCLUDE : 바디 내용을 포함 처리 가능하게 함

FontMagic. java package tags; import java. io. ; import javax. servlet FontMagic.java package tags; import java.io.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class FontMagic extends TagSupport { String color = "black"; String size = "3"; public int doStartTag() { try{ JspWriter out = pageContext.getOut(); out.print("<font color="+color+" size = "+ size + ">"); }catch(IOException e){} return EVAL_BODY_INCLUDE; } public int doEndTag(){ try{ JspWriter out = pageContext.getOut(); out.print("</font></br>"); }catch(IOException e){} return EVAL_PAGE; } public void setColor(String color){ this.color = color; } public void setSize(String size){ this.size = size; } }

noveltag.tld <! ... ... 앞부분 생략 --> <tag> <name>fontmagic</name> <tag-class>tags.FontMagic</tag-class> <description>adjust font color and font size </description> <attribute> <name>color</name> <required>false</required> </attribute> <attribute> <name>size</name> <required>false</required> </attribute> </tag> <!-- 여기까지 FontMagic을 위해 추가된 부분 --> </taglib>

fontmagic.jsp <%@ page contentType="text/html; charset=euc-kr" %> <%@ taglib uri ="noveltag.tld" prefix = "noveljsp" %> <html><body> <noveljsp:fontmagic> 디폴트 값이군요. </noveljsp:fontmagic> <noveljsp:fontmagic color="blue" size="5"> 파란색에 5크기입니다. </noveljsp:fontmagic> <noveljsp:fontmagic color="red" size="7"> 빨강색에 7크기입니다. </noveljsp:fontmagic> </body></html>

표현 언어란 [표현 언어가 제공하는 기능] JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용 표현 언어(Expression Language)는 값을 표현하는 데 사용되는 새로운 스크립트 언어로서 JSP의 기본 문법을 보완하는 역할을 한다 [표현 언어가 제공하는 기능] JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용 집합 객체에 대한 접근 방법 제공 수치 연산, 관계 연산, 논리 연산자 제공 자바 클래스 메소드 호출 기능 제공 표현언어만의 기본 객체 제공 JSP 2.0 Programming

표현언어는 JSP의 스크립트 요소(스크립트릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용될 수 있으며, 표현식을 통해서 표현 언어의 표현 방법 Syntax ${expr} expr - 표현언어가 정의한 문법에 따라 값을 표현하는 식 Example <jsp:include page="/module/${skin.id}/header.jsp" flush="true" /> <b>${sessionScope.member.id}</b>님 환영합니다. 표현언어는 JSP의 스크립트 요소(스크립트릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용될 수 있으며, 표현식을 통해서 표현식보다 편리하게 값을 출력할 수 있다. JSP 2.0 Programming

표현 언어의 기본 객체 기본 객체 설명 pageContext JSP의 page 기본 객체와 동일하다. pageScope pageContext 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체. requestScope request 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체. sessionScope session 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체. applicationScope application 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체. param 요청 파라미터의 <파라미터이름, 값> 매핑을 저장한 Map 객체. 파라미터 값의 타입은 String 으로서, request.getParameter(이름)의 결과와 동일하다. paramValues 요청 파라미터의 <파라미터이름, 값배열> 매핑을 저장한 Map 객체. 값의 타입은 String[] 으로서, request.getParameterValues(이름)의 결과와 동일하다. header 요청 정보의 <헤더이름, 값> 매핑을 저장한 Map 객체. request.getHeader(이름)의 결과와 동일하다. headerValues 요청 정보의 <헤더이름, 값 배열> 매핑을 저장한 Map 객체. request.getHeaders(이름)의 결과와 동일하다. cookie <쿠키 이름, Cookie> 매핑을 저장한 Map 객체. request.getCookies()로 구한 Cookie 배열로부터 매핑을 생성한다. initParam 초기화 파라미터의 <이름, 값> 매핑을 저장한 Map 객체. application.getInitParameter(이름)의 결과와 동일하다. JSP 2.0 Programming

표현 언어의 기본 객체 사용 예 Example <%@ page contentType = "text/html; charset=euc-kr" %> <% request.setAttribute("name", "최범균"); %> <html> <head><title>EL Object</title></head> <body> 요청 URI: ${pageContext.request.requestURI} <br> request의 name 속성: ${requestScope.name} <br> code 파라미터: ${param.code} </body> </html> pageContext.getRequest() .getRequestURI() reqeust.getAttribute("name") request.getParameter("code") JSP 2.0 Programming

※ 표현언어에서 호출할 메소드는 static 메소드이어야 한다. 자바 메소드 호출하기: 클래스 작성 ※ 표현언어에서 호출할 메소드는 static 메소드이어야 한다. Example package madvirus.util; import java.util.Date; import java.text.SimpleDateFormat; public class DateUtil { private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); public static String format(Date date) { return formatter.format(date); } JSP 2.0 Programming

자바 메소드 호출하기: TLD 파일 작성 Example <?xml version="1.0" encoding="euc-kr" ?> <taglib ... version="2.0"> ... <function> <description>Date 객체 포맷팅</description> <name>dateFormat</name> <function-class> madvirus.util.DateUtil </function-class> <function-signature> java.lang.String format( java.util.Date ) </function-signature> </function> </taglib> EL에서 사용할 이름 메소드를 정의하고 있는 클래스의 이름 함수의 시그너쳐 JSP 2.0 Programming

자바 메소드 호출하기: web.xml에 TLD 내용 추가 Example <?xml version="1.0" encoding="euc-kr"?> <web-app ... version="2.4"> ... <taglib> <taglib-uri> /WEB-INF/tlds/el-functions.tld </taglib-uri> <taglib-location> </taglib-location> </taglib> </web-app> JSP 2.0 Programming

자바 메소드 호출하기: EL에서 메소드 호출 Example <%@ page contentType = "text/html; charset=euc-kr" %> <%@ page session="true" %> <%@ taglib prefix="elfunc" uri="/WEB-INF/tlds/el-functions.tld" %> <% java.util.Date today = new java.util.Date(); request.setAttribute("today", today); %> <html> <head><title>EL 함수 호출</title></head> <body> 오늘은 <b>${elfunc:dateFormat(today) }</b> 입니다. </body> </html> web.xml의 <taglib-uri> 태그에 정의한 이름 EL에서 메소드 호출 TLD의 <name> 태그에 정의한 이름 JSP 2.0 Programming

표현 언어의 주요 사용법 함수호출을 통한 값의 포매팅 액션 태그나 커스텀 태그의 값으로 사용 ${elfunc:dateFormat(date) } 액션 태그나 커스텀 태그의 값으로 사용 <jsp:include page="/layout/${layout.moduleName}.jsp" /> 기본 객체 영역에 저장된 값의 출력 ${requestScope.name} vs <%= request.getAttribute("name") %> JSP 2.0 Programming

표현 언어 비활성화(1): web.xml에 비활성화 옵션 Code <?xml version="1.0" encoding="euc-kr"?> <web-app ... version="2.4"> ... <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>true</el-ignored> </jsp-property-group> </jsp-config> </web-app> 지정한 패턴에 속하는 JSP는 표현 언어가 비활성화된다. JSP 2.0 Programming

JSTL이란? JSTL(JSP Standard Tag Library)은 JSP 페이지에서 논리적인 판단, 반복문의 처리, 데이터베이스 등의 처리를 하는 코드를 깔끔하게 작성하기 위해서 작성한 표준화된 커스텀 태그이다. <% if (list.size() > 0) { for (int i = 0 ; i < list.size() ; i++) { Data data = (Data) list.get(i); %> <%= data.getTitle() %> ... } } else { 데이터가 없습니다. JSTL을 사용함으로써 스크립트를 사용할 때의 복잡한 코드를 깔끔하게 작성할 수 있게 된다. <c:if test="!empty ${list}"> <c:foreach varName="data" list="${list}"> ${data.title} </c:foreach> </c:if> <c:if test="empty ${list}"> 데이터가 없습니다. </c> JSP 2.0 Programming

JSTL이 제공하는 태그의 종류 라이브러리 하위 기능 접두어 관련URI 코어 변수지원 흐름 제어 URL 처리 c XML http://java.sun.com/jsp/jstl/core XML XML 코어 XML 변환 x http://java.sun.com/jsp/jstl/xml 국제화 지역 메시지 형식 숫자 및 날짜 형식 fmt http://java.sun.com/jsp/jstl/fmt 데이터베이스 SQL sql http://java.sun.com/jsp/jstl/sql 함수 콜렉션 처리 String 처리 fn http://java.sun.com/jsp/jstl/functions JSP 2.0 Programming

코어 태그 기능분류 태그 설명 변수 지원 set JSP에서 사용될 변수를 설정한다. remove 설정한 변수를 제거한다. 흐름 제어 if 조건에 따라 내부 코드를 수행한다. choose 다중 조건을 처리할 때 사용된다. forEach 콜렉션이나 Map의 각 항목을 처리할 때 사용된다. forTokens 구분자로 분리된 각각의 토큰을 처리할 때 사용된다. URL 처리 import URL을 사용하여 다른 자원의 결과를 삽입한다. redirect 지정한 경로로 리다이렉트한다. url URL을 재작성한다. 기타 태그 catch 예외 처리에 사용된다. out JspWriter에 내용을 알맞게 처리한 후 출력한다. JSP 2.0 Programming

코어태그: 변수 지원 태그 - set, remove 변수 설정: 지정한 영역에 변수를 생성한다. Syntax <c:set var="varName" scope="session" value="someValue" /> <c:set var="varName" scope="request"> some Value </c:set> var - EL에서 사용될 변수명 scope - 변수값이 저장될 영역(page, request, session, application) value - 변수값 변수 제거 Syntax <c:remove var="varName" scope="request" /> JSP 2.0 Programming

코어태그: 변수 지원 태그 - 프로퍼티, 맵의 처리 Syntax <c:set target="${some}" property="propertyName" value="anyValue" /> some 객체가 자바빈일 경우: some.setPropertyName(anyvalue) some 객체가 맵(map)일 경우: some.put(propertyName, anyValue); target -<c:set>으로 지정한 변수 객체 property - 프로퍼티 이름 value - 새로 지정할 프로퍼티 값 JSP 2.0 Programming

코어 태그: 흐름제어 태그 - if Syntax <c:if test="조건"> ... </c:if> test의 조건이 true이면 몸체 내용을 처리한다. Example <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:if test="true"> 무조건 수행<br> </c:if> <c:if test="${param.name == 'bk'}"> name 파라미터의 값이 ${param.name} 입니다.<br> <c:if test="${18 < param.age}"> 당신의 나이는 18세 이상입니다. JSP 2.0 Programming

코어 태그: 흐름제어 태그 - choose Syntax <c:choose> <c:when test="조건1" > ... </c:when> <c:when test="조건2" > <c:otherwise> </c:otherwise> </c:choose> 조건1이 true일 때 실행 조건2가 true일 때 실행 앞의 <c:when>의 조건들이 모두 만족하지 않을 때에 실행된다. JSP 2.0 Programming

배열 및 Collection에 저장된 요소를 차례대로 처리한다. 코어 태그: 흐름제어 태그 - forEach 배열 및 Collection에 저장된 요소를 차례대로 처리한다. Syntax <c:forEach var="변수" items="아이템" [begin="시작번호"] [end="끝번호"]> ... ${변수} </c:forEach> var - EL에서 사용될 변수명 items - 배열, List, Iterator, Enumeration, Map 등의 Collection begin - items에 지정한 목록에서 값을 읽어올 인덱스의 시작값 end - item에 지정한 목록에서 값을 읽어올 인덱스의 끝값 item이 Map인 경우 변수에 저장되는 객체는 Map.Entry이다. 따라서, 변수값을 사용할 때는 ${변수.key}와 ${변수.value}를 사용해서 맵에 저장된 항목의 <키, 값> 매핑에 접근할 수 있다. JSP 2.0 Programming

지정한 URL에 연결하여 결과를 지정한 변수에 저장한다. 코어 태그: 흐름제어 태그 - import 지정한 URL에 연결하여 결과를 지정한 변수에 저장한다. Syntax <c:import url="URL" charEncoding="캐릭터인코딩" var="변수명" scope="범위" > <c:param name="파라미터이름" value="파라미터값" /> </c:import> url - 결과를 읽어올 URL charEncoding - 읽어온 결과를 저장할 때 사용할 캐릭터 인코딩 var - 읽어온 결과를 저장할 변수명 scope - 변수를 저장할 영역 <c:param> 태그는 url 속성에 지정한 사이트에 연결할 때 전송할 파라미터를 입력한다. Example <c:import url="http://media.daum.net/" charEncoding="euc-kr" var="daumNews" scope="request" > <c:param name="_top_G" value="news" /> </c:import> JSP 2.0 Programming

코어 태그: 흐름제어 태그 - url URL을 생성해서 변수에 저장한다. Syntax Example <c:url var="변수명" value="재작성할URL" scope="저장범위" > <c:param name="파라미터이름" value="파라미터값" /> </c:url> var - 생성한 URL이 저장될 변수명 value - 생성할 URL scope - 변수를 저장할 범위 지정. Example <c:url var="url1" value="../shopping.do" /> <c:url var="url2" value="/shopping.do" > <c:param name="Add" value="isdn-001" /> </c:url> <c:url var="url3" value="http://localhost:8080/jstl/setTag.jsp" /> JSP 2.0 Programming

코어 태그: 흐름제어 태그 - redirect 지정한 페이지로 리다이렉트한다. response.sendRedirect()와 비슷 Syntax <c:redirect url="리다이렉트할URL"> <c:param name="파라미터이름" value="파라미터값" /> </c:redirect> url - 리다이렉트 URL <c:param>은 리다이렉트할 페이지에 전달할 파라미터 지정 Example <c:redirect url="/ifTag.jsp"> <c:param name="name" value="bk" /> </c:redirect> JSP 2.0 Programming

코어 태그: 기타 태그 - out JspWriter에 데이터를 출력한다 Syntax <c:out value="value" escapeXml="{true|false}" default="defaultValue" /> value - JspWriter에 출력할 값을 나타낸다. 일반적으로 value 속성의 값은 String과 같은 문자열이다. 만약 value의 값이 java.io.Reader의 한 종류라면 out 태그는 Reader로부터 데이터를 읽어와 JspWriter에 값을 출력한다. escapeXml - 이 속성의 값이 true일 경우 아래 표와 같이 문자를 변경한다. 생략할 수 있으며, 생략할 경우 기본값은 true이다. default - value 속성에서 지정한 값이 존재하지 않을 때 사용될 값을 지정한다 [표] escapeXml 속성이 true일 경우 변환되는 문자 문자 변환된 형태 < > & & ' ' " " JSP 2.0 Programming

코어 태그: 기타 태그 - catch 태그 몸체에서 발생한 예외를 변수에 저장한다. Syntax <c:catch var="exName"> ... 예외가 발생할 수 있는 코드 </c:catch> ${exName} 사용 에러가 발생하면 에러가 exName 변수에 저장된다. var - 예외 객체를 저장할 변수명 JSP 2.0 Programming

국제화 태그 기능분류 태그 설명 로케일 지정 setLocale Locale을 지정한다. requestEncoding 요청 파라미터의 캐릭터 인코딩을 지정한다. 메시지 처리 bundle 사용할 번들을 지정한다. message 지역에 알맞은 메시지를 출력한다. setBundle 리소스 번들을 읽어와 특정 변수에 저장한다. 숫자 및 날짜 포맷팅 formatNumber 숫자를 포맷팅한다. formatDate Date 객체를 포맷팅한다. parseDate 문자열로 표시된 날짜를 분석해서 Date 객체로 변환 parseNumber 문자열로 표시된 날짜를 분석해서 숫자로 변환 setTimeZone 시간대 정보를 특정 변수에 저장한다. timeZone 시간대를 지정한다. JSP 2.0 Programming

국제화 태그: 로케일 지정 - setLocale, requestEncoding Syntax <fmt:setLocale value="로케일" scope="영향미치는범위" /> value - Locale을 지정한다. 두 글자로 된 언어 코드를 반드시 지정해주어야 하며, 두 글자로 된 국가 코드를 추가로 지정할 수 있다. scope - 지정한 Locale이 영향을 미치는 범위를 지정한다. requestEncoding: 요청 파라미터의 인코딩을 지정 Syntax <fmt:requestEncoding value="캐릭터인코딩" /> value - 캐릭터 인코딩 JSP 2.0 Programming

국제화 태그: 메시지 태그 - bundle, message Syntax <fmt:bundle basename="리소스번들" prefix="기본키접두어"> ... <fmt:message key="키값1" /> <fmt:message key="키값2" /> </fmt:bundle> basename - 리소스 번들의 이름 prefix - message 태그의 key 속성의 값 앞에 자동으로 붙게 될 문자열 key - 리소스 번들에 저장된 메시지 키 값 * bundle 태그의 몸체에 중첩되어 사용된다. JSP 2.0 Programming

국제화 태그: 메시지 태그 - setBundle, message Syntax <fmt:setBundle var="변수명" basename="리소스번들" /> ... <fmt:message bundle="${변수명}" key="키값" /> var - 리로스 번들을 저장할 변수명 basename - 리소스 번들의 이름 bundler - 참조할 리소스 번들 변수명 key - 리소스 번들에 저장된 메시지 키 값 * bundler 속성을 사용하면, message 태그가 bundle 태그의 몸체에 중첩될 필요가 없다. JSP 2.0 Programming

JSTL은 EL에서 사용할 수 있는 함수를 제공한다 Syntax ${fn:함수명(인자 목록)} [표] JSTL이 제공하는 주요 함수 함수 설명 length(obj) obj가 List와 같은 Collection인 경우 저장된 항목의 개수를 리턴하고, obj가 문자열일 경우 문자열의 길이를 리턴한다. toUpperCase(str) str을 대문자로 변환한다. toLowerCase(str) str을 소문자로 변환한다. substring(str, idx1, idx2) str.substring(idx1, idx2)의 결과를 리턴한다. idx2가 -1일 경우 str.substring(idx1)과 동일하다. trim(str) str 좌우의 공백문자를 제거한다. replace(str, src, dest) str에 있는 src를 dest로 변환한다. split(str1, str2) str2로 명시한 글자를 기준으로 str1을 분리해서 배열로 리턴한다. escapeXml(str) XML의 객체 참조에 해당하는 특수 문자를 처리한다. 예를 들어, '&'는 '&'로 변환한다. JSP 2.0 Programming