포스트

Day74 Java프로그래밍 기초(JSTL)

JSTL의 개념

1. JSTL의 정의

  • JSTL(JavaServer Pages Standard Tag Library)은 Java 웹 애플리케이션에서 사용되는 태그 라이브러리라고 한다.
  • JSP(JavaServer Pages) 페이지에서 반복적인 작업이나 조건문, XML 처리, 국제화, 데이터베이스 접근 등을 쉽게 구현할 수 있도록 표준화된 태그를 제공한다고 한다.
  • JSP 페이지에서 자바 코드를 직접 삽입하는 것 대신, 태그를 사용하여 더욱 간결하고 유지보수가 쉬운 코드를 작성할 수 있다.

2. JSTL의 구성요소

  • JSTL 1.2 API : JSTL 기본클래스와 인터페이스를 제공한다.
  • JSTL 구현체 : JSTL API 규격에 맞춰 인터페이스를 구현한다.

image

3. PageContext

  • PageContext는 JSP 페이지에서 페이지 수준에서 사용되는 다양한 정보를 제공하는 클래스이다.
  • JSP 페이지가 실행되는 동안 다양한 자원을 관리하고 페이지 범위의 속성에 접근할 수 있도록 한다.
  • 서블릿이나 JSP 엔진에서 페이지의 실행 상태와 관련된 정보를 캡슐화한다.
  • PageContext를 사용하면 JSP 페이지 내에서 다양한 자원에 쉽게 접근할 수 있으며, 이를 통해 JSP 페이지의 동작을 보다 유연하게 제어할 수 있다.

주요기능

  1. 속성 관리: 페이지 범위(Page scope)의 속성을 설정하고 가져오는 기능을 제공한다.
  2. JSP 페이지 요소 관리: request, response, session, application과 같은 JSP 페이지에서 공통적으로 사용되는 객체에 대한 접근을 제공한다.
  3. 출력 관리: JspWriter 객체를 통해 출력 스트림을 관리하고, 데이터를 클라이언트로 보내는 데 사용된다.
  4. 에러 처리: JSP 페이지에서 발생하는 예외를 처리하고 전파하는 기능을 지원한다.
  5. forward 및 include 관리: 다른 자원으로의 요청 전달(forward)이나 자원 포함(include)을 관리할 수 있다.

image

4. JSTL 태그 라이브러리 구조 및 사용

JSTL 모듈

1
<%@ taglib uri="태그 라이브러리 모듈명" prefix="접두어" %>
  • URI : 라이브러리를 참조하는 경로이다.
  • prefix : JSP 페이지에서 해당 태그 라이브러리를 사용하는 접두어이다.

JSTL 태그

1
<접두어:태그명 속성="값"...> ..... </접두어:태그명>
  • 모듈을 적용하면 JSP내에서 해당 접두어로 통해 JSTL을 불러 올 수 있다.
  • 예약된 태그를 java 기능과 같은 기능을 하는 코드를 작성할 수 있다.
  • JSTL에서 사용하는 Area는 다음과 같다.

image

Core 태그

1. 주요 역할

  • SP 페이지에서 기본적인 흐름 제어, URL 처리, 변수 설정 등을 지원하는 가장 중요한 태그들로 구성된다.
  • 제공기능 : 조건문, 반복문, URL처리, 변수 설정 및 관리, JSP 페이지 상에서 공통적 사용하는 기능들을 포함한다.

2. c:out

  • JSTL의 코어(Core) 태그 라이브러리에서 제공하는 태그 중 하나로, 값을 출력할 때 사용된다.
  • 일반적인 출력과 달리 HTML 이스케이프 처리가 기본으로 적용되므로, HTML 태그가 그대로 출력되는 것을 방지할 수 있다.
  • 값이 null일 경우 대체할 값을 설정할 수도 있다고 한다.

1) value

  • 설명: 출력할 값을 설정한다.
  • 타입: Object
  • 기본값: null
  • 예시:
    1
    
    <c:out value="${message}"/>
    

2) default

  • 설명: valuenull이거나 존재하지 않을 때 출력할 기본값을 설정한다.
  • 타입: String
  • 기본값: null
  • 예시:
    1
    
    <c:out value="${message}" default="값이 없습니다"/>
    

