JSTL
    JSP Standard Tag Lib.  
    JSP에서 태그를 이용하는 라이브러리 들로 core, sql, 등이 있지만 core를 주로 사용한다.
    EL 과 같이 사용하여 코드를 단순화 할수 있다.
       
    Core lib    변수선언, if, for문 등의 제어흐름, url 처리 등의 기능을 갖는 라이브러리.

    Tag Lib 선언
        <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>        //Core  Tag lib를 선언
            prefix = " c " 는 접두사로, jsp 상에서 core lib를 사용할때 <c>로 호출하겠다는 의미.

    JSTL 에서도 request 객체를 통해서 값이 이동하기 때문에,
    request.setCharaterEncoding("utf-8"); 엔코딩이 필수이다.

    JSTL을 사용해서 태그에서 값을 호출하거나 저장할때
    직접 값을 넣는 경우는 value="값" 으로 가능하지만
    매개변수를 이용하는 객체일 경우  value="${변수명}"    과 같이 el로 객체에 접근해야 한다.
    value일경우만이다, 변수명인 var="변수명" 일경우 EL이 아니여도 된다.


  Data 처리
    Data 외부(html)로 출력
        <c:out value="value"/>
        <c:out value="${param.name}"/>        parameter에 name으로 저장돼있는 값을 가져와서 출력
           (== <%    out.print(request.getParameter(name));   %>   )

    Data 입력
        <c:set 
                var="변수명" 
                scope="page/request/session/application "                    
                value="값"
                property="자바빈 객체나, map 객체"
                target="자바빈 객체나 map 객체"
        />
            or
        <c:set var="변수명">값</c:set>        값이 변수명으로 저장

        value="" 에는 java의 객체도 저장이 가능하다. (value = " <%= obj %> " )

           request(or scope).setAttribute("변수명", "값");  과 같다.
                request                                       scope="request"
                setAttribute("변수명", "값")        var="변수명" value="값"

            <c:set var="no1" value="${10}"/>    no1 이라는 변수명에 값 10 저장
            <c:out value="${no1}"/>                  no1이라는 변수의 값을 불러와서 화면을 출력(html 범위로 출력)

                그냥 문자면 value="no1"        //no1이라는 문자가 출력
                객체의 명이면 value= "${no1}"

        데이터의 Value가 Map인경우
            맵과, 맵안에 값들 저장
                <c:set var="${map}" value="<%=new HashMap<String, String>() %>" />
//map이라는 이름의 속성에 HashMap을 넣음
                <c:set target="${map}" property="name" value="kim"/>
//map이라는 속성에 name이라는 속성을 찾아서 kim이라는 값을 지정. (name이 key, kim이 맵핑되는 value가 됨)
                <c:set target="${map}" property="age" value="10"/>
                <c:set target="${map}" property="addr" value="seoul"/>

            키값을 각각 name, age, addr로 주고,
            맵핑되는 값을 kim, 10, seoul로 저장.

            아래와같이 출력이 가능
                <c:out value="${map.name}"/>
                ${map.age}
                ${map["addr"]}

target속성
<c:set target="${member}" property="age" value="20"/>                          
member라는 속성(scopre 지정이 없으므로 pageContext)에 인스턴스변수 age에 값 20을 저장
<c:set target="${member}" property="name" value="${requestScope.dto.name}"/>
member라는 속성에 변수name을 찾아서 request에 저장되어 있는 속성 dto의 name이라는 값을 불러와 저장.


      If 문 조건문
            기본형
                <c:if test="조건"> 
                    실행문
                </c:if>

Choose문 (=switch case  문 )
                <c:choose>
                    <c:when test="조건1">
                        실행문
                    </c:when>
                    <c:when test="조건2">
                        실행문
                    </c:when>
                    <c:when test="조건3">
                        실행문
                    </c:when>
                    <c:otherwise>
                        실행문
                    </c:otherwise>
                </c:choose>


       forEach문 반복문
forEach문은 단순 for문 처럼 동작하기도 하고, items="Collection객체" 를 넣어주면 forEach문으로도 동작한다.

             기본형 (단순 for문 형태)
                <c:forEach var="i"  begin="1" end="10"> 
                        실행문                                            // 실행문 실행시 i가 자동으로 1씩 10까지 증가.
                </c:forEach>
begin    시작 index
end    마지막 index
step    증가량

             items = "Collection 객체" 사용시 
  ( forEach문 or 향상된 for문 형태, Collection의 모든 요소를 반복 실행,  ele는 collection안에 element를 의미한다)
                <c:forEach var="ele" items="${collection}">
                        ${ele.key}
                        ${ele.value}
                        <br>
                </c:forEach>

varStatus
varStatus="status"    반복문의 현재 상태를 알려주는 객체 status를 이용함.
${status.index}        index번호 출력 0부터
${status.count}        현재 반복횟수를 출력 1부터
${status.first}          현재가 첫번째면 true 리턴
${status.last}          현재가 마지막이면 true 리턴

forTokens
    StringTokenizer 처럼 문자열을 일정 기준으로 잘라서 반복문을 실행하는 메서드
    forEach와 유사하다. 잘라낸 후 잘라낸 문자를 가지고 반복해서 실행
    기본형
        <c:forTokens var="token_ele" items="str1;str2;str3" delim=";">      //item을 delim으로 잘라서 향상된 for문 실행
                <c:out value="${token_ele}"/>                                        // 잘라낸 items로 실행할 구문
                 // value를 token_ele 로 주면, tokens에서 잘라낸 요소를 하나씩 가지고 반복 실행한다.
        </c:forTokens>


import
    페이지를 삽입하는 기능,삽입한 페이지에서 자료를 가져와 현재 페이지에서 사용도 가능.
   <jsp:include>와 기능상 동일하다 (지시자 include가 아닌 액션태그와 동일)
var="변수명" 으로 받아올 데이터를 저장하지 않으면 화면에 출력하도록 초기값이 정해져 있다.
(출력을 원하지 않고 데이터를 가지고 작업을 수행하려면 var 로 받아서 사용해야한다. )

    기본형
        <c:import url="page_url" charEncoding="utf-8" scope="사용범위" var="읽어올 자료 변수명">
            <c:param name="name" value="value">                //넘겨줄 parameter
            <c:set val="변수명"  value="값">                            //넘겨줄 객체명과 값
        </c:import>        


redirect
    redirect태그를 이용해 JSP 에서도 response.sendRedirect 와 같이 다른 페이지로 가서 새로운 요청을 하도록 페이지 전환을 해줄수 있다.
    ( forward의 기능은 JSP에선 거의 사용하지 않는다.  forward는 요청을 가지고 여러 컴포넌트를 오가며 작업을 하기 위한 것으로 거의 대부분 servlet, java에서 사용하기 때문이다. )

    기본형
        <c:redirect url="page_url">
            <c:param name="name" value="value">                //넘겨줄 parameter
            <c:set val="변수명"  value="값">                            //넘겨줄 객체명과 값
        </c:redirect>


'JSP+Servlet' 카테고리의 다른 글

5.내장객체 session, cookie  (0) 2020.01.09
6.EL (Expression Language)  (0) 2020.01.08
3.JSP  (0) 2020.01.08
4.내장객체 Request, Response  (0) 2020.01.08
2.Servlet  (0) 2020.01.08

+ Recent posts