JSTL(JSP Standard Tag Library)

서희찬·2023년 12월 11일
0

웹프로그래밍

목록 보기
29/30
post-thumbnail
post-custom-banner

JSTL(JSP Standard Tag Library)?

  • XML 태그를 통해 JSP 코드 관리하는 라이브러리
  • JSP의 소스 코드 가독성향상
  • Custom tag 지원 : 개발자가 직접 태그 작성 가능

특징

  • 태그로 간단한 프로그램 로직 사용(변수 선언, 반복문, 조건문 등)
  • 다른 JSP 페이지 호출(<c:redirect>, <c:import>)
  • 날짜, 시간, 숫자의 포맷
  • JSP 페이지 하나를 가지고 여러 가지 언어의 웹 페이지 생성
  • 데이터베이스로의 입력, 수정, 삭제, 조회
  • XML 문서의 처리
  • 문자열을 처리하는 함수 호출

문자열 처리 함수 호출을 제외한 나머지 기능들은 모두 커스텀 액션 형태로 제공

즉, 이는 뭐.. 미리 만들어둔걸 내가 taglib에 추가함으로서 쉽게 사용할 수 있는 라이브러리를 칭한다고 보면 된다.

JSTL을 구성하는 라이브러리들은
코어, 포맷팅, 데이터베이스...많이 있다.

JSTL의 사용예

  • <c:forEach> 커스텀 액션 : 자바의 for 문과 유사
<c:forEach begin= "1" end="10">
<H5>안녕하세요, 여러분!</H5>
</c:forEach>
  • <fmt:formatNumber> 커스텀 액션 : 수치 값을 포맷
    <fmt:formatNumber value="3.14159" pattern="#.00" />

JSTL에는 커스텀 액션만 있는 게 아니라 EL에서 사용할 수 있는 EL 함수도 있다.
${fn:toUpperCase("Hello")}

우리는 core 라이브러리를 집중적으로 보자.

core 라이브러리


이와 같은 다양한 태그가 존재한다.

하나씩 보자..

1️⃣ <c:set>커스텀 액션

변수 선언 및 초기값을 대입

  • 변수의 타입을 쓰지 않음, scope default PAGE
    c:set var="변수명" value="값" [scope="영역"] />
  • EL에서 사용 및 EL 식의 값 사용 가능
<c:set var="sum" value="${num1+num2}" />
${sum}

자바랑 비교해서, 변수의 타입을 기입하지 않아도 된다는 편리한점이 있다.

<%@page contentType="text/html; charset=euc-kr"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="num1" value="7" />
<c:set var="num2" value="9" />
<c:set var="result" value="${num1*num2}" />
<HTML>
  <HEAD><TITLE>곱셈 프로그램</TITLE></HEAD>
  <BODY>
  ${num1}과 ${num2}의 곱은? ${result}
  </BODY>
</HTML>

뭐.. 이렇게 사용할 수 있다.

그리고 scope를 request로 지정하면 아래와 같이 foward를 통해서 이동한 곳에서 도 해당set을 통해 만든것을 EL을 통해서 표현할 수 있다.

<%@page contentType="text/html; charset=euc-kr"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="CODE" value="80012" scope="request" />
<c:set var="NAME" value=
"온습도계" scope="request" />
<c:set var="PRICE" value="15000" scope="request" />
<jsp:forward page=
"ProductInfoView.jsp" />

아래 페이지로 foward하면

<%@page contentType="text/html; charset=euc-kr"%>
<HTML>
<HEAD><TITLE>상품 정보</TITLE></HEAD>
<BODY>
<H3>상품 정보</H3>
상품코드: ${CODE} <BR>
상품명: ${NAME} <BR>
단가: ${PRICE}원 <BR>
</BODY>
</HTML>

새로운 set없이 사용가능하다.

2️⃣ <c:remove>커스텀 액션

<c:set> 액션으로 선언한 변수 제거

자바 변수와 달리 인위적으로 삭제해야 할 번거로움이 있다.

<c:remove var="변수명" />
<c:remove var="num" />
<c:remove var="code" scope="request" />

이렇게 삭제 가능하다..

3️⃣ <c:out>커스텀 액션

데이터를 출력

  • 특수한 문자인 <, >, &, ‘, “를 포함하는 데이터를 출력할 때 편리
  • escapeXml을 이용하여 출력 내용의 HTML로 해석 여부 선택
    - true (생략가능) : HTML로 해석하지 않음
  • default 애트리뷰트 : 출력 값이 없을 시 출력할 데이터의 디폴트 값을 지정가능
  • EL 식의 결과를 출력할 때도 사용

<c:out value="출력내용" [escapeXml="false"] default="No Data" />
으로 사용 가능하며