3) escapeXml

  • 설명: 출력할 값에 대한 XML/HTML 이스케이프 처리를 할지 여부를 설정한다. 기본값은 true로, HTML 이스케이프 처리가 적용되어 <와 같은 특수 문자가 그대로 출력되는 것을 방지한다. false로 설정하면 이스케이프 처리가 적용되지 않는다.
  • 타입: boolean
  • 기본값: true
  • 예시:
    1
    
    <c:out value="${htmlContent}" escapeXml="false"/>
    

4) 사용예제

  • 다음은 사용예제이다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      <%
      pageContext.setAttribute("name", "유관순");
      %>
        
      <c:out value="임꺽정"/><br>
      <c:out value="${null}" default="홍길동"/><br>
      <c:out value="${null}">홍길동</c:out><br>
      <c:out value="${'임꺽정'}" default="홍길동"/><br>
      <c:out value="${name}" default="홍길동"/><br>
      <c:out value="${name2}" default="홍길동"/><br>
    

3. c:set

  • JSP 페이지에서 변수를 설정하거나 값을 저장하는 데 사용된다.
  • 이를 통해 변수에 값을 저장하고, 그 값을 나중에 다른 곳에서 사용할 수 있다.
  • JSP 페이지 내에서 특정 값을 설정할 때 편리하게 사용할 수 있다.

1) var

  • 설명: 설정할 변수의 이름을 지정한다. 이 변수는 이후 JSP 페이지 내에서 사용할 수 있다.
  • 타입: String
  • 예시:
    1
    
    <c:set var="userName" value="Keonhak"/>
    

2) value

  • 설명: 설정할 값을 지정한다. 이 값은 문자열, 숫자, 객체 등 다양한 형태로 저장할 수 있다.
  • 타입: Object
  • 예시:
    1
    
    <c:set var="userAge" value="${age}"/>
    

3) scope

  • 설명: 변수가 저장될 범위를 지정한다. page, request, session, application이 있다. 기본값은 page이다.
  • 타입: String
  • 예시:
    1
    
    <c:set var="userName" value="Keonhak" scope="session"/>
    

4) target

  • 설명: 설정할 값이 저장될 객체를 지정한다. 특정 객체의 속성을 설정할 때 사용된다.
  • 타입: Object
  • 예시:
    1
    
    <c:set target="${user}" property="name" value="Keonhak"/>
    

5) property

  • 설명: target 속성과 함께 사용되며, 설정할 객체의 속성 이름을 지정한다.
  • 타입: String
  • 예시:
    1
    
    <c:set target="${user}" property="name" value="Keonhak"/>
    

4. c:remove

  • JSP 페이지에서 변수를 제거하는 데 사용된다고 한다.
  • 이 태그를 사용하면 JSP 페이지의 특정 범위에서 정의된 변수를 삭제할 수 있다.
  • 이를 통해 불필요한 변수를 제거하고 메모리를 효율적으로 관리할 수 있다.

1) var

  • 설명: 삭제할 변수의 이름을 지정한다. 해당 이름으로 설정된 변수가 삭제된다.
  • 타입: String
  • 예시:
    1
    
    <c:remove var="userName"/>
    

2) scope

  • 설명: 변수가 저장된 범위를 지정한다. 사용 가능한 값으로는 page, request, session, application이 있다.
  • 타입: String
  • 예시:
    1
    
    <c:remove var="userName" scope="session"/>
    

5. c:if

  • 조건에 따라 특정 JSP 코드 블록을 실행할지 여부를 결정한다.
  • JSP 페이지 내에서 자바의 if 문과 유사한 방식으로 조건문을 사용할 수 있게 해준다.
  • 이를 통해 JSP 코드에서 조건부 로직을 간단하게 구현할 수 있다.

1) test

  • 설명: 조건을 지정하는 필수 속성이다. 이 속성은 불리언 값(true 또는 false)을 반환하는 조건식으로 설정된다고 한다. testtrue일 경우에만 태그 내부의 코드가 실행된다.
  • 타입: boolean
  • 예시:
    1
    2
    3
    4
    
    <c:if test="${userAge >= 18}">
        <!-- 이 코드는 userAge가 18 이상일 때만 실행됨 -->
        성인입니다.
    </c:if>
    

2) var

  • 설명: 조건식의 결과를 저장할 변수를 지정한다. test 속성의 결과 값이 이 변수에 저장되며, 이후 JSP 페이지에서 사용할 수 있다.
  • 타입: String
  • 예시:
    1
    2
    3
    4
    
    <c:if test="${userAge >= 18}" var="isAdult">
        <!-- 이 코드는 userAge가 18 이상일 때만 실행됨 -->
        성인입니다.
    </c:if>
    

