Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

Everything has an expiration date

[JSP] 20231221 [JSTL 프로그램 소스] - Test3, Test4, Test5, Test6, MyData, Test6_result 본문

[JSP & Servlet]/Program source (JSP & Servlet)

[JSP] 20231221 [JSTL 프로그램 소스] - Test3, Test4, Test5, Test6, MyData, Test6_result

Jelly-fish 2023. 12. 26. 01:13

 

WebApp22


 

학습한 EL문 정리
◎ 【if 문 (EL)】
( * eqauls의 경우, `test="${str.equals('abc') }"` 와 같이 홑 따옴표로 비교값 작성)

<c:if test="${조건식 }"></c:if>​



◎ 【변수에 값 설정】
<c:set var="result" value="1"></c:set>​



◎ 【반복문 구성】

<c:forEach var="변수명" begin="시작값" end="끝값" step="증감값"></c:forEach>​



◎ 【for each 문 구성】

<c:forEach var="변수명" items="${자료구조명}"></c:forEach>​



◎ 【<만약, 값이 비어있지 않다면>을 EL의 if 문으로 구성】

<c:if test="${!empty param.a }"></c:if>​



◎ 【<만약, 값이 짝수라면>을 EL의 if 문으로 구성】

<c:if test="${param.a % 2 == 0}"></c:if>​


 

◎ 【<만약, 값이 홀수라면>을 EL의 if 문으로 구성】

<c:if test="${param.a % 2 != 0}"></c:if>​


 

 


【EL 테스트 및 관찰】 - Test3 (스크립트릿 → EL 방식으로의 변경 실습) 
▷ 『request.getParameter("su1")』 : `${param.su1 }`
▷ 『request.setAttribute("result", "EL 테스트")』 : `${result }`

 

Test3.jsp

 


Test3.jsp

 

 

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<% 
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
%>
<%
	request.setAttribute("result", "EL 테스트 및 관찰");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>

<div>
	<h1>EL 관련 실습</h1>
	<hr>
</div>

<div>
	<!-- 자기 자신에게 요청, 데이터 전송 -->
	<!-- action 속성 생략 → su1 과 su2 데이터를 전송하며 요청하는 페이지는 자기 자신~!!! -->
	<form method="post">
		정수1 <input type="text" name="su1" class="txt"><br>
		정수2 <input type="text" name="su2" class="txt"><br>
		<br>
		<button type="submit" class="btn">결과 확인</button>
	</form>
	
</div>
<br>
<div>
	<h2>폼 데이터 수신</h2>

	<!-- 폼의 데이터를 수신하는 방법 1 -->
	<h3><%=request.getParameter("su1") %></h3>
	<!-- 처음 페이지를 요청했을 때, 값이 없으므로 『null』로 표시 -->
	
	<!-- 폼의 데이터를 수신하는 방법 2 -->
	<h3>${param.su1 }</h3>
	<!-- 처음 페이지를 요청했을 때, 『null』을 표시하지 않고 아무것도 표시되지 않음 -->
	<!-- 값이 들어온 후에만 값이 표시된다. -->
	
</div>
<br><br>

<div>
	<h2>폼의 데이터를 받아 연산 수행</h2>
	
	<!-- 폼의 데이터를 받아 연산을 수행하는 방법 1 -->
	<%	
		String s1 = request.getParameter("su1");
		String s2 = request.getParameter("su2");
		
		int s = 0;
		
		if (s1!=null && s2!=null)
		{
			s = Integer.parseInt(s1) + Integer.parseInt(s2);
		}
	%>
	<h3>합 : <%=s %></h3>


	<!-- 폼의 데이터를 받아 연산을 수행하는 방법 2 -->
	
	<!-- 값을 초기화 해 주지 않아도 자동으로 값이 0으로 초기화 된 상태로 표시된다. -->
	<!-- su1, su2는 getParameter로 가져왔을때 String이지만 자동으로 int형 변환된다. -->
	<!-- null을 바로 보여주지 않고, 초기값 0을 찍어준다. -->
	<h3>합 : ${param.su1 + param.su2 }</h3>
	<!-- → 파라미터 수신도 알아서... -->
	<!-- → 필요한 캐스팅도 알아서 자동으로 수행... -->
	<!-- → null 을 대하는 방식... -->	
	
	
</div>
<br /><br />

<div>
	<h2>setAttribute() 로 넘긴 데이터 수신</h2>
	
	<!-- setAttribute() 로 넘긴 데이터를 수신하는 방법 1 -->
	<h3><%=(String)request.getAttribute("result") %></h3>
	
	<!-- setAttribute() 로 넘긴 데이터를 수신하는 방법 2 -->
	<h3>${result }</h3>
	
</div>


</body>
</html>

 


 

【EL 테스트 및 관찰】 - Test4.jsp (EL을 통한 if문 실습)
▷ `<c:if test="${조건식 }"></c:if>`

 

Test4.jsp


Test4.jsp

 

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<% 
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test4.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>

<div>
	<h1>JSTL 코어(Core) if문 실습</h1>
	<hr />
</div>


<div>
	<!-- form 태그의 action 속성 생략 → 전송하는 데이터의 수신처는 자기 자신 -->
	<form action="" method="post">
		정수
		<input type="text" name="su" class="txt">
		<br /><br />
		
		<button type="submit" class="btn">결과 확인</button>
	</form>
</div>
<br /><br />

