관리 메뉴

거니의 velog

(14) 표현 언어와 JSTL 5 본문

Java/Java_JSP

(14) 표현 언어와 JSTL 5

Unlimited00 2023. 9. 15. 19:53

(3) <c:if> 태그를 이용한 실습

* <c:if> 태그는 이름에서도 알 수 있듯이 JSP 페이지에서 조건문을 대체해 사용하는 태그이며, 사용 형식은 다음과 같다.

<c:if test="${조건식}" var="변수이름" [scope="scope 속성 중 하나"] />
	...
</c:if>

* 여기서 test는 표현 언어를 이용해 수행할 조건식 위치를, var는 조건식의 결과값을 저장한다. 또한 scope는 변수의 스코프를 지정(page, request, session, application 중 하나)한다.

* 그럼 <c:if> 태그를 이용해 조건문을 사용해 보자.

1. 다음과 같이 member4.jsp를 작성한다. <c:if> 태그의 test 속성에는 표현 언어 안에 비교 연산자나 논리 연산자로 조건식을 수행한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
  request.setCharacterEncoding("UTF-8");
%>

<c:set var="id" value="hong" scope="page" />
<c:set var="pwd" value="1234" scope="page" />
<c:set var="name" value="${'홍길동'}" scope="page" />
<c:set var="age" value="${22}" scope="page" />
<c:set var="height" value="${177}" scope="page" />

<html lang="ko">

    <head>
        <meta charset="UTF-8">
        <title>조건문 실습</title>
    </head>

    <body>
        <c:if test="${true}"> <!-- 조건식이 true이므로 항상 참이다. -->
            <h1>항상 참입니다.</h1>
        </c:if>

        <c:if test="${11==11}"> <!-- 조건식에 비교 연산자를 사용한다. -->
            <h1>두 값은 같습니다.</h1>
        </c:if>

        <c:if test="${11!=31}"> <!-- 조건식에 비교 연산자를 사용한다. -->
            <h1>두 값은 같지 않습니다.</h1>
        </c:if>

        <c:if test="${(id=='hong') && (name=='홍길동')}"> <!-- 조건식에 논리 연산자를 사용한다. -->
            <h1>아이디는 ${id}이고, 이름은 ${name }입니다.</h1>
        </c:if>

        <c:if test="${age==22}">
            <h1>${name }의 나이는 ${age}살입니다.</h1>
        </c:if>

        <c:if test="${height>160}">
            <h1>${name }의 키는 160보다 큽니다.</h1>
        </c:if>
    </body>

</html>

2. 다음의 주소로 요청하여 실행 결과를 확인한다.

- http://localhost:8090/pro14/test03/member4.jsp


(4) <c:choose> 태그를 이용한 실습

* <c:choose> 태그는 JSP 페이지에서 switch문의 기능을 수행하며, 사용 형식은 다음과 같다.

<c:choose>
    <c:when test="조건식1">본문내용1</c:when>
    <c:when test="조건식2">본문내용2</c:when>
	...
    <c:otherwise>본문내용n</c:otherwise>
</c:choose>

* 첫 번째 <c:when> 태그의 조건식1을 체크해서 참이면 본문내용1을 수행하고 만약 거짓이면 다음 <c:when>의 조건식2를 체크해서 참이면 본문내용2를 수행한다. 모든 조건이 거짓이면 <c:otherwise> 태그의 본문 내용을 수행한다.

1. 다음과 같이 member5.jsp를 작성한다. <c:choose> 태그를 이용해 name 값의 유무에 따라 다른 결과를 표시한다. 만약 name 값이 정상적이면 회원 정보를 출력하고 name이 null이거나 빈 문자열이면 오류 메시지를 출력한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
  request.setCharacterEncoding("UTF-8");
%>

<c:set var="id" value="hong" scope="page" />
<c:set var="pwd" value="1234" scope="page" />
<c:set var="name"  value="${'홍길동'}" scope="page" />
<%-- <c:set var="name"  value="${'홍길동'}" scope="page" /> --%>
<c:set var="age" value="${22}" scope="page" />
<c:set var="height" value="${177}" scope="page" />