6. c:choose

  • 여러 조건을 처리할 때 사용된다. 이는 자바의 switch 문과 유사한 방식으로 동작하며, 다양한 조건을 처리할 수 있는 구조를 제공한다.
  • <c:choose> 태그는 <c:when><c:otherwise> 태그와 함께 사용되며, 각 조건을 순차적으로 검사하여 조건이 참인 경우에 해당 블록을 실행한다.

1) c:when

  • 설명: 조건이 참일 때 실행되는 블록을 정의한다. test 속성을 사용하여 조건을 설정하며, 첫 번째로 참인 조건이 실행되고 나머지 조건은 무시된다.
  • 타입: boolean
  • 예시:
    1
    2
    3
    4
    5
    6
    7
    8
    
    <c:choose>
        <c:when test="${userAge >= 18}">
            성인입니다.
        </c:when>
        <c:when test="${userAge < 18}">
            미성년자입니다.
        </c:when>
    </c:choose>
    

2. c:otherwise

  • 설명: c:when 태그에서 지정한 모든 조건이 거짓일 때 실행되는 블록을 정의한다. 이는 자바의 default 블록과 유사하게 사용된다.
  • 예시:
    1
    2
    3
    4
    5
    6
    7
    8
    
    <c:choose>
        <c:when test="${userAge >= 18}">
            성인입니다.
        </c:when>
        <c:otherwise>
            나이를 알 수 없습니다.
        </c:otherwise>
    </c:choose>
    

7. c:forEach

  • 반복문을 처리하는 태그이다. 배열, 리스트, 맵, 컬렉션 등의 데이터를 순차적으로 처리할 때 사용된다.

1) items

  • 설명: 반복할 데이터가 들어 있는 컬렉션이나 배열을 지정한다.
  • 타입: Object (리스트, 배열, 맵 등)
  • 예시:
    1
    2
    3
    
    <c:forEach items="${itemList}" var="item">
        ${item}
    </c:forEach>
    

2) var

  • 설명: 반복되는 각 요소를 저장할 변수의 이름을 지정한다. 반복문 내에서 이 변수로 각 항목에 접근할 수 있다.
  • 타입: String
  • 예시:
    1
    2
    3
    
    <c:forEach items="${itemList}" var="item">
        ${item}
    </c:forEach>
    

3) begin

  • 설명: 반복을 시작할 인덱스를 지정한다. 첫 번째 항목의 인덱스는 0이다.
  • 타입: int
  • 예시:
    1
    2
    3
    
    <c:forEach items="${itemList}" var="item" begin="1">
        ${item}
    </c:forEach>
    

4) end

  • 설명: 반복을 끝낼 인덱스를 지정한다. 이 인덱스에 해당하는 요소까지 반복한다.
  • 타입: int
  • 예시:
    1
    2
    3
    
    <c:forEach items="${itemList}" var="item" end="3">
        ${item}
    </c:forEach>
    

5) step

  • 설명: 반복에서 건너뛸 간격을 지정한다. 기본값은 1이며, 2 이상의 값을 지정하면 그만큼 요소를 건너뛴다.
  • 타입: int
  • 예시:
    1
    2
    3
    
    <c:forEach items="${itemList}" var="item" step="2">
        ${item}
    </c:forEach>
    

8. c:url

  • JSP 페이지에서 URL을 동적으로 생성할 때 사용된다.
  • 특정 URL 경로를 지정하고, 이를 동적으로 처리하여 상대 경로나 컨텍스트 경로를 추가할 수 있다.
  • 또한, URL에 쿼리 파라미터를 쉽게 추가할 수 있다고 한다.

1) value

  • 설명: 생성할 URL 경로를 지정한다고 한다. 상대 경로, 절대 경로 또는 컨텍스트 기반 경로를 지정할 수 있다고 한다.
  • 타입: String
  • 예시:
    1
    
    <c:url value="/user/profile"/>
    

2) var

  • 설명: 생성된 URL을 저장할 변수의 이름을 지정한다고 한다. 이 변수는 이후 JSP 페이지에서 사용할 수 있다고 한다.
  • 타입: String
  • 예시:
    1
    
    <c:url value="/user/profile" var="profileUrl"/>
    

