Link Search Menu Expand Document

Core Tag

Table of contents

  1. Core Tag
    1. Core Tag Basic
    2. Core Tag Library
  2. Variable Support Tag
    1. <c:set>
      1. 1. Create an EL Variable
      2. 2. Setting the Property Value of an Object
      3. Summary of attributes of c:set
    2. <c:remove>
      1. Summary of attributes of c:remove
  3. Flow Control Tag
    1. <c:if>
      1. Summary of attributes of c:if
    2. <c:choose> / <c:when> / <c:otherwise>
    3. <c:forEach>
      1. <c:forEach> with Map Object
      2. <c:forEach> with Array
      3. Summary of attributes of c:forEach
      4. varStatus property
      5. Example
    4. <c:forTokens>
  4. Handling URL Tag
    1. <c:url>
      1. Summary of attributes of c:url
    2. <c:redirect>
      1. Summary of attributes of c:redirect
  5. Other Core Tag
    1. <c:out>
      1. Summary of attributes of c:out
    2. <c:catch>

Core Tag

Core Tag Basic

변수설정이나 if-else와같은 논리 처리에 사용되는 스크립트 코드를 대체하는 태그를 제공

코어 태그 라이브러리를 사용하려면 아래 디렉티브를 추가해야지 사용할 수 있음

syntax

<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>

▸ prefix : JSP코드에서 코어 태그 라이브러리를 호출할 때 사용할 접두어

Core Tag Library

기능태그설명
변수지원setJSP에서 사용할 변수를 선언
 remove설정변수를 삭제
흐름제어if조건에 따라 흐름을 제어
 choose다중조건을 처리
 forEach컬렉션이나 Map의 각 항목을 처리할 때 사용
 forTokens구분자로 분리된 토큰을 처리
URL처리importURL에 해당되는 자원을 삽입
 redirect지정된 경로로 리다이렉트 실행
 urlURL을 재작성
기타태그catch익셉션처리
 outJspWriter에 내용을 출력

Variable Support Tag

<c:set>

EL 변수의 값이나 EL 변수의 프로퍼티 값을 지정할 때 사용

1. Create an EL Variable

1. EL변수를 생성할 때 사용함

scope속성에서 지정한 영역에 값을 저장함, 예를들어 pageContext.setAttrubute(변수명, 변수값, scope)를 호출해서 지정한 영역의 속성으로 설정

syntax

  1. <c:set var=”변수명” value=”값” [scope=”영역”] />

  2. <c:set var=”변수명” [scope=”영역”] />값</c:set>

▸ var : 값을 저장할 EL변수의 이름을 지정

▸ value : 변수의 값을 지정. 표현식, EL, 정적인 텍스트를 사용해서 값을 지정

▸ scope : 변수를 저장할 영역을 지정. page(기본값), request, session, application중 하나가 옴

<!--set 태그를 이용해서 el변수를 설정하는 다양한 예-->
<!--1. value 속성 사용의 예-->
<c:set var="name" value="가은" />
<c:set var="name" value="<%= m.getFirstName() %>" scope="request" />
<c:set var="name" value="${m.lastName} ${m.firstName}" />

<!--2. 태그의 몸체를 값으로 사용하는 예-->
<c:set var="name">가은</c:set>
<c:set var="name"><%= m.getLastName() %> <%= m.getFirstName() %></c:set>
<c:set var="name">${m.lastName} ${m.firstName}</c:set>

2. Setting the Property Value of an Object

2. 객체의 프로퍼티 값을 설정할 때

주의! : target대상이 EL변수인 경우 target속성의 값을 ${member}와 같이 EL을 이용해서 설정해야 함

syntax

값</c:set>

▸ target : 프로퍼티 값을 설정할 대상 객체를 지정(자바빈 객체나 Map). 표현식이나 EL변수를 사용할 수 있음

▸ property : 설정할 프로퍼티 이름을 지정. target이 자바빈 객체일경우 프로퍼티 이름에 해당하는 set메서드를 제공해야 함

▸ value : 프로퍼티의 값을 지정

<!--프로퍼티 값을 설정하기 위한 c:set 태그 사용의 예-->
<% Member member = new Member(); %>
<c:set target="<%= member%>" property="name" value="가은1" /> <!--member.setName("가은1")과 동일-->
<%= member.getName() %> <!--값 가은1 출력-->

