본문 바로가기

Spring

JSTL 문법

1. JSTL 엔진

- 항상 맨 위에 가져와야함

 

 

2. JSTL 문법 1 (out태그, set 태그)

1.  JSTL만 단독으로 사용하는 경우는 없음. 주로 do에서 호출받아서 사용 (Model, ModelandView)
2. 조건문, 반복문 외에는 태그와 태그 사이에 값을 넣지 않는다.
3. out 태그
     - out.print와 같은 형태의 출력 태그
4. set 태그
     - setattribue와 동일한 형태의 태그
     - jsp에 있는 갑을 jstl로 반환시 set을 이용하여 변환
     - 속성 : scope : ① "session"  => session을 생성 또는 로드, 초기화 (충돌날 수 있어 주로 초기화할때만 씀)
                               "request"  => value값을 var 변수에 값을 저장하는 형태 (굳이 쓰지는 않음)
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <!-- jstl 엔진 -->
        <%@taglib prefix="cr" uri="http://java.sun.com/jsp/jstl/core"%>
        <!-- jstl 각종 함수 -->
        <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        <!-- jstl databse 관련 사항 -->
        <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
        <!-- JSTL만 단독으로 사용하는 경우는 없음. 주로 do에서 호출받아서 사용 (Model, ModelandView)-->
        <%
            String user="홍길동";
            HttpSession hs = request.getSession();
            hs.setAttribute("ssdata", "15881004");
        %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>JSTL 문법 사용1</title>
    </head>
    <body>
    </body>
    <!-- out 태그는 out.print와 같은 형태의 출력 태그 -->
    <cr:out value="값 출력"/>
    <!-- set 태그는 setattribue와 동일한 형태의 태그 -->
    <cr:set var="a" value="에이핑크"/>${a}
    <br><br>
    <!-- jsp에 있는 갑을 jstl로 반환시 set을 이용하여 변환 -->
    <cr:set var="b" value="<%=user %>"/>${b}
    <br><br>
    <!-- scope : session을 활성화 시 session을 생성 또는 로드도 활용할 수 있음 -->
    <cr:set var="c" value="jstl문법" scope="session"/>${c}
    세션 초기화 전 데이터 : ${ssdata}<br>
    <!-- 
        기존 세션을 초기화 또는 삭제하고 싶을 경우 다음과 같이 사용가능 
        !! 세션 초기화 시 var 속성을 세션명과 동일하게 입력하면 됨  
    -->
    <cr:set var="ssdata" value="" scope="session"/>
    세션 초기화 후 데이터 : ${ssdata}<br><br><br>

    <!-- scope : request value값을 var 변수에 값을 저장하는 형태-->
    <cr:set var="zz" value="aaa" scope="request"/>
    ${zz}<br><br>
    <% String aname="테스트"; %>
    <cr:set var="kk" scope="request"><%=aname %></cr:set>
    ${kk }
    </html>​

 

3. JSTL 문법 2 (조건문)

1. if 문 기본

     - test 에 if문의 조건식을 입력
     - 조건이 맞으면 var에 true, 틀리면 false로 나타남
     - 주로 set 과 함께 사용
    <body>
    <!-- if문 선언 및 test가 조건식을 사용 var:true, false-->
    <cr:set var="no" value="20"/>
    <cr:if test="${no<100 }">
    해당 숫자는 100이하의 숫자 입니다
    </cr:if>
    <cr:if test="${no>100 }">
    해당 숫자는 100이상의 숫자 입니다
    </cr:if>
    <cr:if test="${no==100 }">
    해당 숫자는 100입니다.
    </cr:if>
    </body>​

2. choose문을 활용한 when 조건식

     - choose : 조건식의 그룹 태그
    <cr:set var="no2" value="C"/>
    <cr:choose>
        <cr:when test="${no2=='Y'}">
            약관에 동의 하셨습니다.
        </cr:when>
        <%--조건문2 --%>
        <cr:when test="${no2 eq'N'}">
            약관에 미동의 하셨습니다.
        </cr:when>
        <%--조건문3 --%>
        <cr:when test="${no2 ne'Y'||no2 ne 'N'}">
            약관 동의 없이 페이지 이동
        </cr:when>
        <%--해당 조건 외에 실행 되는 태그 문법 --%>
        <cr:otherwise>
            해당 값은 인식하지 못했습니다.
        </cr:otherwise>
    </cr:choose>
 

 

4. JSTL 문법 3 (반복문 - forEach)

