Servlet & Jstl
그동안 우리가 해왔던 프로젝트 방식 : Model1 방식
: 비지니스 로직과 디자인이 복합적으로 같이 들어가있는 형태
소규모 프로젝트에 적당
프로젝트 규모가 커지면서 나온 방식이 Model2 방식
: 비지니스 로직과 디자인을 분리한 형태
로직처리 : servlet (Model) -> 상속 받는 것
디자인과 출력 : jsp,html (View)
이때 JSP 에서 출력시 자바코드를 사용하지 않고 주로 JSTL 태그를 이용해서 request 나 session 에 저장된
데이타를 접근을 한다
JSTL (JSP Standard Tag Library)
WEB-INF/lib/jstl-버전.jar 필요
${su1+su2 }
${su1-su2 }
${su1*su2 }
${su1/su2 }
${su1 div su2 }
${su1%su2 }
${su1 mod su2 }
증가 전 su1: <c:out value="${su1 }"/><br>
<c:set var="su1" value="${su1+1 }"/>
증가 후 su1: ${su1 }
-> su1++같이 쓰임
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<h2>JSTL 태그 연산자 연산</h2>
<!-- 변수선언
변수 - su1 값 7 -->
<c:set var="su1" value="7"/>
<c:set var="su2" value="4"/>
<b>두 변수 값 출력(su1:${su1 },su2:${su2 })</b>
<table class="table table-bordered" style="width: 400px;">
<tr>
<th width="250">\${su1+su2 }</th>
<td>
${su1+su2 }
</td>
</tr>
<tr>
<th width="250">\${su1-su2 }</th>
<td>
${su1-su2 }
</td>
</tr>
<tr>
<th width="250">\${su1*su2 }</th>
<td>
${su1*su2 }
</td>
</tr>
<tr>
<th width="250">\${su1/su2 }</th>
<td>
${su1/su2 }
</td>
</tr>
<tr>
<th width="250">\${su1 div su2 }</th>
<td>
${su1 div su2 }
</td>
</tr>
<tr>
<th width="250">\${su1%su2 }</th>
<td>
${su1%su2 }
</td>
</tr>
<tr>
<th width="250">\${su1 mod su2 }</th>
<td>
${su1 mod su2 }
</td>
</tr>
<tr>
<th>su1 1증가</th>
<td>
<!-- value값을 가져와서 변수 초기화해줌 -->
증가 전 su1: <c:out value="${su1 }"/><br>
<c:set var="su1" value="${su1+1 }"/>
증가 후 su1: ${su1 }
</td>
</tr>
</table>
</body>
</html>
<c:set var="name" value="김영준"/>
<c:set var="age" value="22"/>
<c:set var="today" value="<%=new Date() %>"/>
<h2>이름: <c:out value="${name }"/></h2>
<h2>이름: ${name }</h2>
<h2>나이: ${age }</h2>
<h2>오늘날짜: ${today }</h2>
<fmt:formatDate value="${today }" pattern="yyyy-MM-dd HH:mm"/><br>
<fmt:formatDate value="${today }" pattern="yyyy-MM-dd a hh:mm"/><br>
<fmt:formatDate value="${today }" pattern="yyyy-MM-dd HH:mm EEE"/><br>
<fmt:formatDate value="${today }" pattern="yyyy-MM-dd HH:mm EEEE"/><br>
<fmt:formatDate value="${today }" pattern="yyyy년 MM월 dd일"/><br>
<c:set var="money" value="6780000"/>
<c:set var="num1" value="123.45678"/>
<pre>
${money }
${num1 }
<!-- 천단위 구분기호 number:3자리마다 컴마 -->
<fmt:formatNumber value="${money }" type="number"/>
<!-- currency: 3자리마다 컴마, 화폐단위 -->
<fmt:formatNumber value="${money }" type="currency"/>
<!-- pattern -->
<fmt:formatNumber value="${num1 }" pattern="0.00"/>
<fmt:formatNumber value="1.5" pattern="0.00"/>
<fmt:formatNumber value="1.5" pattern="0.##"/>
</pre>
<!-- 변수선언 -->
<c:set var="num1" value="7"/>
<c:set var="num2" value="4"/>
<!-- 출력:c:out은 생략가능 -->
숫자1: ${num1 }<br>
숫자2: ${num2 }<br>
<!-- 조건문 else 없음 -->
<c:if test="${num1>num2 }">
<h2>숫자1이 더 큽니다!!</h2>
</c:if>
<c:if test="${num1<num2 }">
<h2>숫자2 더 큽니다!!</h2>
</c:if>
<!-- if문 -->
<c:set var="nara" value="프랑스"/>
<c:if test="${nara=='체코' }"> <!-- 문자열비교도 ==으로 비교한다 -->
<h2>체코에서 한달살기 하고싶다</h2>
</c:if>
<c:if test="${nara=='프랑스' }">
<h2>프랑스의 에탑에서 와인마시기</h2>
</c:if>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<!-- jstl 변수선언 -->
<c:set var="name" value="김영준"/>
<c:set var="age" value="22"/>
<!-- 호출시 표현식 사용 -->
<c:set var="today" value="<%=new Date() %>"/>
<!-- jstl 출력법_1 -->
<h2>이름: <c:out value="${name }"/></h2>
<!-- jstl 출력법_2 -->
<h2>이름: ${name }</h2>
<h2>나이: ${age }</h2>
<h2>오늘날짜: ${today }</h2>
<!-- pattern 이용한 fmt날짜형식 -->
<fmt:formatDate value="${today }" pattern="yyyy-MM-dd HH:mm"/><br>
<fmt:formatDate value="${today }" pattern="yyyy-MM-dd a hh:mm"/><br>
<fmt:formatDate value="${today }" pattern="yyyy-MM-dd HH:mm EEE"/><br>
<fmt:formatDate value="${today }" pattern="yyyy-MM-dd HH:mm EEEE"/><br>
<fmt:formatDate value="${today }" pattern="yyyy년 MM월 dd일"/><br>
<c:set var="money" value="6780000"/>
<c:set var="num1" value="123.45678"/>
<!-- 숫자출력 -->
<pre>
${money }
${num1 }
<!-- 천단위 구분기호 number:3자리마다 컴마 -->
<fmt:formatNumber value="${money }" type="number"/>
<!-- currency: 3자리마다 컴마, 화폐단위 -->
<fmt:formatNumber value="${money }" type="currency"/>
<!-- pattern -->
<fmt:formatNumber value="${num1 }" pattern="0.00"/>
<fmt:formatNumber value="1.5" pattern="0.00"/>
<fmt:formatNumber value="1.5" pattern="0.##"/>
</pre>
<!-- if문 -->
<!-- 변수선언 -->
<c:set var="num1" value="7"/>
<c:set var="num2" value="4"/>
<!-- 출력:c:out은 생략가능 -->
숫자1: ${num1 }<br>
숫자2: ${num2 }<br>
<!-- 조건문 else 없음 -->
<c:if test="${num1>num2 }">
<h2>숫자1이 더 큽니다!!</h2>
</c:if>
<c:if test="${num1<num2 }">
<h2>숫자2 더 큽니다!!</h2>
</c:if>
<!-- if문 -->
<c:set var="nara" value="프랑스"/>
<c:if test="${nara=='체코' }"> <!-- 문자열비교도 ==으로 비교한다 -->
<h2>체코에서 한달살기 하고싶다</h2>
</c:if>
<c:if test="${nara=='프랑스' }">
<h2>프랑스의 에탑에서 와인마시기</h2>
</c:if>
</body>
</html>
!empty -> 비어있지 않으면
<c:if test="${!empty param.irum }">
<h2>이름: ${param.irum }</h2>
<h3>가고싶은 나라: ${param.nara }</h3>
<c:choose>
<c:when test="${param.nara=='프랑스' }">
<h3 style="color: green;">프랑스는 에펠탑</h3>
</c:when>
<c:when test="${param.nara=='체코' }">
<h3 style="color: magenta;">체코는 코젤맥주</h3>
</c:when>
<c:when test="${param.nara=='하와이' }">
<h3 style="color: cyan;">하와이는 콜라</h3>
</c:when>
<c:when test="${param.nara=='오스트리아' }">
<h3 style="color: orange;">오스트리아는 마리앙트와네트</h3>
</c:when>
<c:otherwise>
<h3 style="color: red;">${param.nara }는 해당사항 없음</h3>
</c:otherwise>
</c:choose>
</c:if>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<!-- 한글엔코딩 -->
<fmt:requestEncoding value="utf-8"/>
<form action="ex3_jstl_form.jsp" method="post">
<h3>이름입력</h3>
<input type="text" name="irum" class="form-control">
<h3>가고싶은 나라</h3>
<input type="text" name="nara" class="form-control">
<br>
<button type="submit" class="btn btn-info">결과확인</button>
</form>
<!-- 이름을 입력시에만 결과가 나오게 -->
<c:if test="${!empty param.irum }">
<h2>이름: ${param.irum }</h2>
<h3>가고싶은 나라: ${param.nara }</h3>
<c:choose>
<c:when test="${param.nara=='프랑스' }">
<h3 style="color: green;">프랑스는 에펠탑</h3>
</c:when>
<c:when test="${param.nara=='체코' }">
<h3 style="color: magenta;">체코는 코젤맥주</h3>
</c:when>
<c:when test="${param.nara=='하와이' }">
<h3 style="color: cyan;">하와이는 콜라</h3>
</c:when>
<c:when test="${param.nara=='오스트리아' }">
<h3 style="color: orange;">오스트리아는 마리앙트와네트</h3>
</c:when>
<c:otherwise>
<h3 style="color: red;">${param.nara }는 해당사항 없음</h3>
</c:otherwise>
</c:choose>
</c:if>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<fmt:requestEncoding value="utf-8"/>
<form action="" method="post">
<table class="table table-bordered" style="width: 300px;">
<tr>
<th>이름</th>
<td>
<input type="text" name="name" class="form-control"
style="width: 120px;">
</td>
</tr>
<tr>
<th>나이</th>
<td>
<input type="text" name="age" class="form-control"
style="width: 120px;">
</td>
</tr>
<tr>
<th>급여</th>
<td>
<input type="text" name="pay" class="form-control"
style="width: 120px;">
</td>
</tr>
<tr>
<th>가고싶은나라</th>
<td>
<input type="text" name="nara" class="form-control"
style="width: 120px;">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<button type="submit" class="btn btn-success">결과확인</button>
</td>
</tr>
</table>
<!-- 이름을 입력했을 경우에만 출력 div 출력
이름: 김영환
나이: 19세(미성년자)..조건-20살 이상이면 성년 아니면 미성년
월급여: 180만원..화폐단위와 천단위 구분기
가고싶은나라: choose이용해서 출력은 맘대로 할것!!!
-->
<c:if test="${!empty param.name }">
<div class="alert alert-info" style="width: 400px;">
<h2>이름: ${param.name }</h2>
<h2>나이: ${param.age }세
<c:if test="${param.age>=20}">
(성년)
</c:if>
<c:if test="${param.age<20 }">
(미성년)
</c:if>
</h2>
<h2><fmt:formatNumber value="${param.pay }" type="currency"/></h2>
<c:choose>
<c:when test="${param.nara=='미국' }">
<h2>미국 배낭여행 가보고 싶다</h2>
</c:when>
<c:when test="${param.nara=='캐나다' }">
<h2>캐나다 워홀 가보고 싶다</h2>
</c:when>
<c:when test="${param.nara=='한국' }">
<h2>한국에서 취업하고 싶다</h2>
</c:when>
<c:when test="${param.nara=='일본' }">
<h2>일본 온천여행 가고 싶다</h2>
</c:when>
</c:choose>
</div>
</c:if>
</form>
</body>
</html>
<h3>1~10출력</h3>
<c:forEach var="a" begin="1" end="10">
${a }
</c:forEach>
<h3>0~30출력 3의배수</h3>
<c:forEach var="a" begin="0" end="30" step="3">
${a }
</c:forEach>
${변수명}일 경우 앞에 requestScope가 생략된 것임...request에 저장된 데이터는
자바처럼 getAttribute로 얻지 않아도 바로 출력 가능하다
하지만 세션은 sessionScope를 생략하지 않는다 (requestScope와 구분짓기위해서)
<%
List<String> list=new ArrayList<>();
list.add("red");
list.add("cadetblue");
list.add("green");
list.add("purple");
list.add("orange");
request.setAttribute("list", list);
request.setAttribute("totalCount", list.size());
//세션에 아이디저장
session.setAttribute("id", "tjdgus");
%>
<h3>list에 총 ${totalCount }개의 색상이 들어있다</h3>
<h3>list에 총 ${requestScope.totalCount }개의 색상이 들어있다</h3>
<!-- 달러{변수명}일 경우 앞에 requestScope가 생략된 것임...request에 저장된 데이터는
자바처럼 getAttribute로 얻지 않아도 바로 출력 가능하다
하지만 세션은 sessionScope를 생략하지 않는다 (requestScope와 구분짓기위해서) -->
<h3>세션 아이디 출력</h3>
<h4>현재 로그인한 아이디는 ${sessionScope.id }입니다</h4>
<h3>list 전체 출력</h3>
<table class="table table-bordered" style="width: 300px;">
<tr>
<th>No.</th><th>index</th><th>color</th>
</tr>
<c:forEach var="s" items="${list }" varStatus="i">
<tr>
<td>${i.count }</td> <!-- 무조건 1부터 출력 -->
<td>${i.index }</td> <!-- 실제 list의 인덱스값 출력 -->
<td>
<b style="color: ${s}">${s }</b>
</td>
</tr>
</c:forEach>
</table>
<h3>list인덱스 2~4 출력</h3>
<table class="table table-bordered" style="width: 300px;">
<tr>
<th>No.</th><th>index</th><th>color</th>
</tr>
<c:forEach var="s" items="${list }" varStatus="i" begin="2" end="4">
<tr>
<td>${i.count }</td> <!-- 무조건 1부터 출력 -->
<td>${i.index }</td> <!-- 실제 list의 인덱스값 출력 -->
<td>
<b style="color: ${s}">${s }</b>
</td>
</tr>
</c:forEach>
</table>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<h3>1~10출력</h3>
<c:forEach var="a" begin="1" end="10">
${a }
</c:forEach>
<h3>0~30출력 3의배수</h3>
<c:forEach var="a" begin="0" end="30" step="3">
${a }
</c:forEach>
<%
List<String> list=new ArrayList<>();
list.add("red");
list.add("cadetblue");
list.add("green");
list.add("purple");
list.add("orange");
request.setAttribute("list", list);
request.setAttribute("totalCount", list.size());
//세션에 아이디저장
session.setAttribute("id", "tjdgus");
%>
<h3>list에 총 ${totalCount }개의 색상이 들어있다</h3>
<h3>list에 총 ${requestScope.totalCount }개의 색상이 들어있다</h3>
<!-- 달러{변수명}일 경우 앞에 requestScope가 생략된 것임...request에 저장된 데이터는
자바처럼 getAttribute로 얻지 않아도 바로 출력 가능하다
하지만 세션은 sessionScope를 생략하지 않는다 (requestScope와 구분짓기위해서) -->
<h3>세션 아이디 출력</h3>
<h4>현재 로그인한 아이디는 ${sessionScope.id }입니다</h4>
<hr>
<h3>list 전체 출력</h3>
<table class="table table-bordered" style="width: 300px;">
<tr>
<th>No.</th><th>index</th><th>color</th>
</tr>
<c:forEach var="s" items="${list }" varStatus="i">
<tr>
<td>${i.count }</td> <!-- 무조건 1부터 출력 -->
<td>${i.index }</td> <!-- 실제 list의 인덱스값 출력 -->
<td>
<b style="color: ${s}">${s }</b>
</td>
</tr>
</c:forEach>
</table>
<h3>list인덱스 2~4 출력</h3>
<table class="table table-bordered" style="width: 300px;">
<tr>
<th>No.</th><th>index</th><th>color</th>
</tr>
<c:forEach var="s" items="${list }" varStatus="i" begin="2" end="4">
<tr>
<td>${i.count }</td> <!-- 무조건 1부터 출력 -->
<td>${i.index }</td> <!-- 실제 list의 인덱스값 출력 -->
<td>
<b style="color: ${s}">${s }</b>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
<%
<%
String mycolor []={"red","cadetblue","purple","green","orange","lightblue","gray"};
%>
<c:set var="mycolor" value="<%=mycolor %>"/>
<table class="table table-bordered" style="width: 300px;">
<caption align="top"><b>전체값 출력</b></caption>
<tr>
<th>index</th><th>count</th><th>color</th>
</tr>
<c:forEach var="a" items="${mycolor }" varStatus="i">
<tr align="center">
<td>${i.index }</td>
<td>${i.count }</td>
<td style="background-color: ${a}">${a }</td>
</tr>
</c:forEach>
</table>
<!-- 2~5번 -->
<table class="table table-bordered" style="width: 300px;">
<caption align="top"><b>일부값 출력</b></caption>
<tr>
<th>index</th><th>count</th><th>color</th>
</tr>
<c:forEach var="a" items="${mycolor }" varStatus="i" begin="2" end="5">
<tr align="center">
<td>${i.index }</td>
<td>${i.count }</td>
<td style="background-color: ${a}">${a }</td>
</tr>
</c:forEach>
</table>
<c:set var="msg" value="민규,성신,영환,성경,형준"/>
${msg }<br>
<h2>msg값을 컴마로 불리해서 출력</h2>
<c:forTokens var="s" items="${msg }" delims="," varStatus="i">
<h3>${i.count }: ${s }</h3>
</c:forTokens>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Cute+Font&family=Diphylleia&family=Dokdo&family=Nanum+Brush+Script&family=Nanum+Gothic+Coding&family=Noto+Sans+KR&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<title>Insert title here</title>
</head>
<body>
<c:forEach var="s" begin="1" end="10">
[${s }]
</c:forEach>
<br>
<%
String mycolor []={"red","cadetblue","purple","green","orange","lightblue","gray"};
%>
<c:set var="mycolor" value="<%=mycolor %>"/>
<table class="table table-bordered" style="width: 300px;">
<caption align="top"><b>전체값 출력</b></caption>
<tr>
<th>index</th><th>count</th><th>color</th>
</tr>
<c:forEach var="a" items="${mycolor }" varStatus="i">
<tr align="center">
<td>${i.index }</td>
<td>${i.count }</td>
<td style="background-color: ${a}">${a }</td>
</tr>
</c:forEach>
</table>
<!-- 2~5번 -->
<table class="table table-bordered" style="width: 300px;">
<caption align="top"><b>일부값 출력</b></caption>
<tr>
<th>index</th><th>count</th><th>color</th>
</tr>
<c:forEach var="a" items="${mycolor }" varStatus="i" begin="2" end="5">
<tr align="center">
<td>${i.index }</td>
<td>${i.count }</td>
<td style="background-color: ${a}">${a }</td>
</tr>
</c:forEach>
</table>
<hr>
<c:set var="msg" value="민규,성신,영환,성경,형준"/>
${msg }<br>
<h2>msg값을 컴마로 불리해서 출력</h2>
<c:forTokens var="s" items="${msg }" delims="," varStatus="i">
<h3>${i.count }: ${s }</h3>
</c:forTokens>
</body>
</html>