Everything has an expiration date
[JSP] 20231221 [JSTL 프로그램 소스] - Test7, Test8, Gugudan, Test9, MemberDTO, MemberInsertForm, MemberInsert 본문
[JSP & Servlet]/Program source (JSP & Servlet)
[JSP] 20231221 [JSTL 프로그램 소스] - Test7, Test8, Gugudan, Test9, MemberDTO, MemberInsertForm, MemberInsert
Jelly-fish 2023. 12. 26. 01:57
WebApp22
【EL 테스트 및 관찰】 - Test7.jsp (EL을 이용한 지수승 구하기)
Test7.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>Test7.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1>JSTL 코어(Core) set문 실습</h1>
<h2>지수승 구하기</h2>
<hr>
</div>
<div>
<p>『c:set』은 JSP 의 setAttribute() 와 같은 역할을 수행한다. </p>
<p>(page | request | session | application)
범위의 변수(속성)를 설정한다.</p>
<p>『c:remove』는 JSP 의 removeAttribute() 와 같은 역할을 수행한다. </p>
<p>(page | request | session | application)
범위의 변수(속성)를 제거한다.</p>
<p>scope 속성이 생략될 경우 기본 값(default)은 page이다.</p>
</div>
<div>
<!-- 수신처는 자기 자신~!!! -->
<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>
<div>
<!-- request.getParameter("su1")로 수행한 결과값이 존재할 경우 처리 -->
<c:if test="${!empty param.su1 }">
<%-- 『<c:set var="변수" value="값"></c:set>』 --%>
<%-- → 변수의 값을 지정하는 구문 --%>
<%-- → 해당 스코프에 지정된 변수가 존재하지 않을 경우
변수를 새로 선언하여 초기화 하는 기능을 수행하게 되며
해당 스코프에 이미 지정된 변수가 존재할 경우
그 변수의 값을 다시 초기화하는(덮어쓰기) 효과가 적용된다. --%>
<c:set var="result" value="1"></c:set>
<c:forEach var="a" begin="1" end="${param.su2 }" step="1">
<c:set var="result" value="${result * param.su1 }"></c:set>
<p>${param.su1 } ^ ${a } = ${result }</p>
</c:forEach>
</c:if>
</div>
</body>
</html>
【EL 테스트 및 관찰】 - Test8.jsp (EL choose문 실습)
EL - choose문 형식
<c:choose>
<c:when test="${조건식1 }">
보여질 내용1 (if)
</c:when>
<c:when test="${조건식2 }">
보여질 내용 2 (else if)
</c:when>
<c:otherwise>
위의 내용에 해당하지 않을 때(else)
</c:otherwise>
</c:choose>
0123
Test8.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>Test8.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1>JSTL 코어(Core) choose문 실습</h1>
<h2>배수 확인하기</h2>
<hr>
</div>
<div>
<form action="" method="post">
정수
<input type="text" name="su" class="txt">
<br /><br />
<button type="submit" class="btn">결과 확인</button>
</form>
</div>
<br /><br />
<div>
<c:if test="${!empty param.su }">
<%-- ${param.su } --%>
<%-- <c:choose></c:choose> --%>
<%-- <c:choose></c:choose> --%>
<%-- → JSTL Core 에서 if ~ else 를 대신할 수 있는 구문 --%>
<c:choose>
<%-- when : 조건 --%>
<%-- 연속적인 조건을 && 로 통해 구성할 때에는
test 내부 문자열 안의 ${ } 내부에 모두 작성하도록 하자.
--%>
<c:when test="${param.su % 3 == 0 && param.su % 4 == 0 }">
<p>${param.su }은(는) 3과 4의 배수~!!!</p>
</c:when>
<c:when test="${param.su % 3 == 0 }">
<p>${param.su }은(는) 3의 배수~!!!</p>
</c:when>
<c:when test="${param.su % 4 == 0 }">
<p>${param.su }은(는) 4의 배수~!!!</p>
</c:when>
<%-- else --%>
<c:otherwise>
<p>${param.su }은(는) 3 또는 4의 배수 아님</p>
</c:otherwise>
</c:choose>
</c:if>
</div>
<!-- 3의 배수
4의 배수
3과 4의 배수
3또는 4의 배수 아님 -->
<!-- 3과 4의 배수 ★ (이걸 먼저 판별!!0
3의 배수
4의 배수
3또는 4의 배수 아님 -->
</body>
</html>
【EL 테스트 및 관찰】 - Test5.jsp (EL을 통한 구구단 출력 실습 - 반복문 태그 사용)
Gugudan.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>Gugudan.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1>JSTL 코어(Core)를 활용한 구구단 출력</h1>
</div>
<div>
<form method="post">
원하는 단 입력
<input type="text" name="dan" class="txt">
<br /><br />
<button type="submit" class="btn">결과 확인</button>
</form>
</div>
<table class='table'>
<tr>
<td>
<c:if test="${!empty param.dan }">
<c:forEach var="i" begin="1" end="9" step="1">
<p>${param.dan} * ${i } = ${param.dan * i }</p>
</c:forEach>
</c:if>
</td>
</tr>
</table>
<!-- 선생님 풀이~!! -->
<!-- ul 태그를 사용하니까 리스트 형태로 되어서 이쁘다 ㅎㅎ -->
<div>
<!-- 결과 처리 -->
<%-- ${param.dan } --%>
<c:if test="${!empty param.dan }">
<ul>
<c:forEach var="su" begin="1" end="9" step="1">
<li>
${param.dan } * ${su } = ${param.dan * su }
</li>
</c:forEach>
</ul>
</c:if>
</div>
</body>
</html>
【EL 테스트 및 관찰】 - Test9.jsp (import를 통한 다른 페이지 HTML 가져오기.)
EL - import 태그 사용 형식
// Gugudan.jsp의 링크 주소 문자열을 변수 url에 저장.
<c:set var="url" value="Gugudan.jsp"></c:set>
// import를 수행 → url을 통해 가져온 페이지의 내용을 변수 impt에 저장.
<c:import url="${url }" var="impt">
// Gugudan.jsp 페이지의 dan 변수 값을 7로 세팅.
<c:param name="dan" value="7"></c:param>
</c:import>
01
Test9.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>Test9.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1>JSTL 코어(Core) import문 실습</h1>
<hr>
</div>
<div>
<p>『c:import』는 URL 처리에 관여하며,
URL 을 활용하여 다른 자원의 결과를 삽입할 때 사용한다.</p>
</div>
<br /><br />
<!-- 변수 지정 -->
<c:set var="url" value="Gugudan.jsp"></c:set>
<%-- import 를 수행 --%>
<c:import url="${url }" var="impt">
<%-- import 를 수행하며 해당 페이지가 필요로하는 파라미터 넘기기 --%>
<c:param name="dan" value="7"></c:param>
</c:import>
<!-- 결과 화면 출력 -->
<c:out value="${impt }"></c:out>
<!-- 결과 화면 출력 과정에서 HTML 코드를 그대로 출력하도록 처리하는 구문 -->
<!-- 『escapeXml』 속성의 기본값(default)은 true 로 설정되어 있다. -->
<br /><br />
<!-- escapeXml 속성을
true로 하게 되면, HTML 코드가 그대로 출력되지만
false로 하게 되면, import한 파일의 실행 결과가 그대로 페이지에 옮겨진다.
-->
<!-- 결과 화면 출력 -->
<c:out value="${impt }" escapeXml="false"></c:out>
</body>
</html>
지금까지의 JSTL(EL) 학습을 기반으로 한 실습 - 회원 다섯명의 정보를 한꺼번에 전송하여 출력
- MemberDTO, MemberInsertForm, MemberInsert, MemberList
01
MemberDTO - (JavaBean)
/*=======================
MemberDTO.java
=======================*/
package com.test;
public class MemberDTO
{
// 주요 속성 구성
private String name, tel, addr;
public MemberDTO()
{
}
public MemberDTO(String name, String tel, String addr)
{
this.name = name;
this.tel = tel;
this.addr = addr;
}
// getter / setter 구성
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getTel()
{
return tel;
}
public void setTel(String tel)
{
this.tel = tel;
}
public String getAddr()
{
return addr;
}
public void setAddr(String addr)
{
this.addr = addr;
}
/* private String name, tel, address; */
//
// public String getName()
// {
// return name;
// }
//
// public void setName(String name)
// {
// this.name = name;
// }
//
// public String getTel()
// {
// return tel;
// }
//
// public void setTel(String tel)
// {
// this.tel = tel;
// }
//
// public String getAddress()
// {
// return address;
// }
//
// public void setAddress(String address)
// {
// this.address = address;
// }
}
MemberInsertForm.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>MemberInsertForm.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
<style type="text/css">
td{text-align: center;}
</style>
</head>
<body>
<div>
<h2>JSTL 코어(Core)를 활용한 회원 정보 입력</h2>
<hr>
</div>
<!-- (이름, 전화번호, 주소) * 5명 분 -->
<!-- → submit 액션 처리 -->
<!--
input[type="text"][name="name$"].txt{이름}
input[type="text"][name="tel$"].txt{전화번호}
input[type="text"][name="address$"].txt{주소}
-->
<div>
<form action="MemberInsert.jsp" method="post">
<!--
<table border="1" class='table'>
<tr>
<th>이름</th>
<th>전화번호</th>
<th>주소</th>
</tr>
<tr>
<td>
<input type="text" name="name1" class="txt" />이름1
</td>
<td>
<input type="text" name="tel1" class="txt" />전화번호1
</td>
<td>
<input type="text" name="address1" class="txt" />주소1
</td>
</tr>
<tr>
<td>
<input type="text" name="name2" class="txt" />이름2
</td>
<td>
<input type="text" name="tel2" class="txt" />전화번호2
</td>
<td>
<input type="text" name="address2" class="txt" />주소2
</td>
</tr>
<tr>
<td>
<input type="text" name="name3" class="txt" />이름3
</td>
<td>
<input type="text" name="tel3" class="txt" />전화번호3
</td>
<td>
<input type="text" name="address3" class="txt" />주소3
</td>
</tr>
<tr>
<td>
<input type="text" name="name4" class="txt" />이름4
</td>
<td>
<input type="text" name="tel4" class="txt" />전화번호4
</td>
<td>
<input type="text" name="address4" class="txt" />주소4
</td>
</tr>
<tr>
<td>
<input type="text" name="name5" class="txt" />이름5
</td>
<td>
<input type="text" name="tel5" class="txt" />전화번호5
</td>
<td>
<input type="text" name="address5" class="txt" />주소5
</td>
</tr>
</table>
-->
<!-- (이름, 전화번호, 주소) * 5명 분 -->
<!-- → submit 액션 처리 -->
<table class="table">
<tr>
<th>이름</th>
<td>
<!--
<input type="text" name="name1"/>
<input type="text" name="name2"/>
<input type="text" name="name3"/>
<input type="text" name="name4"/>
<input type="text" name="name5"/>
-->
<c:set var="i" value="1"></c:set>
<c:forEach var="a" begin="1" end="5" step="1">
<%-- <input type="text" name="name${a }"> --%>
<input type="text" name="name${i }">
<c:set var="i" value="${i+1 }"></c:set>
</c:forEach>
</td>
</tr>
<tr>
<th>전화번호</th>
<td>
<!--
<input type="text" name="tel1"/>
<input type="text" name="tel2"/>
<input type="text" name="tel3"/>
<input type="text" name="tel4"/>
<input type="text" name="tel5"/>
-->
<c:set var="i" value="1"></c:set>
<c:forEach var="a" begin="1" end="5" step="1">
<%-- <input type="text" name="tel${a }"> --%>
<input type="text" name="tel${i }">
<c:set var="i" value="${i+1 }"></c:set>
</c:forEach>
</td>
</tr>
<tr>
<th>주소</th>
<td>
<!--
<input type="text" name="addr1"/>
<input type="text" name="addr2"/>
<input type="text" name="addr3"/>
<input type="text" name="addr4"/>
<input type="text" name="addr5"/>
-->
<c:set var="i" value="1"></c:set>
<c:forEach var="a" begin="1" end="5" step="1">
<%-- <input type="text" name="addr${a }"> --%>
<input type="text" name="addr${i }">
<c:set var="i" value="${i+1 }"></c:set>
</c:forEach>
</td>
</tr>
<tr>
<td colspan="2">
<button type="submit" class="btn" style="width:100%;">입력</button>
</td>
</tr>
</table>
<%--
<table class='table'>
<tr>
<th>이름</th>
<th>전화번호</th>
<th>주소</th>
</tr>
<c:forEach var="a" begin="1" end="5" step="1">
<tr>
<td>
<input type="text" name="name${a }" class="txt" />이름1
</td>
<td>
<input type="text" name="tel${a }" class="txt" />전화번호1
</td>
<td>
<input type="text" name="address${a }" class="txt" />주소1
</td>
</tr>
</c:forEach>
</table>
<button type="submit" class="btn">입력하기</button>
</form>
--%>
</div>
</body>
</html>
MemberInsert.jsp
`<jsp:forward page="MemberList.jsp">`를 통해, MemberList.jsp로 포워딩.
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.test.MemberDTO"%>
<%@ 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();
%>
<%
// MemberInsert.jsp
// 5명 분 데이터 수신 → 객체 구성 → 자료구조 구성 → setAttribute()
// MemberDTO
// → MemberList.jsp 에서 출력
List<MemberDTO> lists = new ArrayList<MemberDTO>();
for (int i = 1; i <= 5; i++) // i → 1 2 3 4 5
{
MemberDTO ob = new MemberDTO( request.getParameter("name" + i)
, request.getParameter("tel" + i )
, request.getParameter("addr" + i));
// DTO 구성이 됐을 때마다 lists 에 add() 해 준다.
lists.add(ob);
}
request.setAttribute("lists", lists);
// Req...(RequestDispatcher 사용도 가능하다...)
// 내 풀이 ㅎㅎ
/*
ArrayList<MemberDTO> dtoList = new ArrayList<MemberDTO>();
for (int i = 1; i <= 5; i ++)
{
MemberDTO dto = new MemberDTO();
dto.setName(request.getParameter("name" + i));
dto.setTel(request.getParameter("tel" + i));
dto.setAddr(request.getParameter("addr" + i));
//dto.setAddress(request.getParameter("address" + i));
dtoList.add(dto);
}
request.setAttribute("dtoList", dtoList);
*/
%>
<jsp:forward page="MemberList.jsp"></jsp:forward>
MemberList.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>MemberList.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1>JSTL 코어(Core) 문제 해결</h1>
<h2>회원 명단 출력</h2>
<hr>
</div>
<div>
<!-- 5명의 이름, 전화번호, 주소 출력 -->
<table border="1" class='table' style="text-align: center;">
<tr>
<th>이름</th>
<th>전화번호</th>
<th>주소</th>
</tr>
<%-- <c:forEach var="dto" items="${dtoList }"> --%>
<c:forEach var="dto" items="${lists }">
<tr>
<td>
${dto.name}
</td>
<td>
${dto.tel}
</td>
<td>
${dto.addr }
<%-- ${dto.address} --%>
</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>