1. custom tag library로 JSP 스펙에는 포함되지 않았지만 자바 진영에서 진행하는 태그 라이브러리. - 커스텀 태그(custom tag) : JSP에서 스크립트릿으로 작성해야할 동적 로직을 태그로 처리 - jstl.java.net에서 api를 다운로드 후 web application의 lib 폴더에 넣어 사용한다.
2. JSP에서 커스텀 태그를 사용하기 위해서는 taglib 지시자 태그 설정 필요 <%@ taglib prefix="접두어" uri="태그 라이브러리 구분자"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl.core"%> 사용 : <c:>
1. 변수 지원 - set : JSP에서 Attribute로 binding된 객체 처리 - remove : binding된 attribute 제거
2. 제어문 지원 - if : if문 - choose : 다중 조건 처리 - forEach : 반복문 처리
3. 출력지원 ① out 태그
- 태그형태의 문자열을 그대로 출력되도록 처리할 수 있다. - 속성 - value : 출력할 내용 - escapeXml : 태그 출력 여부 처리 true : 태그를 해석하지 않고 그대로 출력 false : 태그를 해석해서 출력 - default : value의 값이 null일 경우 출력할 기본 값
* WebContent 이름 : jstl/out.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!-- 이건 지정하면 이 페이지 안에서만 가능하다. --> <% request.setAttribute("text", "<b>내용입니다.</b>"); request.setAttribute("age", 20); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> JSTL - out태그<p> <c:out value="안녕하세요<br>반가워요"/><br><!-- out의 주 기능은 value값을 있는 그대로 찍어주는 것이다. --> <c:out value="${requestScope.text }"/><br> <c:out value="${requestScope.text }" escapeXml="false"/><!-- escapeXml="false"를 하면 태그화 해서 화면에 보여준다. --> <hr> null값 출력<br> 이름 : ${requestScope.name }<br> 이름 : <c:out value="${requestScope.name }" default="이름이 없습니다."></c:out><br> 나이 : <c:out value="${requestScope.age }">나이가 없네요</c:out> </body> </html>
- 결과
② if 태그
- 단일 조건 조건문 처리. -if문과 동일 - 다중 조건 처리에는 사용할 수 없다. (if-else) - 속성 - test : 조건 설정 - 구문 <c:if test="조건"> 조건 만족시 실행할 내용 </c:if>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> error.jsp<br> 오류가 발생했습니다.<br> 관리자에게 문의하세요.. admin@abc.com<br> <% request.setAttribute("error_message", "~~문제로 오류가 발생했습니다."); session.setAttribute("login_info", new CustomerDTO("a","1","홍길동","이메일",15)); %> <c:if test="${requestScope.error_message != null }"><!-- 에러 메세지가 있으면 아래 구문을 넣어주고 아니면 찍지마라 --> 오류메세지 : ${requestScope.error_message } </c:if><br> <c:if test="${not empty requestScope.error_message }"><!-- not 대신 ! 를 사용할 수도 있다. --> 오류메세지 : ${requestScope.error_message } </c:if> <hr> 메뉴 : 마이페이지 QnA 장바구니 <c:if test="${sessionScope.login_info.age>=19 }"> 성인입장페이지 </c:if><!-- 로그인한 사람의 나이가 19세 이상일 경우에만 성인입장페이지를 보여줘라. --> </body> </html>
* 로그인한 사람이 19세 이하일 경우 결과보기
* 로그인한 사람이 19세 이상일 경우 결과보기
③ choose 태그
- 다중 조건을 처리하는 태그 - if else, switch case - choose 태그는 조건들을 묶어주는 역할 - 하위태그 - when 태그 - 선택할 조건을 표시하기 위한 태그 - 속성 : test - 조건 설정 - otherwise - else의 역할(switch case의 default 역할) - 구문 <c:choose> <c:when test="조건1"> 조건1이 true일 경우 실핼할 내용 </c:when> <c:otherwise> when의 모든 조건이 만족 하지 않을 경우 실행할 내용 </c:otherwise> </c:choose>
- 특정 횟수만큼 반복을 처리 - 속성 - begin : 시작 값 - end : 종료 값 - step : 증감 값 - var : 변화되는 값을 저장할 변수 선언 <c:forEach begin="1" end="10" step="1" var="i"> ${i} - 안녕 </forEach>
<%@page import="java.util.HashMap"%> <%@page import="myjsp.dto.CustomerDTO"%> <%@page import="java.util.ArrayList"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> forEach를 이용한 collection반복<br> <% String [] names = {"이순신", "홍길동", "김유신", "강감찬"}; request.setAttribute("names", names);