<html lang="ko">

    <head>
        <meta charset="UTF-8">
        <title>회원 정보 출력 창</title>
    </head>

    <body>
        <table align="center" border="1">
            <tr align="center" bgcolor="lightgreen">
                <td width="7%"><b>아이디</b></td>
                <td width="7%"><b>비밀번호</b></td>
                <td width="7%"><b>이름</b></td>
                <td width="7%"><b>나이</b></td>
                <td width="7%"><b>키</b></td>
            </tr>
            <c:choose>
                <%-- <c:when test="${name==null}"> --%>
                <c:when test="${empty name}"> <!-- 변수 name이 null이거나 빈 문자열인지 체크한다. -->
                    <tr align="center">
                        <td colspan=5>이름을 입력하세요!!</td>
                    </tr>
                </c:when>
                <c:otherwise> <!-- name이 정상적이면 회원 정보를 출력한다. -->
                    <tr align="center">
                        <td>${id}</td>
                        <td>${pwd}</td>
                        <td>${name}</td>
                        <td>${age}</td>
                        <td>${height}</td>
                    </tr>
                </c:otherwise>
            </c:choose>
        </table>
    </body>

</html>

2. 다음의 주소로 요청한다. 먼저 name 변수를 정상적으로 선언한 후 브라우저에서 요청 시 회원 정보를 출력한다.

- http://localhost:8090/pro14/test03/member5.jsp

3. 이번에는 다음과 같이 name 변수를 주석 처리한다.

4. 브라우저에서 재요청 시 오류 메시지를 출력한다.


(5) <c:forEach> 태그를 이용한 실습

* <c:forEach> 태그는 JSP 페이지에서 반복문을 수행하는 태그이며, 사용 형식은 다음과 같다.

<c:forEach items="반복할객체이름" begin="시작값" end="마지막값">
	step="증가값" varStatus="반복상태변수이름">
    ...
</c:forEach>

* 여기서 var는 반복한 변수 이름을, items는 반복할 객체 이름을 지정한다. begin과 end는 각각 반복 시작 및 종료 값을, step은 한 번 반복할 때마다 반복 변수를 증가시킬 값을, varStatus는 반복 상태 속성을 지정한다.

<varStatus의 속성>

속성 설명
index int items에서 정의한 항목을 가리키는 index 번호이다. 0부터 시작한다.
count int 몇 번째 반복인지 나타낸다. 1부터 시작한다.
first boolean 첫 번째 반복인지 나타낸다.
last boolean 마지막 반복인지 나타낸다.

* <c:forEach>로 반복문을 만들어 사용해 보자.

1. member6.jsp를 다음과 같이 작성한다. 먼저 자바 코드로 ArrayList 객체를 생성하여 문자열을 저장한 후 <c:forEach> 태그에서 사용할 수 있도록 <c:set> 태그로 변수 list에 재할당한다. 그리고 varStatus의 loop 속성을 이용해 반복 횟수를 출력한다. <c:forEach> 태그의 items에 ArrayList를 설정한 후 반복문 수행 시 ArrayList에 저장된 문자열을 반복 변수 data에 한 개씩 가져와 출력한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
     import="java.util.*"
    pageEncoding="UTF-8"
    isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
  List dataList=new ArrayList();
  dataList.add("hello");
  dataList.add("world");
  dataList.add("안녕하세요!!");
  
  // 표현 언어에서 사용할 수 있도록 <c:set> 태그를 이용해 변수에 dataList를 할당한다.

  // 반복 변수 i를 1부터 10까지 1씩 증가시키면서 반복문을 수행한다.
  // 반복 변수 i를 1부터 10까지 2씩 증가시키면서 반복문을 수행한다.
  // ArrayList 같은 컬렉션 객체에 저장된 객체(데이터)를 반복해서 반복 변수 data에 하나씩 가져와 처리한다.
  // 구분자 ,(콤마)를 이용해 문자열을 분리해서 출력한다.
%>

<c:set var="list" value="<%=dataList  %>" />

<html lang="ko">

    <head>
        <meta charset="UTF-8">
        <title>반복문 실습</title>
    </head>

    <body>
        <c:forEach var="i" begin="1" end="10" step="1" varStatus="loop">
            i= ${i} &nbsp;&nbsp;&nbsp; 반복횟수: ${loop.count} <br>
        </c:forEach>
        <br>
        <c:forEach var="i" begin="1" end="10" step="2">
            5 * ${i} = ${5*i}<br>
        </c:forEach>
        <br>
        <c:forEach var="data" items="${list}">
            ${data } <br>
        </c:forEach>
        <br>
        <c:set var="fruits" value="사과, 파인애플, 바나나, 망고, 귤" />
        <c:forTokens var="token" items="${fruits}" delims=",">
            ${token} <br>
        </c:forTokens>
    </body>

</html>

2. 다음의 주소로 요청하여 결과를 확인한다.

- http://localhost:8090/pro14/test03/member6.jsp

