[jsp] <c:set> 태그를 이용한 실습 - 2

hoonak·2023년 9월 7일
0

JSP

목록 보기
9/12

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

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

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

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

  • varStatus의 속성
  1. index - int : items에서 정의한 항목을 가리키는 index 번호임. 0부터 시작함.

  2. count - int : 몇 번째 반복인지 나타냄. 1부터 시작함.

  3. first - boolean : 첫 번째 반복인지 나타냄.

  4. last - boolean : 마지막 반복인지 나타냄.

  • 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.*"
    isELIgnored="false"
    pageEncoding="UTF-8"%>
<%@ 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를 할당함. -->
<c:set var = "list" value = "<%=dataList %>"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<!-- 반복 변수 i를 1부터 10까지 1씩 증가시키면서 반복문을 수행함. -->
	<c:forEach var = "i" begin = "1" end = "10" step = "1" varStatus = "loop">
		i = ${i } &nbsp;&nbsp;&nbsp; 반복횟수 : ${loop.count }<br>
	</c:forEach>
	<br>
    
	<!-- 반복 변수 i를 1부터 10까지 2씩 증가시키면서 반복문을 수행함. -->
	<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>

이번에는 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.*"
    isELIgnored="false"
    pageEncoding="UTF-8"%>
<%@ 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");
	
	// 세 명의 회원 정보를 MemberBean에 저장한 후 다시 ArrayList에 저장함.
	membersList.add(m1);
	membersList.add(m2);
	membersList.add(m3);
%>
<c:set var = "membersList" value = "<%=membersList %>"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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 = "7%"><b>이름</b></td>
			<td width = "7%"><b>이메일</b></td>
		</tr>
		<!-- membersList에 저장된 회원 수만큼 반복 변수 i를 0부터 1씩 증가시키면서 forEach 문을 실행함. -->
		<c:forEach var = "i" begin = "0" end = "2" step = "1">
		<tr align = "center">
			<!-- 반복 변수 i를 ArrayList의 인덱스로 사용해 회원 정보를 차례대로 출력함. -->
			<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>

  • member8.jsp

이번에는 c:forEach문의 items 속성에 membersList를 할당한 후 실행해 자동으로 var의 member에 membersList의 MemberBean 객체가 차례대로 할당되도록 작성함.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    import = "java.util.*, sec01.ex01.*"
    isELIgnored="false"
    pageEncoding="UTF-8"%>
<%@ 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);
%>
<c:set var = "membersList" value = "<%=membersList %>"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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 = "7%"><b>이름</b></td>
			<td width = "7%"><b>이메일</b></td>
		</tr>
		<!-- 반복문을 수행하면서 memberList에 저장된 MemberBean 객체가 차례대로 member에 할당됨. -->
		<c:forEach var = "member" items = "${membersList }">
		<tr align = "center">
			<!-- 반복 변수 i를 ArrayList의 인덱스로 사요애해 회원 정보를 차례대로 출력함. -->
			<td>${member.id }</td>
			<td>${member.pwd }</td>
			<td>${member.name }</td>
			<td>${member.email }</td>
		</tr>
		</c:forEach>
	</table>

</body>
</html>

<c:url> 태그를 이용한 실습

<c:url> 테그는 jsp 페이지에서 url 정보를 저장하는 역할을 하며, 사용 형식은 다음과 같음.

<c:url var = "변수이름" value = "url경로" [scope = "scope 속성 중 하나"]
	[<c:param name = "매개변수이름" value = "전달값" />]
...
</c:url>

여기서 var는 생성된 url이 저장된 변수를, value는 생성할 url을, scope는 scope 속성의 값을 지정함.

  • urlTest.jsp

c:url 태그를 이용해 다른 페이지로 이동하면서 데이터를 전달함. 따라서 이동할 페이지로 전달할 데이터가 많을 경우에 사용하면 편리함.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    import = "java.util.*"
    isELIgnored="false"
    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 = "/test01/member1.jsp">
	<!-- 이동할 페이지로 전달할 데이터를 설정함. -->
	<c:param name = "id" value = "hong"/>
	<c:param name = "pwd" value = "1234"/>
	<c:param name = "name" value = "홍길동"/>
	<c:param name = "email" value = "hong@test.com"/>
</c:url>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<!-- <a href = '${contextPath }/test01/member1.jsp'>회원정보출력</a> -->
	
	<!-- c:url 태그의 변수 이름을 간단하게 설정함. -->
	<a href = '${url1 }'>회원정보출력</a>