<%@page contentType="text/html; charset=euc-kr"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<HTML>
<HEAD><TITLE>HTML 문법 설명</TITLE></HEAD>
<BODY>
<H3>FONT 태그에 대하여</H3>
<c:out value="<FONT size=7>커다란 글씨</FONT>는 다음과 같은 출력을 합니다." />
<BR><BR>
<c:out value="<FONT size=7>커다란 글씨</FONT>" escapeXml="false" />
</BODY>
</HTML>

을 실행하면

<c:out value="<FONT size=7>커다란 글씨</FONT>는 다음과 같은 출력을 합니다." />이와 같은 경우 html로 해석하지 않아 태그도 그대로 출력된다.

4️⃣ <c:if>커스텀 액션

<c:if test="true|fase" [value="변수명"] >
...
</c:if>

-- custom Action 
<c:if test="${num1 > num2}">
num1이 더 큽니다.
</c:if>

-- java 
<%
if (num1 > num2) {
System.out.println("num1이 더 큽니다.");
}
%>

5️⃣ <c:choose>커스텀 액션

자바 프로그램의 switch와 유사

  • <c:when>, <c:otherwise> 커스텀 액션과 함께 사용
    - 각각 case, default 절과 비슷한 역할
    - <c:when>커스텀 액션의 test 속성에 조건식을 EL 식 형태로 지정
<c:choose>
<c:when test="${num == 0}">
처음 뵙겠습니다. <BR>
</c:when>
<c:when test="${num == 1}">
반갑습니다. <BR>
</c:when>
<c:otherwise>
안녕하세요. <BR>
</c:otherwise>
</c:choose>

6️⃣ <c:forEach>커스텀 액션

반복 출력

<c:forEach var="변수명" begin="시작값" end="마지막값" step="num(Default = 1)">
…
</c:forEach

items="${배열명}" 사용하면 배열도 출력가능함

  • java.util.Collection 객체
  • java.util.Iterator 객체
  • java.util.Enumeration 객체
  • java.util.Map 객체
  • 콤마(,)로 구분된 항목들을 포함한 문자열

7️⃣ <c:forTokens> 커스텀 액션

문자열에 포함된 토큰을 분리하여 각각의 토큰에 대하여 반복 처리
자바의 for 문과 java.util.StringTokenizer클래스의 기능을 합친 것 같은 기능

var, items, delims 속성 사용

  • var : 분리된 토큰을 대입할 변수의 이름
  • items : 토큰을 포함하는 문자열
  • delims : 토큰 분리에 사용할 구획 문자
<c:forTokens var="pet" items="햄스터 이구아나 소라게" delims=" " >
${pet} <BR>
</c:forTokens>

토큰의 구획 문자로 한 종류 이상의 문자를 지정가능하다
elims="*/-"

8️⃣ <c:catch>커스텀 액션

자바의 try문과 유사

  • 자바의 try 블록에 해당하는 일만 수행
    <c:catch var="e">
    <c:set var="result" value="${param.NUM1 / param.NUM2}" />
    나눗셈의 결과는? ${result}
    </c:catch>
    <c:if test= "${e != null}" >
    에러 메시지: ${e.message}
    </c:if>

9️⃣ <c:redirect> 커스텀 액션

sendRedirect메서드로 지정된 URL로 이동 : <c:redirect url="URL" />

<c:param>으로 전달 파라메터 값 설정

<c:redirect url="Multiply.jsp" >
  <c:param name="NUM1" value="5" />
  <c:param name="NUM2" value="25" />
</c:redirect>

🔟 <c:import>커스텀 액션

JSP 뿐만 아니라 다른 종류의 웹 자원도 포함

지정된 URI 을 jsp페이지에 출력
c:import url="URL주소" [var="변수명"] [scope="영역"][charEncording="인코딩캐릭터셋"] />

  • url 속성 : 지정된 URL은 context path를 포함하지 않음
  • var 속성의 변수 : 결과값을 저장 가능
    - 미지정시 결과 출력
    - <jsp:include> 표준 액션은 무조건 출력
  • <c:param>으로 전달 파라메터 값 설정
<c:import url="crap.jsp" >
  <c:param name="product" value="TV" />
  <c:param name="ad_index" value="007" />
</c:import>

1️⃣1️⃣ <c:url>커스텀 액션

value 속성의 값으로 URL을 생성

지정된 URL은 context path를 포함하여 지정
<c:url var="변수명" value="URL주소" [scope="영역"] />

<c:url var=
"myUrl" value="/Add.jsp" >
<c:param name="NUM1" value="999" />
<c:param name="NUM2" value="1" />
</c:url>

변경하면 기존 JSP코드에 많은 변화를 가져올 수 있다.

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)
post-custom-banner

0개의 댓글