<c:set var="m" value="<%= member %>" /> 
<c:set target ="%{m}" property="name" value="가은2" /> <!--member.setName("가은2")과 동일-->
${m.name} <!--값 가은2 출력-->

<%Map<String, String> prop = new HashMap<String, String>();%>
<c:set target="<%=prop%>" property="host" value="localhost"/> <!--prop.set("host", "localhost")와 동일-->
<%=prop.get("host")%> <!--값 localhost 출력-->

Note!

c:set 태그에서 value속성의 값을 null로 설정할 수 있음

이 경우, 변수이 값을 설정하는 c:set태그는 PageContext.removeAttribute를 이용해서 변수를 삭제함

프로퍼티의 값을 설정하는 c:set태그는 자바빈 객체인 경우 프로퍼티 값을 null로 처리하고 Map인 경우 프로퍼티 이름에 해당하는 키를 Map에서 삭제함

Summary of attributes of c:set

c:set 태그의 속성 설명요약

속성표현식/EL타입설명
var사용불가StringEL 변수 이름
value사용가능Object변수에 할당할 값
scope사용불가String변수를 생성할 영역, 기본값은 page
target사용가능Object프로퍼티 값을 설정할 객체 지정
property사용가능String프로퍼티 이름

<c:remove>

set 태그로 지정한 변수를 삭제할 때 사용

▸ var속성과 scope 속성은 set태그의 두 속성과 동일한 의미를 갖음

▸ 주의할 점은 삭제할 변수의 scope를 지정하지 않으면 동일한 이름으로 저장된 모든 영역의 변수를 삭제함

→ 따라서 서로 다른 영역에 동일한 이름을 갖는 변수가 존재하고 특정 영역에 속한 변수만 제거하고 싶다면 scope속성으로 명확하게 영역을 지정해줘야 함

syntax

<c:remove var=”varName” [scope=”영역”] />

Summary of attributes of c:remove

c:remove 태그의 속성 설명요약

속성표현식/EL타입설명
var사용불가String삭제할 EL 변수 이름
scope사용불가String삭제할 변수가 포함된 영역

Flow Control Tag

코드의 복잡함을 없애기 위해 존재하는 흐름제어 태그는 if, choose, forEach, forTokens가 있음

<c:if>

자바의 if블록과 비슷한 기능을 제공

if-else블럭과 같은 효과를 낼 순 없지만 쉽게 대체하기 때문에 많이 사용

syntax

<c:if test=”조건” [var=”testResult”]/>

</c:if>

${testResult}

var : 계산 결과를 EL변수에 저장할 수 있음

test 속성으로 올 수 있는것들 : EL또는 정적 문자열

<c:if test="true">
    <p>항상 true</p> 
</c:if>

<c:if test="some txt">
    <p>항상 false</p> 
</c:if>

<c:if test="${expr}"> EL의 결과값이 true인 경우 몸체 내용 실행 </c:if>

<c:if test="<%= expr %>"> 표현식의 결과 값이 true인 경우 몸체 내용 실행</c:if>

Summary of attributes of c:if

c:if 태그의 속성 설명요약

속성표현식/EL타입설명
test사용가능Boolean검사 조건
var사용불가String검사 조건의 계산 결과값을 저장할 EL변수
scope사용불가String삭제할 변수가 포함된 영역

<c:choose> / <c:when> / <c:otherwise>

  • <c:choose> : 자바의 switch구문과 if-else블록을 혼합한 형태로서 다수의 조건문을 하나의 블록에서 수행할 때 사용

  • <c:when> : test속성이 true일 때 내부 블록을 수행, 첫번째 true만 수행하고 나머지는 실행되지 않음

  • <c:otherwise> : test속성이 모두 false라면 c:otherwise가 실행됨, c:otherwise 태그는 필수는 아니고 필요한 경우에만 추가함

예제

<ul>
    <c:choose>
        <c:when test="${param.id == 'sohyang'}">
            <li>아이디는 ${param.id} 입니다 (JSTL / EL)</li> 
        </c:when>
        <c:when test="${param.age > 18}">
            <li>나이는 성인, ${param.age} 입니다 (JSTL / EL)</li> 
        </c:when>
        <c:otherwise>
            <li>당신의 아이디와 나이에 대한 정보가 없습니다</li>
        </c:otherwise>
    </c:choose>
