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
<%@ 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
<%@ 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
<%@ 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
<%@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>