1. forEach 문 - 원시배열, 클래스 배열
     - items : 모든 배열값을 처리할 때 사용하는 속성값
     - begin(시작값), end(종료값)
     - jsp 안에 jstl 변수 절대 못씀 !!
     <%
        //jstl에 반복문 처리 => 배열 형태로 출력(원시배열, 클래스배열)
        //jstl에서는 권고사항 주로 클래스 배열(ArrayList, LinkedList, Map)
        String data[] = new String []{"hong","kim","park","kang","jang"};
        request.setAttribute("data", data);
        ArrayList<String> al = new ArrayList<String>();
        al.add("데스트1");
        al.add("데스트2");
        al.add("데스트3");
        al.add("데스트4");

     %>
     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>JSTL문법사용2(반복문-forEach)</title>
    </head>
    <body>
        <!-- items : 모든 배열값을 처리할 때 사용하는 속성값 -->
        <!-- jsp변수를 items 속성에서 받은 후 var로 출력 -->
        <!-- begin(시작값), end(종료값) -->
        <ol>
            <cr:forEach var="z" items="<%=data %>" begin="2" end="4">
            <li>${z}</li>
            </cr:forEach>
        </ol>
        <!-- jsp Attribute로 생성된 이름을 items로 받은 후 var로 출력 -->
        <ol>
            <cr:forEach var="z" items="${data}">
            <li>${z}</li>
            </cr:forEach>	
        </ol>
        <ul>
            <cr:forEach var="z" items="<%=al%>">
                <li>${z}</li>
            </cr:forEach>
        </ul>

    </body>
    </html>​


 2. 반복문 속성 값 출력

    <%@page import="java.util.ArrayList"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@taglib prefix="cr" uri="http://java.sun.com/jsp/jstl/core"%>
        <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
        <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>

        <%
            ArrayList<String> al = new ArrayList<String>();
            al.add("홍길동1");
            al.add("홍길동2");
            al.add("홍길동3");
            al.add("홍길동4");
            al.add("홍길동5");

        %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>JSTL문법사용3(반복문-forEach)</title>
    </head>
    <body>
    <!-- varStatus : 배열 번호, 순서, 갯수... 속성값 
        index : 배열 노드 번호
        first : true(첫번째 데이터), false(그 외 데이터)
        last : true(마지막 데이터), false(그 외 데이터)
        count : 데이터 +1씩 카운팅
    -->
    <cr:forEach var="z" items="<%=al %>" varStatus="n">	
        첫번 쨰 데이터 : ${n.first}
        번호 : ${n.index}
        데이터 값 : ${z }
        총 데이터 갯수 : ${n.count}
        <br>
    </cr:forEach>
    </body>
    </html>​


 

5. JSTL 문법 4 (반복문 + 조건문)

-> data 배열 값 중 park 이라는 사용자만 출력
     <%
        //jstl에 반복문 처리 => 배열 형태로 출력(원시배열, 클래스배열)
        //jstl에서는 권고사항 주로 클래스 배열(ArrayList, LinkedList, Map)
        String data[] = new String []{"hong","kim","park","kang","jang"};
        request.setAttribute("data", data);
     %>
     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>JSTL문법사용2(반복문-forEach)</title>
    </head>
    <body>
        <!-- data 배열 값 중 park 이라는 사용자만 출력 -->
        <div>
            <cr:forEach var="z" items="${data}">
            <cr:if test="${z=='park'}">${z}</cr:if>
            </cr:forEach>
        </div>
    </body>
    </html>​

 

6. JSTL 문법 5 (2차배열~다차원배열)

1-0. 클래스 배열 출력방법 - 배열 값
    <%
            ArrayList<ArrayList<String>> al2 = new ArrayList<ArrayList<String>>();
            ArrayList<String> data = new ArrayList<String>();
            data.add("김남준");
            data.add("김석진");
            data.add("민윤기");
            data.add("정호석");
            data.add("박지민");
            data.add("김태형");
            al2.add(data);
            ArrayList<String> data2 = new ArrayList<String>();
            data2.add("A");
            data2.add("B");
            data2.add("O");
            data2.add("A");
            data2.add("AB");
            data2.add("O");
            al2.add(data2);
    %>​


1-1. 2차 배열 데이터값 출력
    <!-- 2차배열~다차원배열 -->
    <cr:forEach var="a" items="<%=al2 %>">
    <cr:forEach var="b" items="${a }">
    ${b }<br>
    </cr:forEach>
    </cr:forEach>

1-2. 2차배열 데이터를 출력하는 방식

     - 출력 결과

     - 문법

    <cr:set var="bb" value="<%=al2.get(1) %>"/>
    <cr:forEach var="aa" items="<%=al2.get(0) %>" varStatus="no">
    고객명 : ${aa} / 혈액형 : ${bb.get(no.index)}<br> 
    </cr:forEach><br>

1-3. 각각의 그룹 배열의 첫번 째 값만 출력하는 형태
    <cr:forEach var="aa" items="<%=al2 %>"><!-- 2 -->
        ${aa.get(0) } <!-- get(배열 노드번호) -->
    </cr:forEach><br><br>



2-0. 원시2차배열 출력 방법 - 배열값

    <%
            String members[][]={
                    {"김남준","김석진","민윤기","정호석"},
                    {"A","B","AB","O"}
            };
    %>
2-1. 원시 2차 배열 출력 
    <!-- 원시 2차 배열 출력방식 -->
    <cr:set var="dd" value="<%=members[1] %>"/>
    <cr:forEach var="cc" items="<%=members[0] %>" varStatus="no">
        고객명 : ${cc} / 혈액형 : ${dd[no.index]}<br>
    </cr:forEach><br><br>

'Spring' 카테고리의 다른 글

JSTL 외부 페이지 로드, 변수값 전송  (0) 2024.07.15
JSTL Split을 이용하여 출력하기  (0) 2024.07.15
Exception 예외처리  (0) 2024.07.12
Spring - I/O + DB gallaryboard 제작  (0) 2024.07.11
Spring - I/O 파일 업로드, 저장  (0) 2024.07.11