</ul>

<c:forEach>

배열, Collection 또는 Map에 저장되어 있는 값들을 순차적으로 처리할 때 사용

▸ for나 do-while을 대신해서 사용할 수 있음

▸ items 속성에는 Map, 배열, Collection이 올 수 있음

▸ 배열의 경우는 객체의 배열 뿐만 아니라 기본 데이터 타입의 배열에 댕해서도 알맞게 처리를 함

→ 기본 데이터 타입은 Integer나 Double과 같은 래퍼 클래스를 사용하여 처리

→ begin, end, step 속성을 사용해서 조건을 변경할 수 있음

syntax

${변수사용}

<c:forEach> with Map Object

Map 사용하기

<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	Map<String, Object> map = new HashMap<>();
	map.put("id", "sohyang");
	map.put("pw", "12345");
	map.put("name", "소향");
	map.put("addr", "경기 성남");
%>
<c:set var="data" value="<%= map %>"/>
...

<h3>Collection(Map) 계열</h3>
<c:forEach var="i" items="${data}">
    ${i.key} = ${i.value} <br>
</c:forEach>

<c:forEach> with Array

Array 사용하기 : 기본

<h3>Array</h3>
<c:set var="arr" value="<%= new int[]{1,2,3,4,5} %>"/>
<c:forEach var="i" items="${arr}">
    ${i}, 
</c:forEach>

Array 사용하기 : begin, end

<h3>1~100까지의 홀수의 합</h3>
<c:forEach var="i" begin="1" end="100" step="2">
    <c:set var="sum" value="${sum + i}"/>
</c:forEach>
<p>1~100까지 홀수의 합 = ${sum}</p>

Array 사용하기 : varStatus

<h3>Array</h3>
<c:set var="arr" value="<%= new int[]{1,2,3,4,5} %>"/>
<c:forEach var="i" items="${arr}" begin="2" end="4" varStatus="status">
    ${status.index} - ${status.count} - [${i}] <br>
</c:forEach>

Summary of attributes of c:forEach

c:forEach 태그 설명 요약

속성표현식/EL타입설명
var사용불가String몸체에서 사용할 EL변수 이름
items사용가능Collection, Iterator, Enumeration, Map, 배열반복처리할 데이터
varStatus사용불가String루프 상태를 저장할 EL변수 이름
begin사용가능int시작 인덱스 값
end사용가능int끝 인덱스 값
step사용가능int인덱스 증분 값

varStatus property

루프 정보를 담는 객체를 저장할 변수 명을 값으로 갖음

c:forEach 태그 몸체에서는 varStatus 속성에 명시한 변수를 이용해서 현재 처리중인 인덱스, begin 속성값, end 속성값 등을 구할 수 있음

  • index : 루프 실행에서 현재 인덱스

  • count : 루프 실행 횟수

  • begin : begin 속성 값

  • end : end 속성값

  • step : step 속성 값

  • first : 현재 실행이 첫번 째 실행인 경우 true

  • last : 현재 실행이 루프의 마지막 실행인 경우 true

  • current : 컬렉션 중 현재 루프에서 사용할 객체

Example

구구단 출력하기

<h3>구구단 출력하기</h3>
<c:forEach var="i" begin="2" end="9" step="1">
    <p>구구단 ${i}단 출력</p>
    <c:forEach var="j" begin="2" end="9" step="1">
    <ul>
        <li>
            ${i} * ${j} = ${i*j}
        </li>
    </ul>
    </c:forEach>
</c:forEach>

<c:forTokens>

items 속성으로 전달 받은 문자열을 구분자를 이용해서 나누고, 구분한 각 문자열을 var 속성에 명시한 변수에 저장함

▸ java.util.StringTokenizer 클래스와 같은 기능을 제공하는 태그

▸ forEach 태그와 동일하게 begin, end, step, varStatus 속성을 제공

▸ items의 속성값이 String이라는 것을 제외하면, 나머지 태그의 속성은 c:ForEach태그의 속성과 동일함

syntax

${value}
<h3>forTokens - 컴마(,)와 점(.)을 구분자로 사용</h3>
<c:forTokens var="value" items="빨,주,노,초.파,남.보" delims=",.">
    ${value}
</c:forTokens>


Handling URL Tag