3) context

  • 설명: URL 경로에 사용할 컨텍스트 경로를 지정한다고 한다. 기본적으로 현재 애플리케이션의 컨텍스트 경로가 사용되며, 다른 애플리케이션의 컨텍스트 경로를 지정할 수도 있다고 한다.
  • 타입: String
  • 예시:
    1
    
    <c:url value="/user/profile" context="/otherApp"/>
    

4) c:param

  • 설명: URL에 쿼리 파라미터를 추가하는 데 사용된다고 한다. namevalue 속성을 사용하여 파라미터를 설정할 수 있다고 한다.
  • 타입: String (name, value)
  • 예시:
    1
    2
    3
    4
    
    <c:url value="/search" var="searchUrl">
        <c:param name="query" value="JSTL"/>
        <c:param name="page" value="1"/>
    </c:url>
    

9. c:import

  • 외부 리소스(HTML 파일, JSP 파일, 서블릿, 또는 외부 URL) 등을 현재 JSP 페이지에 동적으로 포함할 때 사용된다.
  • 서버 내부의 리소스뿐만 아니라 외부의 URL도 가져와서 포함할 수 있다.
  • 파라미터를 전달하거나, 포함된 내용을 변수에 저장할 수 있는 기능도 제공한다.

1) url

  • 설명: 가져올 리소스의 URL을 지정한다. 상대 경로, 절대 경로, 외부 URL 등 다양한 경로를 지정할 수 있다.
  • 타입: String
  • 예시:
    1
    
    <c:import url="/header.jsp"/>
    

2) var

  • 설명: 가져온 리소스의 내용을 저장할 변수를 지정한다. 이 변수에 포함된 내용을 나중에 다른 곳에서 사용할 수 있다.
  • 타입: String
  • 예시:
    1
    2
    
    <c:import url="/footer.jsp" var="footerContent"/>
    <div>${footerContent}</div>
    

3) context

  • 설명: URL의 컨텍스트 경로를 지정한다. 기본적으로 현재 애플리케이션의 컨텍스트 경로가 사용되며, 다른 애플리케이션의 컨텍스트 경로를 지정할 수도 있다.
  • 타입: String
  • 예시:
    1
    
    <c:import url="/header.jsp" context="/otherApp"/>
    

4) charEncoding

  • 설명: 가져온 리소스의 문자 인코딩을 지정한다. 주로 외부 리소스를 가져올 때 사용된다.
  • 타입: String
  • 예시:
    1
    
    <c:import url="http://example.com/data" charEncoding="UTF-8" var="dataContent"/>
    

5) c:param

  • 설명: URL에 전달할 파라미터를 지정한다고 한다. GET 방식으로 쿼리 파라미터를 추가할 수 있다고 한다.
  • 예시:
    1
    2
    3
    
    <c:import url="/search.jsp">
        <c:param name="query" value="JSTL"/>
    </c:import>
    

6) 사용예제

  • ex10의 사용예제이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    // ex10
    <h2>HTTP 요청하기</h2>
    <c:url value="ex10_sub.jsp" 
           var="url1">
        <c:param name="name" value="홍길동"/>
        <c:param name="age" value="20"/>
        <c:param name="gender" value="woman"/>
    </c:url>
    <pre>${url1}</pre>
      
    //ex10_sub
    name = ${param.name}<br>
    age = ${param.age}<br>
    gender = ${param.gender}<br>
    

    image

10. c:redirect

  • JSP 페이지에서 다른 URL로 클라이언트를 리다이렉트할 때 사용된다.
  • 서버에서 클라이언트에게 특정 URL로 다시 요청하도록 응답을 보낼 때 사용된다.
  • 즉, JSP 페이지에서 동적으로 다른 페이지나 외부 URL로 리다이렉트할 수 있는 기능을 제공한다.

1) url

  • 설명: 리다이렉트할 대상 URL을 지정한다. 상대 경로, 절대 경로 또는 외부 URL을 지정할 수 있다.
  • 타입: String
  • 예시:
    1
    
    <c:redirect url="/home.jsp"/>
    

2) context

  • 설명: 리다이렉트할 URL에 사용할 컨텍스트 경로를 지정한다. 기본적으로 현재 애플리케이션의 컨텍스트 경로가 사용되며, 다른 애플리케이션의 컨텍스트 경로를 지정할 수 있다.
  • 타입: String
  • 예시:
    1
    
    <c:redirect url="/home.jsp" context="/otherApp"/>
    