<div>
	<%-- <h2>${param.su }</h2> --%>
	
	<%-- 『<c:if test=""></c:if>』 : JSTL Core if문 --%>
	<!-- 『test=""』  : 조건식 지정. 파라미터로 수신한 su 값이 존재한다면... -->
	<!-- 『param.su』 : EL을 이용한 폼 전송 데이터 수신하는 부분 -->	
	
	<c:if test="${!empty param.su}">
		
		<!-- <h2>있다~!!!</h2> -->
		
		<!-- 파라미터로 수신한 su가 짝수라면... -->
		
		<c:if test="${param.su % 2 == 0 }">
			<h2>${param.su } : 짝수</h2>
		</c:if>
		<!-- JSTL 태그에는 else 가 존재하지 않는다 -->
		
		<!-- JSTL Core if 에는 ... if 는 있지만 else 는 없다. -->
		<c:if test="${param.su % 2 != 0 }">
			<h2>${param.su } : 홀수</h2>
		</c:if>		
		
		
	</c:if>
	
</div>



</body>
</html>

 

 


 

 

【EL 테스트 및 관찰】 - Test5.jsp (EL을 통한 반복문 실습)
▷ `<c:forEach var="변수" begin="시작값" end="끝값" step="증감값"></c:forEach>`

 

Test5.jsp


 

Test5.jsp

 

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<% 
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test5.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>

<div>
	<h1>JSTL 코어(Core) forEach문 실습</h1>
	<hr />
</div>

<div>
	<table class="table">
		
		<!-- JSTL 코어(Core) 반복문  -->
		<%-- <c:forEach var="변수" begin="시작값" end="끝값" step="증가값"> --%>
		<c:forEach var="a" begin="1" end="9" step="1">		<!-- a → 1 2 3 4 5 6 7 8 9 -->
		<tr>
			<c:forEach var="b" begin="1" end="9" step="1"> <!-- b → 1 2 3 4 5 6 7 8 9 -->
			<td style="width: 20px;">
				${a*b }
			</td>
			</c:forEach>
		</tr>
		
		</c:forEach>
	
	</table>
</div>


</body>
</html>

 

 


【EL 테스트 및 관찰】 - Test6.jsp, MyData.java, Test6_result.jsp
(lists를 setAttribute()한 후 forward한 데이터를 EL로 수신 → 향상된 for문 (for each)으로 항목 꺼내기.)
▷ `request.setAttribute("lists", lists)`
▷ `<c:forEach var="dto" items-"${lists }">`
▷ `${dto.name }`, `${dto.age }`

 

 

Test6.jsp, Test6_result.jsp(실제 출력 페이지)


Test6.jsp

 

<%@page import="java.util.ArrayList"%>
<%@page import="com.test.MyData"%>
<%@page import="java.util.List"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<% 
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
%>
<% 
	// Test6.jsp
	//-- 사용자 정의 데이터타입을 취하는 자료구조 생성
	
	List<MyData> lists = new ArrayList<MyData>();

	MyData ob = new MyData("길현욱", 15);
	lists.add(ob);
	
	ob = new MyData("최혜인", 23);
	lists.add(ob);
	
	ob = new MyData("정한울", 24);
	lists.add(ob);
	
	ob = new MyData("문정환", 16);
	lists.add(ob);
	
	ob = new MyData("이윤수", 8);
	lists.add(ob);

	ob = new MyData("임하성", 17);
	lists.add(ob);
	
	request.setAttribute("lists", lists);
	
	
%>

<jsp:forward page="Test6_result.jsp"></jsp:forward>

 


 

MyData.java (이름, 나이 객체 JavaBean)

 

/*==================================
 	MyData.java
 	- 사용자 정의 데이터타입 활용
====================================*/

package com.test;

public class MyData
{
	// 주요 속성 구성
	private String name;
	private int age;
	
	// default 생성자 형태의 사용자 정의 생성자
	public MyData()
	{
	}
	
	// 매개변수 2개 사용자 정의 생성자
	public MyData(String name, int age)
	{
		this.name = name;
		this.age = age;
	}
	
	// getter / setter 구성
	// 생략

}

 


 

Test6_result.jsp

 

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<% 
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test6_result.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>


<div>
	<h2>JSTL 코어(Core) forEach문 실습</h2>
	<h3>자료구조 활용</h3>
	<hr>
</div>


<div>
	<table class="table">
		<tr>
			<th>이름</th>
			<th>나이</th>
		</tr>
			
		<!-- 컬렉션 객체 접근용(출력용) 반복문 구성 -->
		
		<!-- 반복문을 통해서 제어해야 하는 값이 자료구조라면 -->
		<!-- 속성 값 중 items 속성을 가장 먼저 쓰세요. -->
		<!-- items (자료구조를 명시하는 부분.) -->
		
		<!-- getParameter()로 받은것은 param. -->
		<!-- Attribute로 받은 것은 EL로 해당 이름을 쓰기만 하면 된다. -->
		
		<c:forEach var="dto" items="${lists }">
		<!--       --------  ★=============== (자료구조) -->
		<!--(꺼내서 하나씩 담을 변수)-->
		<tr>
		<!-- Javabean 구조로 넘어온 변수들을 EL은 자신이 직접 get 메소드 호출하여 가져온다. -->
			<td style="text-align: center;">${dto.name }</td>
			<td style="text-align: center;">${dto.age }</td>
		</tr>
		</c:forEach>
		
	</table>
</div>


</body>
</html>