url 생성 (c:url) 태그와, 리다이렉트 처리(c:redirect)태그가 존재함

<c:url>

URL을 생성해주는 기능

▸ var 속성을 지정하지 않으면 현재 위치에 생성한 URL을 출력, 지정하면 해당 변수에 생성한 URL을 저장

▸ param태그를 이용해서 파라미터를 URL에 추가할 수 있음

▸ value 속성은 절대URL(http://…)와 상대URL(/view…)로 지정함

syntax

<c:url value=”URL” [var=”varName” scope=”영역”]>

</c:url>

<c:url value="http://search.daum.net/search" var="searchUrl">
	<c:param name="w" value="blog" />
	<c:param name="q" value="공원" />
</c:url>

<ul>
	<li>${searchUrl}</li> <!--http://search.daum.net/search?w=blog&q=공원-->
	<li><c:url value="jsp11_01_if.jsp" /></li><!--/chap12/"jsp11_01_if.jsp-->
	<li><c:url value="./jsp11_01_if.jsp" /></li><!--"./jsp11_01_if.jsp-->
</ul>

Summary of attributes of c:url

c:url 태그의 속성 설명요약

속성표현식/EL타입설명
value사용 가능String읽어올 URL
var사용불가String읽어온 결과를 저장할 변수 이름
scope사용 불가String변수를 저장할 영역

<c:redirect>

response.sendRedirect()처럼 지정한 페이지로 리다이렉트 시켜주는 기능을 제공

▸ url속성 값이 슬래시로 시작할 경우 리다이렉트 URL에 컨텍스트 경로가 추가됨 (/a.jsp = chap12/a.jsp)

▸ 다른 컨텍스트 경로에 포함된 URL로 리다이렉트 하고 싶다면 context 속성에 다른 컨텍스트의 경로를 적어주면 됨 (context=”/chap15”)

▸ redirect 태그를 실행하면 그 이후 코드는 실행되지 않음

▸ param 태그를 이용해서 파라미터를 설정할 수 있음

syntax

<c:redirect value=”URL” [context=”컨텍스트경로”]>

</c:redirect>

<c:redirect url="http://www.google.com" />

Summary of attributes of c:redirect

c:redirect태그의 속성 설명요약

속성표현식/EL타입설명
url사용가능String리다이렉트할 URL
context사용가능String컨텍스트 경로

Other Core Tag

<c:out>

JspWriter에 데이터를 출력할 때 사용되는 태그

syntax

<c:out value=”value” [escapeXml=”(truefalse)”] [default=”기본값”] />
<c:out value=”value” [escapeXml=”(truefalse)”] > 기본값 </c:out>

▸ value : JspWriter에 출력할 값을 지정, 일반적으로 value의 속성타입은 String

▸ escapeXML : 이 속성값이 true일 경우 특수문자를 유니코드로 변경, 생략 가능, 기본값은 True

▸ default : value속성에 값을 지정하지 않았을 경우 default에 지정한 값이 출력

<%
    FileReader reader = null;
    try{
        String path = request.getParameter("path");
        reader = new FileReader(getServletContext().getRealPath(path));
    }
%>
...

<c:out value="<%=reader%>" escapeXml="true"%/>  <!--그 파일의 모든 코드를 가져옴-->

Summary of attributes of c:out

c:out 태그의 속성 설명요약

속성표현식/EL타입설명
value사용가능Object출력할 값
escapeXml사용가능boolean특수 문자를 변환할지의 여부
default사용가능Objectvalue의 결과값이 null인 경우 출력할 값

<c:catch>

의 형태로 exception이 발생하면 해당 익셉션 객체를 exName에 저장하는 태그

그 이후 exName객체가 있을 경우에는 익셉션 처리를 할 수가 있음

syntax

익셉션이 발생할 수 있는 코드

${exName} 사용

<h3>c:catch</h3>
<c:catch var="e">
    name 파라미터의 값 = <%= request.getParameter("name") %> <br>
    <%
        if(request.getParameter("name").equals("test")){
    %>
            ${param.name}은 test입니다 <br>
    <%		
        }
    %>
</c:catch>
<c:if test="${e!=null}">
    익셉션이 발생했습니다<br>
    ${e}
</c:if>


이 웹사이트는 jekyll로 제작되었습니다. Patrick Marsceill, Distributed by an MIT license.