ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JSP/Servlet] JSTL - 코어 라이브러리
    IT/Spring-JSP&Servlet 2020. 11. 13. 01:20

    출처 : unsplash

     

    ■ 들어가기

    - 뇌를 자극하는 JSP&Servlet (김윤명/한빛미디어). 을 공부하며 정리하는 블로그


    ■ 목차

    1. <c:set>
    2. <c:remove>
    3. <c:if>
    4. <c:choose>
    5. <c:forEach>
    6. <c:forTokens>
    7. <c:catch>
    8. <c:redirect>
    9. <c:import>

    10. <c:url> 커스텀 액션

    11. <c:out> 커스텀 액션

     

    1. <c:set> 커스텀 액션

    - 변수 선언 후 해당 변수에 초기값을 대입하는 기능의 커스텀 액션

    - 자바에서의 변수 선언

      ex. int num = 100 ;

    - <c:set> 커스텀 액션을 이용한 변수 선언     >> var, value 2개의 애트리뷰트 사용

      ex. <c:set var="num" value="100" />

      ( 자바에서와 다르게 변수타입(ex. int)을 사용하지 않음 )

     

    [주의] 커스텀 액션 변수 사용 범위
    - 익스프레션 언어의 EL 식 안에서 사용(ex. ${num}) : O
    - 스크립팅 요소 안에서 사용(ex. <%= num %> : X
    => <c:set> 커스텀 액션을 사용해 선언한 변수는 page 데이터 영역의 애트리뷰트이며, 자바 변수가 아니기 때문!

    - page 데이터 영역 : setAttribute, getAttribute 메서드를 이용해서 데이터를 저장할 수 있는 4개 데이터 영역 (page, request, session, application) 중 가장 작은 범위의 영역

    - 만일 page 데이터 영역이 아니라 request, session, application 데이터 영역에 애트리뷰트를 저장하고자 한다면,

      <c:set> 태그에 scope 이라는 애트리뷰트를 추가후 변수가 저장될 데이터 영역을 지정!

      ex. <c:set var="PRICE" value="15000" scope="request" />

     

    2. <c:remove> 커스텀 액션

    - 선언한 변수를 삭제하는 기능의 커스텀 액션

    - <c:set> 커스텀 액션을 사용해서 선언한 변수는 page, request, session, application 데이터 영역에 애트리뷰트로 저장되기 때문에 인위적으로 <c:remove> 커스텀 액션을 통해 삭제 필요함!

    - 사용방법

      ex. <c:remove var="변수이름" />

      단, 위와 같이 사용할 경우 page, request, session, application 데이터 영역에 저장되어 있는 num 이란 이름의 모든 애트리뷰트가 삭제되므로 특정 데이터영역 한정할 경우엔 scope 애트리뷰트로 데이터 영역 지정

      ex. <c:remove var="num" scope="request" />

     

    3. <c:if> 커스텀 액션

    - 자바 프로그램의 if 문과 비슷한 역할을 하는 커스텀 액션

    - 즉, 주어진 조건에 따라 어떤 동작을 수행하도록 만드는 액션

    - 자바에서의 if 문 사용

      if (조건식) {

           명령문

       }

    - <c:if> 커스텀 액션 사용     >> test 애트리뷰트 값으로 지정

      <c:if test="${num1 > num2}">

           명령문

      </c:if>

     

    4. <c:choose> 커스텀 액션

    - 자바 프로그램의 switch 문과 비슷한 역할을 하는 커스텀 액션

    - <c:when>, <c:otherwise> 커스텀 액션과 함께 사용되며, 각각 switch 문의 case, default 절과 비슷함

    자바에서 사용 예시 <c:choose> 커스텀 액션 사용 예시

      switch (num) {

        case 0 :

          명령문

          break ;

        case 1 :

          명령문

          break ;

        default :

          명령문

          break ;

      }

    <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>

     

    5. <c:forEach> 커스텀 액션

    - 자바 프로그램의 for 문과 비슷한 역할을 하는 커스텀 액션

    자바에서 사용 예시 <c:forEach> 커스텀 액션 사용 예시
    for (int cnt = 0 ; cnt < 10 ; cnt++) {
          System.out.println("야호") ;
    }
    <c:forEach begin="1" end="10">
          야호 <br>
    </c:forEach>
    <c:forEach> 커스텀 액션에서 변수 사용할 경우
    <c:forEach var="cnt" begin="1" end="10">
          ${cnt} <br>
    </c:forEach>
    <c:forEach> 커스텀 액션에서 증가치 조정할 경우
    <c:forEach var="cnt" begin="1" end="10" step="2">
          ${cnt} <br>
    </c:forEach>

    - 배열과 같이 여러 개의 항목으로 구성된 데이터를 순서대로 출력 가능

      items 애트리뷰트를 쓰고 그곳에 배열 이름을 지정

      var 애트리뷰트에는 배열의 각 항목을 저장한다.

    ex. <c:forEach var="변수명" items="${배열이름}">

              ${변수명} <br>

         </c:forEach>

     

    6. <c:forTokens> 커스텀 액션

    - 자바의 for 문과 java.util.StringTokenizer 클래스의 기능을 합친 것과 같은 기능

    - 즉, 문자열에 포함된 토큰을 분리해서 각각의 토큰에 대해 반복 처리를 수행하도록 만드는 기능

    - items, delims, var 3개의 애트리뷰트 사용!

    - items : 토큰을 포함하는 문자열을 지정

      delims : 토큰을 분리하는데 사용할 구획 문자를 기술

      var : 분리된 토큰을 대입할 변수명 기재

    - 예시

    <c:forTokens var="pet" items="햄스터 이구아나 소라게" delims=" ">

          ${pet} <br>

    </c:forTokens>

     

    7. <c:catch> 커스텀 액션

    - 자바 프로그램의 try 문과 비슷한 역할을 하는 커스텀 액션

    - 보통 <c:if> 커스텀 액션과 함께 자바의 try~catch 문 구현 시 사용

      ( <c:catch> 커스텀 액션은 try 문에 해당하는 기능을 하고, <c:if> 커스텀 액션을 통해 catch 문에 해당하는 기능 수행 )

    - 시작/종료 태그 사이에서 에러가 발생하면 에러에 대한 정보를 익셉션 객체 저장 변수에 담아 다음 코드를 수행

    - 사용법 :

    <c:catch var="e">

          코드

    </c:catch>

    <c:if test="${e != null}" >

          코드

    </c:if>

     

    8. <c:redirect> 커스텀 액션

    - 다른 JSP 페이지 호출하는 커스텀 액션

    - <jsp:foward> 표준 액션은 RequestDispatcher 인터페이스의 forward 메서드와 동일한 방법으로 다른 JSP 페이지를 호출

    - <c:redirect> 커스텀 액션은 sendRedirect 메서드와 동일한 방법으로 JSP 페이지가 아닌 웹 자원과 다른 웹 서버에 있는 웹 자원 호출!

    - 파라미터 전달이 필요한 경우 <c:param> 커스텀 액션을 사용!

    => <c:param> 커스텀 액션을 사용하면 호출할 JSP에 파라미터를 같이 넘긴다!

    => <jsp:forward> 표준액션의 경우, URL이 변경되지 않는 반면

         <c:redirect> 커스텀 액션은 호출된 JSP페이지 URL로 변경됨!

    - 사용법 :

    <c: redirect url="http://www.foo.com/bar.jsp" >

          <c:param name="code" value="12345" />

          <c:param name="num" value="1" />

    </c:redirect>

    => 위 코드는 http://www.foo.com/bar.jsp?code=12345&num=1 URL을 생성 후 sendRedirect 메서드를 통해 웹 자원 호출하는 것과 동일함

     

    9. <c:import> 커스텀 액션

    - 현재의 JSP 페이지에 다른 JSP 페이지의 결과를 포함시키는 커스텀 액션

    - <jsp:include> 표준 액션과 다른 점은 다른 웹 서버에 있는 JSP 페이지 호출 가능, JSP 페이지가 아닌 다른 종류의 웹 자원 호출 가능

    - 호출하는 웹 자원에 데이터 전달 필요한 경우 <c:pram> 커스텀 액션 사용!

    - 사용법 :

    <c:import url="http://www.foo.com/bar.jsp" >

          <c:param name="product" value="TV" />

          <c:param name="index" value="07" />

    </c:import>

     

    10. <c:url> 커스텀 액션

    - <c:set> 커스텀 액션과 마찬가지로 변수의 선언에 사용되는 액션이지만, URL을 저장하기 위한 변수 선언에 사용됨!

    - var 애트리뷰트에 변수 이름지정, value 애트리뷰트에 초기값(URL) 지정

    - 쿼리 스트링 형태로 데이터 전달할 경우, <c:param> 커스텀 액션 사용

    - 사용법 :

    <c:url var="myUrl" value="http://localhost:8090/brain09/Add.jsp" >

          <c:param name="NUM1" value="999" />

          <c:param name="NUM2" value="1" />

    </c:url>

     

    11. <c:out> 커스텀 액션

    - 보통 특수 문자로 해석될 수 있는 <, >, &, ', " 와 같은 특수 문자를 포함한 데이터 출력이 필요한 경우 사용

    ( <c:out> 커스텀 액션은 위 특수 문자를 이스케이프 시퀀스로 바꿔주는 기능이 있기 때문 )

    - value 애트리뷰트에 특수 문자가 포함된 출력할 데이터를 지정

    - 사용법 :

    <c:out value="<INPUT>은 <FORM>의 서브 앨리먼트입니다." />

    - 특수문자와 이스케이프 시퀀스

    특수문자 이스케이프 시퀀스
    < &lt;
    > &gt;
    & &amp;
    ' &#039;
    " &#034;

    - 만일 출력할 데이터를 실제 태그 기능을 하도록 하기 위한다면 escapeXml 애트리뷰트에 false값을 지정! (기본값: true)

      ex. <c:out value="<H1>오늘의 과제</H1>" escapeXml="false" />

    - 또한, 출력할 데이터의 디폴트 값을 지정 가능 (EL 식의 결과 출력 시 유용)

     

     

    댓글

Designed by Tistory.