</body>
</html>


회원정보출력을 클릭함.

매개변수로 전달된 회원 정보를 출력함(member1.jsp에서 ${속성}을 ${param.속성}으로 수정할 것).

<c:redirect> 태그를 이용한 실습

<c:redirect> 태그는 지정된 jsp 페이지로 리다이렉트할 때 사용함. response.sendRedirect() 기능과 동일하며 <c:redirect> 태그로 리다이렉트할 때 매개변수를 전달할 수 있음.

사용 형식은 다음과 같음.

<c:redirect url = "redirect할 URL">
	[<c:param name = "매개변수이름" value = "전달값"/>]
    ...
</c:redirect>

여기서 url은 리다이렉트 될 url이 저장될 변수를 지정함.

  • redirectTest.jsp

<c:redirect> 태그를 이용해 회원 정보 출력창으로 리다이렉트함. 리다이렉트하면서 회원 정보를 매개변수로 전달함.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    isELIgnored="false"
    pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 리다이렉트할 페이지를 설정함. -->
	<c:redirect url = "/test01/member1.jsp">
		<!-- 리다이렉트할 페이지로 전달할 매개변수를 설정함. -->
		<c:param name = "id" value = "${'hong' }"/>
		<c:param name = "pwd" value = "${'1234' }"/>
		<c:param name = "name" value = "${'홍길동' }"/>
		<c:param name = "email" value = "${'hong@test.com' }"/>
	</c:redirect>

</body>
</html>

http:localhost:8090/pro14/test3/redirectTest.jsp로 요청하면 test01/member1.jsp로 리다이렉트 됨. 그러면서 매개변수로 전달한 회원 정보를 출력함.

<c:out> 태그를 이용한 실습

<c:out> 태그는 화면에 지정한 값을 출력해 주는 태그임. 표현 언어와 기능은 거의 동일하지만 기본값 설정 기능 등을 제공하므로 더 편리하게 사용할 수 있음.

사용 형식은 다음과 같음.

<c:out value = "출력값" default = "기본값" [escapeXml = "boolean값"] />

여기서 value는 출력할 값을, default는 value 속성에 지정된 값이 없을 때 출력할 기본값을, escapeXml은 escape 문자를 변환하는 역할을 함(생략할 수 있으며 기본값은 true).

  • memberForm.jsp

다음은 회원 가입창에서 입력한 회원 정보를 전달받아 <c:out> 태그를 이용해 화면에 출력하는 예제임. 다음과 같이 memberForm.jsp를 작성해 회원 가입창에서 회원 정보를 입력한 후 member9.jsp로 전달함.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    isELIgnored="false"
    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">
<title>Insert title here</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>
		</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>


<c:out> 태그를 이용해 전송된 회우너 정보를 출력함.

프로그래밍을 하다 보면 > 또는 < 그리고 작은따옴표(')나 큰따옴표(") 같은 특수 문자를 출력해야 하는 경우가 있음. 그런데 이런 특수 문자들은 html 태그에도 사용되므로 각각의 특수문자에 지정된 문자를 이용해서 브라우저에 출력해야 함.

  • escapeXml이 false일 때 반환되는 문자
< : &lt;

> : &gt;

& : &amp;

' : &#039;

" : &#034;

... : ...

간단히 특수 문자 사용 예를 실습해 보겠음.

  • escapeXml.jsp

<c:out> 태그의 escapeXml 속성을 이용해 변환된 문자를 특수 문자로 변환함.

<%@ 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">
<title>Insert title here</title>
</head>
<body>

	<h2>escapeXml 변환하기</h2>
	<h2>
		<pre>
			<!-- escapeXml 속성이 true이므로 value의 &lt는 그대로 화면에 출력 됨. -->
			<c:out value = "&lt;" escapeXml = "true"/> 
			<!-- escapeXml 속성이 false이므로 value의 &lt는 해당하는 특수 문자로 변환되어 화면에 출력함. -->
			<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"/>
			
			<c:out value = "&#039;" escapeXml = "true"/>
			<c:out value = "&#039;" escapeXml = "false"/>
			
			<c:out value = "&#034;" escapeXml = "true"/>
			<c:out value = "&#034;" escapeXml = "false"/>
		</pre>		
	</h2>

</body>
</html>


지금까지 일반적으로 많이 사용하는 코어 라이브러리에 대해 알아봤음. 그 외 <c:import> 태그는 <jsp:include>와 같은 기능을 수행함.

profile
Hello World!

0개의 댓글