2020. 12. 10. 10:18ㆍ교육과정/KOSMO
키워드 : EL(표현언어)
****
1. EL ( 표현언어) 기초 (교재 CH.11)
: 태그 형식
: JSP 페이지에서 가급적 자바코딩을 줄이기 위해 사용
: 꼭 필요한 곳에는 자바 코딩을 사용해야 한다.
(1) EL을 비롯한 다양한 방법을 사용하여 VO에서 데이터 출력하기
(06_el_class/1_info/InfoSave.jsp 파일)
① 자바빈즈 사용
이 름 : <jsp:getProperty property="name" name="info"><br/>
주민번호 : <jsp:getProperty property="gender" name="info"><br/>
성 별 : <jsp:getProperty property="id" name="info"><br/>
② 자바코딩 사용
이 름 : <%= info.getName() %><br/>
주민번호 : <%= info.getId() %><br/>
성 별 : <%= info.getGender() %><br/>
③ EL 사용
이 름 : ${info.name}<br/>
주민번호 : ${info.id}<br/>
성 별 : ${info.gender}<br/>
< InfoSave.jsp 전체 소스 코드 >
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="info" class="info.beans.InfoBean">
<jsp:setProperty name="info" property="name" />
<jsp:setProperty name="info" property="id" />
</jsp:useBean>
<!DOCTYPE html>
<HTML>
<HEAD><TITLE> 자료 출력 </TITLE></HEAD>
<BODY>
<H2> 당신의 신상명세서 확인 </H2>
<!-- 1. 자바빈즈 사용 -->
이 름 : <jsp:getProperty property="name" name="info"><br/>
주민번호 : <jsp:getProperty property="gender" name="info"><br/>
성 별 : <jsp:getProperty property="id" name="info"><br/>
<!-- 2. 자바코딩 사용 -->
이 름 : <%= info.getName() %><br/>
주민번호 : <%= info.getId() %><br/>
성 별 : <%= info.getGender() %><br/>
<!-- 3. EL 사용 -->
이 름 : ${info.name}<br/>
주민번호 : ${info.id}<br/>
성 별 : ${info.gender}<br/>
맞습니까????
</BODY>
</HTML>
(2) EL을 사용하여 데이터 출력하기
(06_el_class/2_member/insertMember.jsp 파일)
<jsp:useBean id="mem" class="member.beans.Member">
<jsp:setProperty name="mem" property="*"/>
</jsp:useBean>
....
<body>
아이디 : ${mem.id}<br/>
패스워드 : ${mem.password}<br/>
이름 : ${mem.name}<br/>
전화 : ${mem.tel}<br/>
주소 : ${mem.addr}<br/>
< insertMember.jsp 전체 소스 코드 >
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="member.beans.*" %>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="mem" class="member.beans.Member">
<jsp:setProperty name="mem" property="*"/>
</jsp:useBean>
<%
MemberDao memDao = MemberDao.getInstance();
memDao.insertMember(mem);
%>
<!DOCTYPE html>
<html>
<head>
<title> 회원가입 </title>
</head>
<body>
아이디 : ${mem.id}<br/>
패스워드 : ${mem.password}<br/>
이름 : ${mem.name}<br/>
전화 : ${mem.tel}<br/>
주소 : ${mem.addr}<br/>
</body>
</html>
(3) EL을 비롯한 다양한 방법으로 데이터 전달 및 수신하기
(06_el_class/3_object/first.jsp 파일, second.jsp 파일)
① 세션에 저장하여 데이터 전달 (First.jsp) → 세션으로 온 데이터 받기 (Second.jsp)
<%
session.setAttribute("login", "당신의아이디");
%>
<%
Object obj = session.getAttribute("login");
%>
② 쿠키 객체에 저장하여 데이터 전달 (First.jsp) → 쿠키로 온 데이터 받기 (Second.jsp)
<%
Cookie c = new Cookie("isFlag","true");
response.addCookie(c);
%>
<%
Cookie[] cookies = request.getCookies();
for(Cookie c : cookies) {
}
%>
③ 파라미터에 저장하여 데이터 전달 (First.jsp) → 파라미터로 온 데이터 받기 (Second.jsp)
<a href ="Second.jsp?data=important"> 다음 페이지 </a>
<%
String p = request.getParameter("data");
%>
④ EL을 사용하여 데이터 받기 (Second.jsp)
파라메터 값(전 페이지에서 넘어오는 값) : ${param.data} <br/>
세션의 값 : ${sessionScope.login}<br/>
쿠키의 값 : ${cookie.isFlag.value}<br/>
→ 표현언어(EL)에서 파라미터를 통해 넘어오는 데이터를 가리키는 명칭으로 지정한 이름 : param
→ 표현언어(EL)에서 세션을 통해 넘어오는 데이터를 가리키는 명칭으로 지정한 이름 : sessionScope
(session이란 이름은 이미 내장객체 명으로 사용중이라서 중복을 피하기 위해 지정한 것)
< First.jsp 전체 소스 코드 >
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title> 표현언어의 기본객체</title>
</head>
<body>
<%
// 1. 세션에 저장하여 데이터 전달
session.setAttribute("login", "당신의아이디");
// 2. 쿠키 객체를 사용하여 데이터 전달
Cookie c = new Cookie("isFlag","true");
response.addCookie(c);
%>
데이타 보냈습니다. <br/>
<!-- 3. 파라미터에 저장하여 데이터 전달 (쿼리스트링) -->
<a href ="Second.jsp?data=important"> 다음 페이지 </a>
</body>
</html>
< Second.jsp 전체 소스 코드>
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title> 데이타 받는 페이지 </title>
</head>
<body>
<%
// 기존 방식
// 1. 세션으로 온 데이터 받기
Object obj = session.getAttribute("login");
// 2. 쿠키로 온 데이터 받기
Cookie[] cookies = request.getCookies();
for(Cookie c : cookies) {
}
// 3. 파라미터로 온 데이터 받기
String p = request.getParameter("data");
/////////////////////////////////////////////
%>
파라메터 값(전 페이지에서 넘어오는 값) : ${param.data} <br/>
<!-- session이란 이름을 이미 내장객체 명으로 사용해서 또 쓰면 안 되서 정한 표현언어의 이름이 sessionScope??????? -->
세션의 값 : ${sessionScope.login}<br/>
쿠키의 값 : ${cookie.isFlag.value}<br/>
<hr>
</body>
</html>
2. JSTL if문
(06_el_class/4_jstl 폴더에서)
(1) 1_basic.jsp 라는 jsp 파일 생성
(2) 태그라이브러리를 삽입한다.
<%@ taglib prefix='c' uri="http://java.sun.com/jsp/jstl/core" %>
(3) 변수를 선언한다.
<body>
<c:set var='gender' value='male'/>
(4) 제어흐름을 작성하면 if 조건에 맞을 경우 태그 사이의 문구가 화면에 출력된다.
<c:if test="${genger == 'male'}">당신은 남자입니다.</c:if>
<c:if test="${gende r== 'female'}">당신은 여자입니다.</c:if>
(5) age 변수에 24를 지정하고, 만일 age가 20 이상이면 "성인" 출력하기
<c:set var='age' value='24' />
<c:if test="${age ge '20'}">성인</c:if>
(6) 10세 미만 "어린이" / 10세 이상 20세 미만 "청소년" / 그 외 "성인" 출력하기
<c:set var='age' value='14' />
<c:choose>
<c:when test="${age lt 10}">어린이</c:when>
<c:when test="${age ge 10 and age lt 20}">청소년</c:when>
<c:otherwise>성인</c:otherwise>
</c:choose>
3. JSTL for문
(1) 1~100까지 합 출력하기
<c:set var='sum' value='0'/>
<c:forEach var='i' begin='1' end='100'>
<c:set var='sum' value='${sum + i}' />
</c:forEach>
1 ~ 100까지의 합 : ${sum} <br/>
(2) 1~100까지 홀수의 합과 짝수의 합 출력하기
<c:set var='oddsum' value='0' />
<c:set var='evensum' value='0' />
<c:forEach var='i' begin='1' end='100'>
<c:if test="${i % 2 != 0}">
<c:set var='oddsum' value='${oddsum + i}'/>
</c:if>
<c:if test="${i % 2 == 0}">
<c:set var='evensum' value='${evensum + i}'/>
</c:if>
</c:forEach>
1 ~ 100까지의 홀수의 합 : ${oddsum} <br/>
1 ~ 100까지의 짝수의 합 : ${evensum} <br/>
<hr/>
< 1_basic.jsp 전체 소스 코드 >
<%@ 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> 1_basic.jsp </title>
</head>
<body>
<!-- 변수 선언 -->
<c:set var='gender' value='male'/>
<!-- 제어흐름 : 조건에 맞으면 태그 사이의 문구가 출력됨 -->
<c:if test="${gender == 'male'}">당신은 남자입니다.</c:if>
<c:if test="${gender == 'female'}">당신은 여자입니다.</c:if>
<hr/>
<!-- age 변수에 24를 지정하고,
만일 age가 20 이상이면 "성인" 출력 -->
<c:set var='age' value='14' />
<c:if test="${age ge 20}">성인</c:if>
<hr/>
<c:choose>
<c:when test="${age lt 10}">어린이</c:when> <%-- 10세 미만 --%>
<c:when test="${age ge 10 and age lt 20}">청소년</c:when> <%-- 10세 이상 20세 미만 --%>
<c:otherwise>성인</c:otherwise>
</c:choose>
<hr/>
<c:set var='sum' value='0'/>
<c:forEach var='i' begin='1' end='100'>
<c:set var='sum' value='${sum + i}' />
</c:forEach>
1 ~ 100까지의 합 : ${sum}
<hr/>
<c:set var='oddsum' value='0' />
<c:set var='evensum' value='0' />
<c:forEach var='i' begin='1' end='100'>
<c:if test="${i % 2 != 0}">
<c:set var='oddsum' value='${oddsum + i}'/>
</c:if>
<c:if test="${i % 2 == 0}">
<c:set var='evensum' value='${evensum + i}'/>
</c:if>
</c:forEach>
1 ~ 100까지의 홀수의 합 : ${oddsum} <br/>
1 ~ 100까지의 짝수의 합 : ${evensum} <br/>
<hr/>
</body>
</html>
4. JSTL의 변수에 관하여
(06_el_class/4_jstl 폴더에서)
(1) 2_var.jps 파일 생성
(2) 태그라이브러리를 삽입하고 사용할 자바 파일을 임포트 한다.
<%@ taglib prefix='c' uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="member.beans.Member" %>
(3) 클래스의 객체를 생성한 뒤 변수에 값을 지정한다.
<%
Member m = new Member();
m.setName("박길자");
m.setId("800808-1234567");
%>
(4) EL 표현언어를 사용하여 화면에 출력해봐도 값이 출력되지 않는다.
(자바 객체와 EL 객체가 따로 관리 때문인듯.. 정확한 이유는 모름)
이름 : ${m.name} / 번호 : ${m.id}
(5) 객체를 따로 EL 변수에 담은 뒤 출력하면 화면에 정상적으로 나온다.
<c:set var="m2" value="<%= m %>" />
이름 : ${m2.name} / 번호 : ${m2.id}
< 2_var.jsp 전체 소스 코드 >
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix='c' uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="member.beans.Member" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 2_var.jsp </title>
</head>
<body>
<%
Member m = new Member();
m.setName("박길자");
m.setId("800808-1234567");
%>
이름 : ${m.name} / 번호 : ${m.id}
이름 : <%= m.getName() %> / 번호 : <%= m.getId() %>
<c:set var="m2" value="<%= m %>" />
이름 : ${m2.name} / 번호 : ${m2.id}
</body>
</html>
5. JSTL을 사용하여 1~100까지 중 숫자 맞추기
(06_el_class/4_jstl/3_QuizNumberEl.jsp 파일에서)
(0) JSTL 설정
<%@ taglib prefix='c' uri="http://java.sun.com/jsp/jstl/core" %>
(1) 이전 화면의 값을 얻어와 변수에 지정
<c:set var="guess" value='${param.guess}' />
(2) 변수 guess에는 사용자가 입력하기 전에 null 값이므로 임의의 수를 만들어 세션에 지정
<c:if test="${empty guess}">
자~ 게임을 시작합시다 <hr/>
<%
// 자바 코딩을 사용할 수 밖에 없음
int ranNum = (int)(Math.random()*100) + 1;
%>
</c:if>
(3) 세션의 값을 가져와 answer 변수에 지정
<c:if test="${empty guess}">
자~ 게임을 시작합시다 <hr/>
<%
// 자바 코딩을 사용할 수 밖에 없음
int ranNum = (int)(Math.random()*100) + 1;
// 세션에 값 저장
session.setAttribute("answer", ranNum);
%>
</c:if>
(4) guess의 변수에 값이 있을 경우,
guess와 answer의 값이 같다면 맞췄다고 출력 / 다르다면 guess의 값이 answer보다 크거나 ㅈ ㅏㄱ다고 출력
<c:choose>
<c:when test="${empty guess}"></c:when>
<c:otherwise>
<c:if test="${guess == answer }">
정답입니다!
</c:if>
<c:if test="${guess gt answer}">
너무 큰 숫자입니다!
</c:if>
<c:if test="${guess lt answer}">
너무 작은 숫자입니다!
</c:if>
</c:otherwise>
</c:choose>
(결과)
< 3_QuizNumberEl.jsp 전체 소스 코드 >
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!-- 0. JSTL 설정 -->
<%@ taglib prefix='c' uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title> 1~100까지 중 숫자 맞추기 </title>
</head>
<body>
<!-- 1. 이전화면 값 얻어와 guess 변수에 지정 -->
<c:set var="guess" value='${param.guess}' />
<!-- 2. 그 값이 없다면 임의의 수를 만들어 세션에 지정 -->
<c:if test="${empty guess}">
자~ 게임을 시작합시다 <hr/>
<%
// 자바 코딩을 사용할 수 밖에 없음
int ranNum = (int)(Math.random()*100) + 1;
// 세션에 값 저장
session.setAttribute("answer", ranNum);
%>
</c:if>
<!-- 3. 세션의 값을 가져와 answer 변수에 지정 -->
<c:set var="answer" value='${sessionScope.answer}' />
<!-- 4. guess의 변수에 값이 있다면 -->
<%-- (1) guess와 answer값이 같다면 맞춰다고 출력 --%>
<%-- (2) 다르다면 guess값이 answer값보다 크면 크다고 출력 작으면 작다고 출력 --%>
<c:choose>
<c:when test="${empty guess}"></c:when>
<c:otherwise>
<c:if test="${guess == answer }">
정답입니다!
</c:if>
<c:if test="${guess gt answer}">
너무 큰 숫자입니다!
</c:if>
<c:if test="${guess lt answer}">
너무 작은 숫자입니다!
</c:if>
</c:otherwise>
</c:choose>
<hr><hr>
1부터 100까지 수 중에서 하나를 잘 찍으시오~!! <br/>
<form method='get'>
어떤 수일까요?
<input type='text' name='guess'>
<input type='submit' value="Submit">
</form>
</body>
</html>
6. 스프링 설치 (Spring)
스프링의 다양한 프로젝트 : Spring MVC / Spring Boot / Spring Cloud 등
→ 이를 통해 웹 어플리케이션, REST API, microservice를 개발
(스프링의 일부 기능을 개선한 스프링 부트는 추후 개별적으로..)
(1) http://www.spring.io 접속 - http://www.spring.io/tools3/sts/all 접속
(2) Spring Tool Suite 3 wiki 클릭 - 깃허브에서 full distribution on Eclipse 가장 최신 버전 중 window용 다운로드 (spring-tool-suite-3.9.14.RELEASE-e4.17.0-win32-x86_64.zip 로 끝나는 링크 클릭하여 다운 받음) - "여기에 풀기"로 압축 해제 (폴더명을 간단하게 하기 위함) - sts-bundle 폴더 - sts-3.9.14.RELEASE 폴더 - STS 실행
런타임 에러 발생할 경우, STS.ini 환경설정 파일에서 JDK 설치 경로에 관해 작성해준다.
(위치는 반드시 -vmargs 위에 자리해야 함)
(3) STS 실행 - Browse - C: - java - webwork
- webwork 폴더 내에 Spring 폴더 생성 - Spring 폴더 내에 Basic 폴더 생성
(4) C:\java\webwork\Spring\Basic 을 WorkSpace로 하여 Launch (실행)
(5) 좌측 Package Explorer 우클릭
- New
- Spring Legacy Project 를 사용할 목적으로 Tools 3 설치 한 것 (아직 사용 안 함)
(6) 좌측 Package Explorer 우클릭
- New
- Java Project
- 프로젝트명 지정해서 생성