3) c:param

  • 설명: 리다이렉트할 URL에 쿼리 파라미터를 추가할 수 있다. 이를 통해 GET 방식으로 파라미터를 전달할 수 있다.
  • 타입: String (name, value)
  • 예시:
    1
    2
    3
    
    <c:redirect url="/search.jsp">
        <c:param name="query" value="JSTL"/>
    </c:redirect>
    

Internationalization 태그

1. 주요 역할

  • Formatting and Internationalization(포맷팅 및 국제화) 기능을 제공하는 태그들로 구성되어 있다.
  • 숫자, 날짜, 시간의 형식을 지정하고, 다국어 지원(국제화)을 쉽게 구현할 수 있다.
  • fmt 태그는 JSP 페이지에서 데이터의 출력 형식을 관리하거나 다국어 웹사이트를 만들 때 유용하게 사용된다.

2. fmt:parseDate

1) value

  • 설명: 파싱할 날짜나 시간 문자열을 지정한다.
  • 타입: String
  • 예시:
    1
    
    <fmt:parseDate value="2024-09-11" var="parsedDate"/>
    

2) var

  • 설명: 변환된 날짜 객체를 저장할 변수의 이름을 지정한다.
  • 타입: String
  • 예시:
    1
    
    <fmt:parseDate value="2024-09-11" var="parsedDate"/>
    

3) pattern

  • 설명: 파싱할 날짜 문자열의 형식을 지정한다. 지정된 형식에 맞춰 문자열이 날짜로 변환된다.
  • 타입: String
  • 예시:
    1
    
    <fmt:parseDate value="11/09/2024" pattern="dd/MM/yyyy" var="parsedDate"/>
    

4) type

  • 설명: 파싱할 값이 날짜(date), 시간(time), 또는 날짜와 시간 모두(both)인지를 지정한다. 기본값은 date라고 한다.
  • 타입: String
  • 예시:
    1
    
    <fmt:parseDate value="11:30" type="time" var="parsedTime"/>
    

5) timeZone

  • 설명: 파싱된 날짜에 적용할 시간대를 지정한다. 이 속성을 생략하면 기본적으로 서버의 시간대가 사용된다.
  • 타입: String
  • 예시:
    1
    
    <fmt:parseDate value="2024-09-11" var="parsedDate" timeZone="Asia/Seoul"/>
    

3. fmt:formatDate

  • 날짜 또는 시간을 특정 형식에 맞춰 출력할 때 사용된다.
  • java.util.Date 객체나 날짜 문자열을 지정된 패턴으로 포맷팅하여 JSP 페이지에 출력한다.

1) value

  • 설명: 포맷할 날짜 또는 시간을 지정한다. java.util.Date 객체나 날짜 문자열을 사용한다.
  • 타입: Date 또는 String
  • 예시:
    1
    
    <fmt:formatDate value="${now}" pattern="yyyy-MM-dd"/>
    

2) pattern

  • 설명: 날짜나 시간을 포맷할 형식을 지정한다. SimpleDateFormat의 패턴을 사용하여 형식을 정의한다.
  • 타입: String
  • 예시:
    1
    
    <fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/>
    

3) type

  • 설명: 출력할 값의 유형을 지정한다고 한다. date, time, 또는 both 중 하나를 선택할 수 있다. pattern을 사용하지 않으면 기본적으로 로케일에 따라 형식이 정해진다.
  • 타입: String
  • 예시:
    1
    
    <fmt:formatDate value="${now}" type="time"/>
    

4) dateStyle

  • 설명: 날짜의 스타일을 지정한다. default, short, medium, long, full 중 하나를 사용할 수 있다.
  • 타입: String
  • 예시:
    1
    
    <fmt:formatDate value="${now}" dateStyle="long"/>
    

5) timeStyle

  • 설명: 시간의 스타일을 지정한다. default, short, medium, long, full 중 하나를 사용할 수 있다.
  • 타입: String
  • 예시:
    1
    
    <fmt:formatDate value="${now}" timeStyle="short"/>
    

6) timeZone

  • 설명: 날짜와 시간에 적용할 시간대를 지정한다. TimeZone 객체 또는 시간대 문자열을 사용하여 특정 시간대를 적용할 수 있다.
  • 타입: String
  • 예시:
    1
    
    <fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss" timeZone="Asia/Seoul"/>
    

    image

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.