3. 이번에는 <c:forEach> 태그를 이용해 ArrayList에 저장된 회원 정보를 출력해 보자. <c:forEach> 태그를 이용하면 ArrayList에 저장된 객체에 편리하게 접근할 수 있다. 다음과 같이 <c:forEach> 태그의 반복 변수 i를 ArrayList의 인덱스로 사용해서 저장된 회원 정보를 차례대로 출력하도록 member7.jsp를 작성한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="java.util.*, sec01.ex01.*"
    pageEncoding="UTF-8" 
    isELIgnored="false"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>

<%
   request.setCharacterEncoding("UTF-8");
   List membersList = new ArrayList();	
   MemberBean m1 = new MemberBean("son","1234", "손흥민", "son@test.com");
   MemberBean m2 = new MemberBean("ki","4321", "기성용", "ki@test.com");
   MemberBean m3 = new MemberBean("park", "1212", "박지성", "park@test.com");
   membersList.add(m1);
   membersList.add(m2);
   membersList.add(m3); // 세 명의 회원 정보를 MemberBean에 저장한 후 다시 ArrayList에 저장한다.
   
   // memberList에 저장된 회원 수만큼 반복 변수 i를 0부터 1씩 증가시키면서 forEach문을 실행한다.
   // 반복 변수 i를 ArrayList의 인덱스로 사용해 회원 정보를 차례대로 출력한다.
%>

<c:set var="membersList" value="<%= membersList%>" />

<html>

    <head>
        <meta charset="UTF-8">
        <title>회원 정보 출력 창</title>
    </head>

    <body>
        <table border="1" align="center">
            <tr align="center" bgcolor="lightgreen">
                <td width="7%"><b>아이디</b></td>
                <td width="7%"><b>비밀번호</b></td>
                <td width="5%"><b>이름</b></td>
                <td width="5%"><b>이메일</b></td>
            </tr>
            <c:forEach var="i" begin="0" end="2" step="1">
                <tr align="center">
                    <td>${membersList[i].id}</td>
                    <td>${membersList[i].pwd}</td>
                    <td>${membersList[i].name}</td>
                    <td>${membersList[i].email}</td>
                </tr>
            </c:forEach>
        </table>
    </body>

</html>

4. 다음의 주소로 요청하여 결과를 확인한다.

- http://localhost:8090/pro14/test03/member7.jsp

5. 이번에는 <c:forEach>문의 items 속성에 memberList를 할당한 후 실행하여 자동으로 var의 member에 membersList의 MemberBean 객체가 차례대로 할당되도록 member8.jsp를 작성한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="java.util.*, sec01.ex01.*"
    pageEncoding="UTF-8" 
    isELIgnored="false"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%
   request.setCharacterEncoding("UTF-8");
   List membersList = new ArrayList();	
   MemberBean m1 = new MemberBean("son","1234", "손흥민", "son@test.com");
   MemberBean m2 = new MemberBean("ki","4321", "기성용", "ki@test.com");
   MemberBean m3 = new MemberBean("park", "1212", "박지성", "park@test.com");
   membersList.add(m1);
   membersList.add(m2);
   membersList.add(m3);
   
   // 반복문을 수행하면서 memberList에 저장된 MemberBean 객체가 차례대로 member에 할당된다.
   // 속성 이름으로 회원 정보를 차례대로 출력한다.
%>
<c:set var="membersList" value="<%= membersList%>" />
<html>

    <head>
        <meta charset="UTF-8">
        <title>회원 정보 출력 창</title>
    </head>

    <body>
        <table border="1" align="center">
            <tr align="center" bgcolor="lightgreen">
                <td width="7%"><b>아이디</b></td>
                <td width="7%"><b>비밀번호</b></td>
                <td width="5%"><b>이름</b></td>
                <td width="5%"><b>이메일</b></td>
            </tr>
            <c:forEach var="member" items="${membersList}">
                <tr align="center">
                    <td>${member.id}</td>
                    <td>${member.pwd}</td>
                    <td>${member.name}</td>
                    <td>${member.email}</td>
                </tr>
            </c:forEach>
        </table>
    </body>

</html>

6. 다음의 주소로 요청하여 결과를 확인한다.

- http://localhost:8090/pro14/test03/member8.jsp

'Java > Java_JSP' 카테고리의 다른 글

(16) 표현 언어와 JSTL 7  (0) 2023.09.18
(15) 표현 언어와 JSTL 6  (0) 2023.09.15
(13) 표현 언어와 JSTL 4  (0) 2023.09.15
(12) 표현 언어와 JSTL 3  (0) 2023.09.14
(11) 표현 언어와 JSTL 2  (0) 2023.09.14