ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 22. JSTL
    개발자 수업/JSP 2021. 12. 15. 00:43

    1. 커스텀 태그 (Custom Tag)
        1) 액션 태그나 표현 언어를 사용하더라도 조건식이나 반복문 등의 자바 코드를 제거하기 위해 도입된 기능

    2. 커스텀 태그 종류
        1) JSTL(JSP Standard Tag Library)
            - 라이브러리 따로 설치해서 사용함
        2) 개발자가 만든 커스텀 태그
            - 스프링 프레임워크에서 미리 만들어서 제공

    3. 표준 태그 라이브러리
        1) 가장 많이 사용되는 태그를 표준화하여 라이브러리로 제공
            - Core 태그 : 변수 선언, 조건문/반복문, URL 처리
            - Formatting 태그 : 숫자, 날짜, 시간 포맷 지정
            - XML 태그 : XML 파싱
            - Function 태그 : 컬렉션 처리, 문자열 처리
            - SQL 태그 : DB 연결 및 쿼리 실행

    4. Core 태그 라이브러리
        1) 사용 전 반드시 taglib 디렉티브 태그를 선언해야 함
            <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
        2) set, remove, if, choose, forEach, forTokens, import, redirect, url, out, catch
            - <c:set> 형식
                - <c:set var="변수 이름" value="변수 값" scope=""/>
                - <c:set> 태그로 빈 속성이름 줄여서 사용할 수 있음

            - <c:remove> 형식
                - <c:remove var="변수 이름" scope=""/>
            - <c:if> 형식
                - <c:if test="${조건식 }" var="변수 이름(조건식의 결과값을 저장)" scope="">
                    ...
                  </c:if>
            - <c:choose> 형식 (switch문 기능)
                - <c:choose>
                <c:when test="조건식1">본문내용</c:when>
                <c:when test="조건식2">본문내용</c:when>
                    ...
                <c:otherwise>본문내용n</c:otherwise>
                  </c:choose>
            - <c:forEach> 형식
                - <c:forEach var="반복할 변수 이름" 
                             items="반복할 객체 이름"
                             begin="반복 시작값" 
                             end="반복 마지막값" 
                             step="한 번 반복할 때마다 반복 변수를 증가(시킬) 값"
                             varStatus="반복상태 변수 이름(속성)">
                                        index : items에서 정의한 항목을 가리키는 index (0부터 시작)
                                        count : 몇 번째 반복인지 나타냄 (1부터 시작)
                                        first : 첫 번째 반복을 나타냄
                                        last : 마지막 반복을 나타냄
                                        (예:loop) 
                  </c:forEach>
            - <c:url> 형식
                - <c:url var="url이 저장된 변수 이름" value="url경로" scope="">
                [<c:param name="매개변수이름" value="전달값"/>]
                  </c:url>
            - <c:redirect> 형식
                - response.sendRedirect() 기능을 대체함
                - <c:redirect url="redirect할 url">
            [<c:param name="매개변수 이름" value="전달값"/>]
              </c:redirect>
            - <c:out> 형식
                - 화면에 지정한 값을 출력하는 기능
                - <c:out value="출력할 값" default="기본값" escapeXml="boolean값"/>

     

    5. 국제화(다국어, Formatting) 태그 라이브러리
        1) 국가별로 다양한 언어, 날짜, 시간, 숫자 형식을 설정할 때 사용
        2) <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
        3) 숫자 포맷
            - <fmt:formatNumber>
                - <fmt:formatNumber value="출력할 숫자" groupingUsed="세 자리마다 콤마 출력여부 결정, 기본값 true"
            type="출력 양식 설정, percent, currency, number" var="출력할 숫자를 변수에 저장함" pattern="출력할 숫자의 양식을 패턴으로 지정"/>
            - <fmt:parseNumber>
                - <fmt:parseNumber value="파싱할 문자열" pattern="패턴" var="변수 설정" integerOnly="정수만 파싱"/>
           날짜 포맷
            - <fmt:formatDate>
                - <fmt:formatDate value="출력할 날짜" type="출력 양식 - date, time, both"
            dataStyle="날짜 스타일 - default, short, medium, long, full"
            timeStyle="시간 스타일 - default, short, medium, long, full"/>
           타임존 설정
            - <fmt:timeZone>
           로케일 설정
            - <fmt:setLocale>


     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- core 태그 라이브러리를 사용하기 위해서 반드시 선언해야 함 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    <!-- <c:set> 태그 이용해 변수 선언함 value 속성에는 EL 사용해서 초기화 -->
    <c:set var="id" value="ezen700" scope="page"/>
    <c:set var="pwd" value="0311" scope="page"/>
    <c:set var="name" value="${'이순신' }" scope="page"/>
    <c:set var="age" value="${30 }" scope="page"/>
    <c:set var="height" value="${180 }" scope="page"/>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>회원 정보 출력</title>
    </head>
    <body>
    	<table border="1" align="center">
    		<tr align="center" bgcolor="#99ccff">
    			<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>
    		<tr align="center">
    			<td>${id }</td>			<!-- EL로 변수에 바로 접근하여 값 출력 -->
    			<td>${pwd }</td>
    			<td>${name }</td>
    			<td>${age }</td>
    			<td>${height }</td>
    		</tr>
    	</table>
    </body>
    </html>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <c:set var="contextPath" value="${pageContext.request.contextPath }"/>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>로그인</title>
    </head>
    <body>
    	<form action="result.jsp">
    		아이디 : <input type="text" size="20"><br>
    		비밀번호 : <input type="password" size="20"><br>
    		<input type="submit" value="로그인">
    		<input type="reset" value="다시입력"><br><br>
    		<!-- 직접 컨텍스트 이름을 입력해 요청함 -->
    		<a href="http://localhost:8080/chap14_EL/jstl01/memberForm.jsp">회원 가입하기</a><br>
    		
    		<!-- request의 getContextPath() 이용해 컨텍스트 이름을 가져옴 -->
    		<a href="<%=request.getContextPath() %>/jstl01/memberForm.jsp">회원 가입하기</a><br>
    		
    		<!-- 자바 코드 상용하지 않고 pageContext의 속성인 request의 contextPath 속성으로 컨텍스트 이름을 가져옴-->
    		<a href="${contextPath}/jstl01/memberForm.jsp">회원 가입하기</a>
    	</form>
    </body>
    </html>


    <%@page import="kr.co.ezenac.jstl.MemberBean"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- core 태그 라이브러리를 사용하기 위해서 반드시 선언해야 함 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    <jsp:useBean id="membersList" class="java.util.ArrayList" />
    <jsp:useBean id="membersMap" class="java.util.HashMap" />
    
    <%
    	membersMap.put("id", "ezen100");
    	membersMap.put("pwd", "0311");
    	membersMap.put("name", "이젠IT");
    	membersMap.put("email", "ezen100@gmail.com");
    	MemberBean m1 = new MemberBean("lee", "0311", "이순신", "lee@gmail.com");
    	MemberBean m2 = new MemberBean("shin", "0311", "신사임당", "shin@gmail.com");
    	membersList.add(m1);
    	membersList.add(m2);
    	membersMap.put("membersList", membersList);
    	
    %>
    <%-- c:set 태그로 HashMap에 저장된 ArrayList에 접근하기 위해 좀 더 편리한 이름으로 설정함 --%>
    <c:set var="membersList" value="${membersMap.membersList }"/>
    
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>회원 정보 출력</title>
    </head>
    <body>
    	<table border="1" align="center">
    		<tr align="center" bgcolor="#99ccff">
    			<td width="20%"><b>아이디</b></td>
    			<td width="20%"><b>비밀번호</b></td>
    			<td width="20%"><b>이름</b></td>
    			<td width="20%"><b>이메일</b></td>
    		</tr>
    		<tr align="center">
    			<td>${membersMap.id }</td>
    			<td>${membersMap.pwd }</td>
    			<td>${membersMap.name }</td>
    			<td>${membersMap.email }</td>
    		</tr>
    		<tr align="center">
    			<td>${membersList[0].id }</td>		<!-- c:set 태그로 설정한 변수 이름으로 접근해서 출력 -->
    			<td>${membersList[0].pwd }</td>
    			<td>${membersList[0].name }</td>
    			<td>${membersList[0].email }</td>
    		</tr>
    		<tr align="center">
    			<td>${membersList[1].id }</td>
    			<td>${membersList[1].pwd }</td>
    			<td>${membersList[1].name }</td>
    			<td>${membersList[1].email }</td>
    		</tr>
    	</table>
    </body>
    </html>


    <%@page import="kr.co.ezenac.jstl.MemberBean"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- core 태그 라이브러리를 사용하기 위해서 반드시 선언해야 함 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    
    <c:set var="id" value="ezen700" scope="page"/>
    <c:set var="pwd" value="0311" scope="page"/>
    <c:set var="name" value="${'이순신' }" scope="page"/>
    <c:set var="age" value="${30 }" scope="page"/>
    <c:set var="height" value="${180 }" scope="page"/>
    <c:remove var="age"/>		<!-- 변수 age와 height를 삭제하 -->
    <c:remove var="height"/>
    
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>회원 정보 출력</title>
    </head>
    <body>
    	<table border="1" align="center">
    		<tr align="center" bgcolor="#99ccff">
    			<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>
    		<tr align="center">
    			<td>${id }</td>			<!-- EL로 변수에 바로 접근하여 값 출력 -->
    			<td>${pwd }</td>
    			<td>${name }</td>
    			<td>${age }</td>
    			<td>${height }</td>
    		</tr>
    	</table>
    </body>
    </html>


    <%@page import="kr.co.ezenac.jstl.MemberBean"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- core 태그 라이브러리를 사용하기 위해서 반드시 선언해야 함 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    
    <c:set var="id" value="ezen700" scope="page"/>
    <c:set var="pwd" value="0311" scope="page"/>
    <c:set var="name" value="${'이순신' }" scope="page"/>
    <c:set var="age" value="${30 }" scope="page"/>
    <c:set var="height" value="${180 }" scope="page"/>
    
    
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>조건문</title>
    </head>
    <body>
    	<c:if test="${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=='ezen700') && (name=='이순신')}">
    		<h1>아이디는 ${id }이고, 이름은 ${name }입니다.</h1>
    	</c:if>
    </body>
    </html>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>Insert title here</title>
    </head>
    <body>
    	<!-- 변수 선언 -->
    	<c:set var="number" value="100"/>
    	<c:set var="string" value="JSP"/>
    	
    	<c:if test="${number mod 2 eq 0 }">
    		${number } 짝수입니다.<br>
    	</c:if>
    	
    	<c:if test="${string eq 'JAVA' }" var="result">
    		문자열은 JAVA입니다.<br>
    	</c:if>
    	
    	<c:if test="${not result }">
    		'JAVA'가 아닙니다.<br>
    	</c:if>
    	
    	<h4>조건식 주의사항</h4>
    	<c:if test="100" var="result2">
    		EL이 아닌 정수를 지정하면 false
    	</c:if>
    	result2 : ${result2 }<br>
    	
    	<c:if test="tRuE" var="result3">
    		대소문자 구분없이 "tRuE"인 경우 true<br>
    	</c:if>
    	result3 : ${result3 }<br>
    	
    	<c:if test="${ true }" var="result4">
    		EL 양쪽에 빈 공백이 있는 경우 true<br>
    	</c:if>
    	result4 : ${result4 }<br>
    </body>
    </html>


    <%@page import="kr.co.ezenac.jstl.MemberBean"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- core 태그 라이브러리를 사용하기 위해서 반드시 선언해야 함 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    
    <c:set var="id" value="ezen700" scope="page"/>
    <c:set var="pwd" value="0311" scope="page"/>
    <c:set var="name" value="${'이순신' }" scope="page"/>
    <c:set var="age" value="${30 }" scope="page"/>
    <c:set var="height" value="${180 }" scope="page"/>
    
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>회원 정보 출력</title>
    </head>
    <body>
    	<table border="1" align="center">
    		<tr align="center" bgcolor="#99ccff">
    			<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="${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>


    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <%
    	List<String> dataList = new ArrayList();
    	dataList.add("hello");
    	dataList.add("world");
    	dataList.add("좋은 아침입니다.");
    %>
    <c:set var="list" value="<%=dataList %>"/>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<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>
    	
    	<!-- ArrayList 컬렉션 객체에 저장된 데이터를 반복해서 반복변수 data에 하나씩 가져와 처리 -->
    	<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>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>choose/when/otherwise</title>
    	
    	<c:set var="number" value="100" />
    	<h4>choose 태그로 홀짝 판단하기</h4>
    	<c:choose>
    		<c:when test="${number mod 2 eq 0 }">
    			${number }는 짝수입니다.
    		</c:when>
    		<c:otherwise>
    			${number }는 홀수입니다.
    		</c:otherwise>
    	</c:choose>
    	<br>
    	
    	<h4>국,영,수 점수를 입력하면 평균을 구해 학점을 출력하시오</h4>
    	<form>
    		국어 : <input type="text" name="kor"><br>
    		영어 : <input type="text" name="eng"><br>
    		수학 : <input type="text" name="math"><br>
    		<input type="submit" value="학점 구하기">
    	</form>
    	
    	<!-- 모든 과목 점수가 입력되었는지 체크 -->
    	<c:if test="${not (empty param.kor or empty param.eng or empty param.math) }">
    		<!-- 평균 계산 -->
    		<c:set var="avg" value="${(param.kor + param.eng + param.math) / 3 }"/>
    		평균 점수는 ${avg }점이고, 
    		<!-- 학점 출력 -->
    		<c:choose>
    			<c:when test="${avg >= 90 }">A학점</c:when>
    			<c:when test="${avg >= 80 }">B학점</c:when>
    			<c:when test="${avg >= 70 }">C학점</c:when>
    			<c:when test="${avg >= 60 }">D학점</c:when>
    			<c:otherwise>F학점</c:otherwise>
    		</c:choose>
    		입니다.
    	</c:if>
    </head>
    <body>
    
    </body>
    </html>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>JSTL - forEach</title>
    </head>
    <body>
    	<h4>일반 for문 형태의 forEach 태그</h4>
    	<c:forEach begin="1" end="3" step="1" var="i">
    		<p>반복 ${i }입니다.</p>
    	</c:forEach>
    	
    	<h4>varStatus 속성 확인하기</h4>
    	<table border="1">
    		<c:forEach begin="3" end="5" var="i" varStatus="loop">
    			<tr>
    				<td>count : ${loop.count }</td>
    				<td>index : ${loop.index }</td>
    				<td>current : ${loop.current }</td>
    				<td>first : ${loop.first }</td>
    				<td>last : ${loop.last }</td>
    			</tr>
    		</c:forEach>
    	</table>
    	
    	<h4>1에서 100까지 정수 중 홀수의 합</h4>
    		<c:forEach begin="1" end="100" step="1" var="i" varStatus="">
    			<c:if test="${i mod 2 ne 0 }">
    				<c:set var="sum" value="${sum + i }"/>
    			</c:if>
    		</c:forEach>
    	1~100 사이의 정수 중 홀수의 합은? ${sum }
    </body>
    </html>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>JSTL - forEach 태그</title>
    </head>
    <body>
    	<h4>향상된 for문 형태의 forEach 태그</h4>
    	<%
    		String[] rgba = {"Red", "Green", "Blue", "Black"};
    	%>
    	
    	<c:forEach items="<%=rgba %>" var="c">
    		<span style="color: ${c};">${c }</span>
    	</c:forEach>
    	
    	<h4>varStatus 속성 확인</h4>
    	<table border="1">
    		<c:forEach items="<%=rgba %>" var="c" varStatus="loop">
    			<tr>
    				<td>count: ${loop.count }</td>
    				<td>index: ${loop.index }</td>
    				<td>current: ${loop.current }</td>
    				<td>first: ${loop.first }</td>
    				<td>last: ${loop.last }</td>
    			</tr>
    		</c:forEach>
    		
    	</table>
    </body>
    </html>


    package kr.co.ezenac.jstl;
    
    public class Person {
    	private String name;
    	private int age;
    	
    	public Person() {
    		// TODO Auto-generated constructor stub
    	}
    
    	public Person(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    	
    	
    }
    <%@page import="java.util.HashMap"%>
    <%@page import="java.util.Map"%>
    <%@page import="kr.co.ezenac.jstl.Person"%>
    <%@page import="java.util.List"%>
    <%@page import="java.util.LinkedList"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>JSTL - forEach 태그</title>
    </head>
    <body>
    	<h4>List 컬렉션 사용하기</h4>
    	<%
    		List<Person> lists = new LinkedList<>();
    		lists.add(new Person("이순신", 30));
    		lists.add(new Person("이도", 40));
    		lists.add(new Person("신사임당", 50));
    	%>
    	<c:set var="lists" value="<%=lists %>" />
    	<c:forEach items="${lists }" var="list">
    		<li>
    			이름 : ${list.name }, 나이 : ${list.age }
    		</li>
    	</c:forEach>
    	
    	<h4>Map 컬렉션 사용하기</h4>
    	<%
    		Map<String,Person> maps = new HashMap<>();
    		maps.put("1st", new Person("이순신", 30));
    		maps.put("2st", new Person("이도", 40));
    		maps.put("3rd", new Person("신사임당", 50));
    	%>
    	<c:set var="maps" value="<%=maps %>"/>
    	<c:forEach items="${maps }" var="map">
    		<li>
    			Key -> ${map.key }<br>
    			Value -> 이름 : ${map.value.name }, 나이 : ${map.value.age }
    		</li>
    	</c:forEach>
    </body>
    </html>


    package kr.co.ezenac.jstl;
    
    import java.sql.Date;
    
    public class MemberBean {
    	private String id;
    	private String pwd;
    	private String name;
    	private String email;
    	private Date joinDate;
    	
    	public MemberBean() {
    		// TODO Auto-generated constructor stub
    	}
    
    	public MemberBean(String id, String pwd, String name, String email) {
    		//super();
    		this.id = id;
    		this.pwd = pwd;
    		this.name = name;
    		this.email = email;
    	}
    
    	public String getId() {
    		return id;
    	}
    
    	public void setId(String id) {
    		this.id = id;
    	}
    
    	public String getPwd() {
    		return pwd;
    	}
    
    	public void setPwd(String pwd) {
    		this.pwd = pwd;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String getEmail() {
    		return email;
    	}
    
    	public void setEmail(String email) {
    		this.email = email;
    	}
    
    	public Date getJoinDate() {
    		return joinDate;
    	}
    
    	public void setJoinDate(Date joinDate) {
    		this.joinDate = joinDate;
    	}
    	
    }
    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@page import="kr.co.ezenac.jstl.MemberBean"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- core 태그 라이브러리를 사용하기 위해서 반드시 선언해야 함 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    <%
    	List<MemberBean> membersList = new ArrayList<>();
    	MemberBean m1 = new MemberBean("ezen100", "0311", "이순신", "ezen100@gmail.com");
    	MemberBean m2 = new MemberBean("ezen200", "0311", "신사임당", "ezen200@gmail.com");
    	MemberBean m3 = new MemberBean("ezen300", "0311", "이도", "ezen300@gmail.com");
    	membersList.add(m1);
    	membersList.add(m2);
    	membersList.add(m3);
    %>
    <c:set var="membersList" value="<%=membersList %>"/>
    
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>회원 정보 출력</title>
    </head>
    <body>
    	<table border="1" align="center">
    		<tr align="center" bgcolor="#99ccff">
    			<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: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>


    import java.sql.Date;
    
    public class MemberBean {
    	private String id;
    	private String pwd;
    	private String name;
    	private String email;
    	private Date joinDate;
    	
    	public MemberBean() {
    		// TODO Auto-generated constructor stub
    	}
    
    	public MemberBean(String id, String pwd, String name, String email) {
    		//super();
    		this.id = id;
    		this.pwd = pwd;
    		this.name = name;
    		this.email = email;
    	}
    
    	public String getId() {
    		return id;
    	}
    
    	public void setId(String id) {
    		this.id = id;
    	}
    
    	public String getPwd() {
    		return pwd;
    	}
    
    	public void setPwd(String pwd) {
    		this.pwd = pwd;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String getEmail() {
    		return email;
    	}
    
    	public void setEmail(String email) {
    		this.email = email;
    	}
    
    	public Date getJoinDate() {
    		return joinDate;
    	}
    
    	public void setJoinDate(Date joinDate) {
    		this.joinDate = joinDate;
    	}
    	
    }
    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@page import="kr.co.ezenac.jstl.MemberBean"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- core 태그 라이브러리를 사용하기 위해서 반드시 선언해야 함 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    <%
    	List<MemberBean> membersList = new ArrayList<>();
    	MemberBean m1 = new MemberBean("ezen100", "0311", "이순신", "ezen100@gmail.com");
    	MemberBean m2 = new MemberBean("ezen200", "0311", "신사임당", "ezen200@gmail.com");
    	MemberBean m3 = new MemberBean("ezen300", "0311", "이도", "ezen300@gmail.com");
    	membersList.add(m1);
    	membersList.add(m2);
    	membersList.add(m3);
    %>
    <c:set var="membersList" value="<%=membersList %>"/>
    
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>회원 정보 출력</title>
    </head>
    <body>
    	<table border="1" align="center">
    		<tr align="center" bgcolor="#99ccff">
    			<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>
    		
    		<!-- 반복문 수행하면서 membersList에 저장된 MemberBean 객체가 차례대로 member 할당됨 -->
    		<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>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <c:set var="contextPath" value="${pageContext.request.contextPath }"/>
    <!-- c:url 태그로 이동할 페이지 설정 -->
    <c:url var="url1" value="../jstl01/member01.jsp">
    	<c:param name="id" value="ezen300"/>	<!-- 이동할 페이지로 전달할 데이터 설정 -->
    	<c:param name="pwd" value="0311"/>
    	<c:param name="name" value="이순신"/>
    	<c:param name="email" value="ezen300@gmail.com"/>
    </c:url>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>c:url 테스트</title>
    </head>
    <body>
    	<%-- <a href="${contextPath}/jstl01/member1.jsp">회원정보 출력</a> --%>
    	<a href="${url1 }">회원정보 출력</a>
    </body>
    </html>

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- core 태그 라이브러리를 사용하기 위해서 반드시 선언해야 함 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>회원 정보 출력</title>
    </head>
    <body>
    	<table border="1" align="center">
    		<tr align="center" bgcolor="#99ccff">
    			<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>
    		<tr align="center">
    			<td>${param.id }</td>		
    			<td>${param.pwd }</td>
    			<td>${param.name }</td>
    			<td>${param.email }</td>
    		</tr>
    	</table>
    </body>
    </html>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>JSTL - url</title>
    </head>
    <body>
    	<h4>url 태그로 링크 걸기</h4>
    	<c:url value="../jstl01/inc/urlPage.jsp" var="url">
    		<c:param name="userParam1" value="ezen500"/>
    		<c:param name="userParam2">ezen900</c:param>
    	</c:url>
    	<a href="${url }">urlPage.jsp 바로가기</a>
    </body>
    </html>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <h4>urlPage.jsp</h4>
    <ul>
    	<li>매개변수 1 : ${param.userParam1 }</li>
    	<li>매개변수 2 : ${param.userParam2 }</li>
    </ul>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>리다이렉트 테스트</title>
    </head>
    <body>
    	<c:redirect url="../jstl01/member01.jsp">		<!-- 리다이렉트 할 페이지 설정 -->
    		<c:param name="id" value="${'ezen700' }"/>	<!-- 리다이렉트 할 페이지로 전달할 매개변수 설정 -->
    		<c:param name="pwd" value="${'0311' }"/>
    		<c:param name="name" value="${'이순신' }"/>
    		<c:param name="email" value="${'ezen700@gmail.com' }"/>
    	
    	</c:redirect>
    </body>
    </html>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- core 태그 라이브러리를 사용하기 위해서 반드시 선언해야 함 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>회원 정보 출력</title>
    </head>
    <body>
    	<table border="1" align="center">
    		<tr align="center" bgcolor="#99ccff">
    			<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>
    		<tr align="center">
    			<td>${param.id }</td>		
    			<td>${param.pwd }</td>
    			<td>${param.name }</td>
    			<td>${param.email }</td>
    		</tr>
    	</table>
    </body>
    </html>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>jstl - redirect</title>
    </head>
    <body>
    	<c:set var="requestVar" value="ezen1000" />
    	<c:redirect url="../jstl01/inc/urlPage.jsp">
    		<c:param name="userParam1" value="서울시"/>
    		<c:param name="userParam2" value="서초구"/>
    	</c:redirect>
    </body>
    </html>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <h4>urlPage.jsp</h4>
    <ul>
    	<li>매개변수 1 : ${param.userParam1 }</li>
    	<li>매개변수 2 : ${param.userParam2 }</li>
    </ul>


    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@page import="kr.co.ezenac.jstl.MemberBean"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- core 태그 라이브러리를 사용하기 위해서 반드시 선언해야 함 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>회원 정보 출력</title>
    </head>
    <body>
    	<table border="1" align="center">
    		<tr align="center" bgcolor="#99ccff">
    			<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="${empty param.id }">
    				<tr align="center">
    					<td colspan="5">아이디를 입력하세요.</td>
    				</tr>
    			</c:when>
    			<c:otherwise>
    				<tr align="center">
    					<td><c:out value="${param.id }"/></td>
    					<td><c:out value="${param.pwd }"/></td>
    					<td><c:out value="${param.name }"/></td>
    					<td><c:out value="${param.email }"/></td>
    				</tr>
    			</c:otherwise>
    		</c:choose>
    	</table>
    </body>
    </html>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>JSTL - out</title>
    </head>
    <body>
    	<c:set var="iTag">
    		i 태그는 <i>기울임</i>을 표현합니다.
    	</c:set>
    	
    	<h4>기본 사용</h4>
    	<c:out value="${iTag }"/>
    	
    	<!-- 
    		escapeXml이 false일 때 변환되는 문자
    		<		&lt;
    		>		&gt;
    		&		&amp;
    		escapeXml 속성이 true이면 value의 값이 그대로 화면에 출력됨
    		escapeXml 속성이 false이면 value의 값이 특수문자로 변환되어 화면에 출력됨 
    	 -->
    	<h4>escapeXml 속성</h4>
    	<c:out value="${iTag }" escapeXml="false"/>
    	
    	<h2>escapeXml 변환하기</h2>
    	<h2>
    		<pre>
    			<c:out value="&lt;" escapeXml="true"/>
    			<c:out value="&lt;" escapeXml="false"/>
    			<c:out value="&gt;" escapeXml="true"/>
    			<c:out value="&gt;" escapeXml="false"/>
    			<c:out value="&amp;" escapeXml="true"/>
    			<c:out value="&amp;" escapeXml="false"/>
    		</pre>
    	</h2>
    	
    	<h4>default 속성</h4>
    	<c:out value="${param.name }" default="이름 없음"/>
    	<c:out value="" default="빈 문자열도 값입니다."/>
    </body>
    </html>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!-- c:set 이용해 pageContext 내장 객체의 컨텍스트 이름을 변수 contextPath에 설정함 -->
    <c:set var="contextPath" value="${pageContext.request.contextPath }"/>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>로그인</title>
    </head>
    <body>
    	<form action="result2.jsp">
    		아이디 : <input type="text" name="userID" size="20"><br>
    		비밀번호 : <input type="password" name="userPW" size="20"><br>
    		<input type="submit" value="로그인">
    		<input type="reset" value="다시입력"><br><br>
    	</form>
    </body>
    <
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>결과화면2</title>
    </head>
    <body>
    	<c:if test="${empty param.userID }">	<!-- empty 연산자를 이용해 ID 값이 비었는지 체크 -->
    		아이디를 입력하세요. <br>
    		<a href="login.jsp">로그인</a>
    	</c:if>
    	<c:if test="${not empty param.userID }">	<!-- ID가 null 아님 체크 -->
    		<c:if test="${param.userID == 'admin' }">	<!-- ID가 admin이면 관리자 화면 출력 -->
    			<h1>관리자로 로그인 했습니다.</h1>
    			<form>
    				<input type="button" value="회원정보 수정하기">
    				<input type="button" value="회원정보 삭제하기">
    			</form>
    		</c:if>
    		<c:if test="${param.userID != 'admin' }">	<!-- ID가 admin이 아니면 로그인 메세지 출력 -->
    			<h1>환영합니다. <c:out value="${param.userID }"/>님!</h1>
    		</c:if>
    	</c:if>
    </body>
    </html>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>시험 점수 입력</title>
    </head>
    <body>
    	<h1>시험 점수를 입력해 주세요.</h1>
    	<form action="scoreResult2.jsp">
    		시험점수 : <input type="text" name="score"><br>
    		<input type="submit" value="학점변환">
    	</form>
    </body>
    </html>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>학점 변환 화면</title>
    </head>
    <body>
    	<c:set var="score" value="${param.score }"/>	<!-- param.score를 score 변수에 할당 -->
    	<h1>시험 점수 <c:out value="${score }"/></h1>
    	<c:choose>
    		<c:when test="${score >= 0 && score <= 100 }">
    			<c:choose>
    				<c:when test="${score >= 90 && score <= 100 }">
    					<h1>A학점 입니다.</h1>
    				</c:when>
    				<c:when test="${score >= 80 && score <= 90 }">
    					<h1>B학점 입니다.</h1>
    				</c:when>
    				<c:when test="${score >= 70 && score <= 80 }">
    					<h1>C학점 입니다.</h1>
    				</c:when>
    				<c:when test="${score >= 60 && score <= 70 }">
    					<h1>D학점 입니다.</h1>
    				</c:when>
    				<c:otherwise>
    					<h1>F학점 입니다.</h1>
    				</c:otherwise>
    			</c:choose>
    		</c:when>
    		<c:otherwise>
    			<h1>점수를 잘못 입력했습니다. 다시 입력하세요.</h1>
    			<a href="scoreTest.jsp">점수 입력</a>
    		</c:otherwise>
    	</c:choose>
    </body>
    </html>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>JSTL - fmt1</title>
    </head>
    <body>
    	<h4>숫자 포맷 설정</h4>
    	<c:set var="number1" value="12345"/>
    	콤마 O : <fmt:formatNumber value="${number1 }"/><br>
    	콤마 X : <fmt:formatNumber value="${number1 }" groupingUsed="false"/><br>
    	<fmt:formatNumber value="${number1 }" type="currency" var="printNum1"/><br>
    	통화기호 : ${printNum1 }<br>
    	<fmt:formatNumber value="0.03" type="percent" var="printNum2"/><br>
    	퍼센트 : ${printNum2 }<br>
    	
    	<h4>문자열을 숫자로 변경</h4>
    	<c:set var="number2" value="6,789.01"/>
    	<fmt:parseNumber value="${number2 }" pattern="00,000.00" var="printNum3"/>
    	소수점까지 출력 : ${printNum3 }<br>
    	<fmt:parseNumber value="${number2 }" integerOnly="true" var="printNum4"/>
    	정수만 출력 : ${printNum4 }<br>
    </body>
    </html>


    <%@page import="java.util.Date"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>JSTL - fmt2</title>
    </head>
    <body>
    	<c:set var="today" value="<%=new Date() %>"/>
    	
    	<h4>날짜 포맷</h4>
    	full : <fmt:formatDate value="${today }" type="date" dateStyle="full"/><br>
    	short : <fmt:formatDate value="${today }" type="date" dateStyle="short"/><br>
    	long : <fmt:formatDate value="${today }" type="date" dateStyle="long"/><br>
    	default : <fmt:formatDate value="${today }" type="date" dateStyle="default"/><br>
    	
    	<h4>시간 포맷</h4>
    	full : <fmt:formatDate value="${today }" type="time" dateStyle="full"/><br>
    	short : <fmt:formatDate value="${today }" type="time" dateStyle="short"/><br>
    	long : <fmt:formatDate value="${today }" type="time" dateStyle="long"/><br>
    	default : <fmt:formatDate value="${today }" type="time" dateStyle="default"/><br>
    	
    	<h4>날짜/시간 표시</h4>
    	<fmt:formatDate value="${today }" type="both" dateStyle="full" timeStyle="full"/><br>
    	<fmt:formatDate value="${today }" type="both" pattern="yyyy-MM-dd hh:mm:ss"/><br>
    	
    	<h4>타임존 설정</h4>
    	<fmt:timeZone value="GMT">
    		<fmt:formatDate value="${today }" type="both" dateStyle="full" timeStyle="full"/><br>
    	</fmt:timeZone>
    	<fmt:timeZone value="America/Los_Angeles">
    		<fmt:formatDate value="${today }" type="both" dateStyle="full" timeStyle="full"/><br>
    	</fmt:timeZone>
    </body>
    </html>


    package kr.co.ezenac.util;
    
    import java.util.TimeZone;
    
    public class TimezoneTest {
    	public static void main(String[] args) {
    		
    		String[] timezone = TimeZone.getAvailableIDs();
    		for(String zoneId : timezone) {
    			System.out.println("타임존 영역 : " + zoneId);
    		}
    	}
    }


    <%@page import="java.util.Date"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>JSTL - fmt3</title>
    </head>
    <body>
    	<h4>로케일 설정</h4>
    	<c:set var="today" value="<%=new Date() %>"/>
    	
    	한글로 설정 : <fmt:setLocale value="ko_kr"/>
    	<fmt:formatNumber value="10000" type="currency"/> / 
    	<fmt:formatDate value="${today }"/><br>
    	
    	일어로 설정 : <fmt:setLocale value="ja_JP"/>
    	<fmt:formatNumber value="10000" type="currency"/> / 
    	<fmt:formatDate value="${today }"/><br>
    	
    	영어로 설정 : <fmt:setLocale value="en_US"/>
    	<fmt:formatNumber value="10000" type="currency"/> / 
    	<fmt:formatDate value="${today }"/><br>
    </body>
    </html>


    mem.name = 이순신
    mem.address = 서울시 서초구
    mem.job = 개발자
    mem.name = \uc774\uc21c\uc2e0
    mem.address = \uc11c\uc6b8\uc2dc \uc11c\ucd08\uad6c
    mem.job = \uac1c\ubc1c\uc790
    mem.name = Admiral Yi
    mem.address = Seocho-gu, Seoul
    mem.job = developer
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>JSTL 다국어 기능</title>
    </head>
    <body>
    	<%-- <fmt:setLocale value="ko_KR"/> --%>		<!-- locale을 한글로 지정 -->
    	<fmt:setLocale value="en_US"/>					<!-- locale을 영어로 지정 -->
    	
    	<h1>
    		회원정보<br><br>
    		<fmt:bundle basename="kr.co.ezenac.resource.member">	<!-- 패키지 아래 member 프로퍼티 파일 읽어옴 -->
    			이름 : <fmt:message key="mem.name"/><br>		<!-- fmt:message 태그의 key 속성에 프로퍼티 파일의 key 지정 -->
    			주소 : <fmt:message key="mem.address"/><br>
    			직업 : <fmt:message key="mem.job"/><br>
    		</fmt:bundle>
    	</h1>
    </body>
    </html>


    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>회원 가입창</title>
    </head>
    <body>
    	<form action="memberAction.jsp">
    		<h1 style="text-align: center;">회원 가입창</h1>
    		<table align="center">
    			<tr>
    				<td width="200">
    					<p align="right">아이디</p>
    				</td>
    				<td width="400">
    					<input type="text" name="id">
    				</td>
    			</tr>
    			<tr>
    				<td width="200">
    					<p align="right">비밀번호</p>
    				</td>
    				<td width="400">
    					<input type="password" name="pwd">
    				</td>
    			</tr>
    			<tr>
    				<td width="200">
    					<p align="right">이름</p>
    				</td>
    				<td width="400">
    					<input type="text" name="name">
    				</td>
    			</tr>
    			<tr>
    				<td width="200">
    					<p align="right">이메일</p>
    				</td>
    				<td width="400">
    					<input type="text" name="email">
    				</td>
    			</tr>
    			<tr>
    				<td width="200">
    					<p align="right">&nbsp;</p>
    				</td>
    				<td width="400">
    					<input type="submit" value="가입하기">
    					<input type="reset" value="다시입력">
    				</td>
    			</tr>
    		</table>
    	</form>
    </body>
    </html>
    <%@page import="kr.co.ezenac.member.MemberBean"%>
    <%@page import="java.util.List"%>
    <%@page import="kr.co.ezenac.member.MemberDAO"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>Insert title here</title>
    	<jsp:useBean id="m" class="kr.co.ezenac.member.MemberBean"/>
    	<jsp:setProperty property="*" name="m"/>
    	
    	<%
    		MemberDAO memberDAO = new MemberDAO();
    		memberDAO.addMember(m);
    		List<MemberBean> membersList = memberDAO.listMembers();
    		request.setAttribute("membersList", membersList);	/* 조회한 회원 정보를 request에 바인딩함 */
    	%>
    </head>
    <body>
    	<jsp:forward page="membersList.jsp"/>	<!-- membersList.jsp로 포워딩함 -->
    </body>
    </html>
    package kr.co.ezenac.member;
    
    import java.sql.Date;
    
    public class MemberBean {
    	private String id;
    	private String pwd;
    	private String name;
    	private String email;
    	private Date joinDate;
    	
    	public MemberBean() {
    		// TODO Auto-generated constructor stub
    	}
    
    	public MemberBean(String id, String pwd, String name, String email) {
    		//super();
    		this.id = id;
    		this.pwd = pwd;
    		this.name = name;
    		this.email = email;
    	}
    
    	public String getId() {
    		return id;
    	}
    
    	public void setId(String id) {
    		this.id = id;
    	}
    
    	public String getPwd() {
    		return pwd;
    	}
    
    	public void setPwd(String pwd) {
    		this.pwd = pwd;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String getEmail() {
    		return email;
    	}
    
    	public void setEmail(String email) {
    		this.email = email;
    	}
    
    	public Date getJoinDate() {
    		return joinDate;
    	}
    
    	public void setJoinDate(Date joinDate) {
    		this.joinDate = joinDate;
    	}
    	
    }
    package kr.co.ezenac.member;
    
    import java.sql.Connection;
    import java.sql.Date;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.sql.DataSource;
    
    public class MemberDAO {
    	private Connection conn;
    	private PreparedStatement pstmt;
    	private DataSource dataFactory;
    	
    	public MemberDAO() {
    		try {
    			Context ctx = new InitialContext();
    			Context envContext = (Context)ctx.lookup("java:/comp/env");		//JNDI에 접근하기 위해 기본경로를 지정
    			//톰캣 context.xml에 설정한 name 값인 jdbc/oracle을 이용해 톰캣이 미리 연결한 DataSource를 받아옴
    			dataFactory = (DataSource)envContext.lookup("jdbc/oracle");		
    		} catch (NamingException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public List<MemberBean> listMembers() {
    		List<MemberBean> list = new ArrayList<MemberBean>();
    		
    		try {
    			conn = dataFactory.getConnection();	//DataSource를 이용해 DB에 연결함
    			
    			String query = "SELECT * FROM T_MEMBER";
    			System.out.println(query);
    			
    			pstmt = conn.prepareStatement(query);	//prepareStatement()메서드에 SQL문을 전달해 객체 생성함
    			ResultSet rs = pstmt.executeQuery();	//미리 설정한 SQL문을 실행함
    			
    			while(rs.next()) {
    				String id = rs.getString("id");
    				String pwd = rs.getString("pwd");
    				String name = rs.getString("name");
    				String email = rs.getString("email");
    				Date joinDate = rs.getDate("joinDate");	//조회한 레코드의 각 컬럼 값을 받아옴
    				
    				MemberBean vo = new MemberBean();
    				vo.setId(id);
    				vo.setPwd(pwd);
    				vo.setName(name);
    				vo.setEmail(email);
    				vo.setJoinDate(joinDate);				//각 컬럼 값을 다시 MemberVO 객체의 속성에 설정함
    				
    				list.add(vo);							//설정된 MemberVO 객체를 다시 ArrayList에 저장함
    			}
    			
    			rs.close();
    			pstmt.close();
    			conn.close();
    			
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		
    		return list;				//조회한 레코드의 개수만큼 MemberVO 객체를 저장한 ArrayList를 반환함
    	}
    	
    	public void addMember(MemberBean MemberBean) {
    		try {
    			conn = dataFactory.getConnection();		// DataSource를 이용해 DB 연결
    			
    			String id = MemberBean.getId();			// 테이블에 저장할 회원 정보 받아옴
    			String pwd = MemberBean.getPwd();
    			String name = MemberBean.getName();
    			String email = MemberBean.getEmail();
    			
    			String query = "insert into t_member (id, pwd, name, email) values (?, ?, ?, ?)";
    			System.out.println("prepareStatement: " + query);
    			
    			pstmt = conn.prepareStatement(query);
    			
    			pstmt.setString(1, id);					//insert문의 ?에 순서대로 회원 정보 세팅
    			pstmt.setString(2, pwd);
    			pstmt.setString(3, name);
    			pstmt.setString(4, email);
    			
    			pstmt.executeUpdate();
    			pstmt.close();
    			
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    }
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%
    	request.setCharacterEncoding("utf-8");
    %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>회원정보출력</title>
    </head>
    <body>
    	<table align="center" border="1">
    		<tr aligh="center" bgcolor="lightgreen">
    			<td width="7%">아이디</td>
    			<td width="7%">비밀번호</td>
    			<td width="5%">이름</td>
    			<td width="11%">이메일</td>
    			<td width="5%">가입일</td>
    		</tr>
    		<c:choose>
    			<c:when test="${membersList == null }">
    				<tr>
    					<td colspan="5">
    						<b>등록된 회원이 없습니다.</b>
    					</td>
    				</tr>
    			</c:when>
    			<c:when test="${membersList != null }">
    				<c:forEach var="mem" items="${membersList }">
    					<tr align="center">
    						<td>${mem.id }</td>
    						<td>${mem.pwd }</td>
    						<td>${mem.name }</td>
    						<td>${mem.email }</td>
    						<td>${mem.joinDate }</td>
    					</tr>
    				</c:forEach>
    			</c:when>
    		</c:choose>
    	</table>
    </body>
    </html>

    '개발자 수업 > JSP' 카테고리의 다른 글

    24. jQuery Ajax  (0) 2021.12.20
    23. 파일 업로드 다운로드  (0) 2021.12.16
    21. 표현 언어(EL)  (0) 2021.12.15
    20. 게시판 만들기(모델1) 업로드 예정  (0) 2021.12.15
    19. 액션태그  (0) 2021.12.09

    댓글