표현언어(Expression Language) 지원 기능
<c:catch>, <c:out>, <c:remove>, <c:set>
-흐름제어 기능
<c:choose>, <c:when>, <c:otherwise>, <c:forEach>, <c:forToken>, <c:if>
-URL 관리 기능
<c:import>, <c:param>, <c:redirect>, <c:url>
- 사용법
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
set태그
- <c:set/>은 setAttribute("속성명","값") 와 같은 역할.
<c:set var="EL변수명" value="값" scope="영역"/>
- EL식에서 사용하는 EL 변수를 생성하는데 사용된다.
- 변수에 값을 할당한다.
자바빈 이나 컬렉션과 같은 객체의 속성에 값을 할당하기 위해서는 target 과 property속성을 이용한다.
target과 property속성은 자바빈이나 Map계열 개체에만 적용 할 수 있다.
- set태그의 속성 요약 --------------+----------------+------------------+------------------------------------------- 속성 | 표현식/EL | 타입 | 설명 --------------+----------------+------------------+-------------------------------- var | X | String | EL변수의 이름 --------------+----------------+------------------+-------------------------------------------- scope | X | String | 변수를 생성할 영역.기본 값은 page --------------+----------------+------------------+---------------------------------------------- value | O | Object | 변수에 할당할 값 --------------+----------------+------------------+------------------------------------------------ target | O | Object | 자바빈 개체 혹은 Map계열 컬렉션 --------------+----------------+------------------+--------------------------------------------- property | O | String | 속성명 --------------+----------------+------------------+------------------------------------------------- |
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.Arrays"%>
<%@page import="java.util.Vector"%>
<%@page import="java.util.List"%>
<%@page import="model.MemberDTO"%>
<%@page import="java.sql.Date"%>
<%@ 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">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SetTagIndex.jsp</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
<style>
/*점보트론 세로폭 줄이기*/
.jumbotron {
padding-top: 1rem;
padding-bottom: 1rem;
}
</style>
</head>
<body>
<div class="jumbotron jumbotron-fluid bg-warning">
<div class="container-fluid">
<h1>JSP Standard Tag Library</h1>
</div><!--container-fluid-->
</div><!--jumbotron-fluid-->
<div class="container">
<fieldset class="form-group border p-3">
<legend class="w-auto p-3">set태그</legend>
<!-- -->
<h3>set태그로 EL에서 사용할 변수 설정</h3>
<ul class="list-unstyled">
<li>value속성에 직접 값 설정 : <c:set var="directvar" value="100"/></li>
<!-- 위 JSTL코드는 아래의 자바코다와 같다 -->
<%pageContext.setAttribute("directvar", "100");%>
<li>value속성에 EL로 값 설정 : <c:set var="elvar" value="${directvar}"/></li>
<li>value속성에 표현식로 값 설정 : <c:set var="expvar" value="<%=new Date(new java.util.Date().getTime()) %>"/></li>
<li>시작태그와 종료태그 사이에 값 설정 : <c:set var="betweenvar"><h4>시작태그와 종료태그</h4>사이에 값을 설정합니다</c:set></li>
</ul>
<h3>set태그로 설정한 값 출력하기</h3>
<h5>자바코드(스크립팅요소)로 출력</h5>
<ul class="list-unstyled">
<li>directvar : <%=pageContext.getAttribute("directvar") %></li>
<li>elvar : <%=pageContext.getAttribute("elvar") %></li>
<li>expvar : <%=pageContext.getAttribute("expvar") %></li>
<li>betweenvar : <%=pageContext.getAttribute("betweenvar") %></li>
</ul>
<h5>EL로 출력</h5>
<ul class="list-unstyled">
<li>directvar : ${pageScope.directvar} </li>
<li>elvar : ${elvar}</li>
<li>expvar : ${expvar}</li>
<li>betweenvar : ${betweenvar}</li>
</ul>
<h3>set태그로 각 영역에 저장</h3>
<c:set var="pagevar" value="페이지 영역" />
<c:set var="requestvar" value="리퀘스트 영역" scope="request"/>
<c:set var="sessionvar" value="세션 영역" scope="session"/>
<c:set var="application" value="어플리케이션 영역" scope="application"/>
<h5>자바코드(스크립팅요소)로 출력</h5>
<ul class="list-unstyled">
<li>pagevar : <%=pageContext.getAttribute("pagevar") %></li>
<li>requestvar : <%=request.getAttribute("requestvar") %></li>
<li>sessionvar : <%=session.getAttribute("sessionvar") %></li>
<li>application : <%=application.getAttribute("application") %></li>
</ul>
<h5>EL로 출력</h5>
<ul class="list-unstyled">
<li>pagevar : ${pagevar} </li>
<li>requestvar : ${requestvar}</li>
<li>sessionvar : ${sessionvar}</li>
<li>application : ${application}</li>
</ul>
<h3>set태그로 자바빈 객체에 저장</h3>
<c:set scope="request" var="defaultMember" value="<%=new MemberDTO() %>"/>
<h5>자바코드(스크립팅요소)로 출력</h5>
<ul class="list-unstyled">
<li>이름 : <%=((MemberDTO)request.getAttribute("defaultMember")).getName() %></li>
<li>아이디 : <%=((MemberDTO)request.getAttribute("defaultMember")).getId() %></li>
<li>비밀번호 : <%=((MemberDTO)request.getAttribute("defaultMember")).getPwd() %></li>
</ul>
<h5>EL로 출력</h5>
<ul class="list-unstyled">
<li>이름 : ${defaultMember.name}</li>
<li>아이디 : ${defaultMember.id}</li>
<li>비번 : ${defaultMember.pwd}</li>
</ul>
<c:set scope="request" var="argsMember" value='<%=new MemberDTO("KIM","1234","김길동","20") %>'/>
<h5>자바코드(스크립팅요소)로 출력</h5>
<ul class="list-unstyled">
<li>이름 : <%=((MemberDTO)request.getAttribute("argsMember")).getName() %></li>
<li>아이디 : <%=((MemberDTO)request.getAttribute("argsMember")).getId() %></li>
<li>비밀번호 : <%=((MemberDTO)request.getAttribute("argsMember")).getPwd() %></li>
</ul>
<h5>EL로 출력</h5>
<ul class="list-unstyled">
<li>이름 : ${argsMember.name}</li>
<li>아이디 : ${argsMember.id}</li>
<li>비번 : ${argsMember.pwd}</li>
</ul>
<!--
set태그의 target속성과 property속성은
자바빈 객체나 컬렉션계열 객체 설정할때 사용할 수 있는 속성.
※target속성:반드시 EL식이나 표현식만 가능
property속성:값,표현식,EL식 모두 가능.
자바빈 인 경우-속성명(멤버변수명)
Map컬렉션 - 키값
※scope속성은 var속성을 지정한 태그에서만 설정 가능
-->
<!-- target과 property를 사용해서
자바빈이나 컬렉션에 값을 설정할때는
var속성을 지정하면 안된다.
-->
<!-- target속성과 property속성을 이용해서
자바빈 객체의 속성값 설정
-->
<c:set target="${defaultMember}" property="id" value="PARK"/>
<c:set target="${defaultMember}" property="pwd" value="1234"/>
<c:set target="${defaultMember}" property="name" value="박길동"/>
<h5>target 및 property 속성으로 값 설정 후 EL로 출력</h5>
<ul class="list-unstyled">
<li>이름 : ${defaultMember.name}</li>
<li>아이디 : ${defaultMember.id}</li>
<li>비번 : ${defaultMember.pwd}</li>
</ul>
<%
//리스트계열 컬렉션
List list = Arrays.asList(request.getAttribute("defaultMember"),request.getAttribute("argsMember"));
%>
<c:set scope="request" value="<%=list%>" var="list"/>
<h5>속성값 변경 전 출력</h5>
<ul class="list-unstyled">
<li>이름 : ${list[0].name}</li>
<li>아이디 : ${list[0].id}</li>
<li>비번 : ${list[0].pwd}</li>
</ul>
<h5>target 및 property 속성으로 값 설정 후 EL로 출력</h5>
<c:set target="${list[0]}" property="name" value="한소인"/>
<c:set target="${list[0]}" property="id" value="KOSMO"/>
<c:set target="${list[0]}" property="pwd" value="1234"/>
<h5>속성값 변경 후 출력</h5>
<ul class="list-unstyled">
<li>이름 : ${list[0].name}</li>
<li>아이디 : ${list[0].id}</li>
<li>비번 : ${list[0].pwd}</li>
</ul>
<%
//맵 계열 컬렉션
Map map = new HashMap();
map.put("default", request.getAttribute("defaultMember"));
map.put("args", request.getAttribute("argsMember"));
%>
<c:set var="map" value="<%=map %>" scope="request"/>
<h5>속성값 변경 전 출력</h5>
<ul class="list-unstyled">
<li>이름 : ${map['default'].name}</li>
<li>아이디 : ${map['default'].id}</li>
<li>비번 : ${map['default'].pwd}</li>
</ul>
<h5>target 및 property 속성으로 값 설정 후 EL로 출력</h5>
<c:set target="${map['default']}" property="name" value="한소인2"/>
<c:set target="${map['default']}" property="id" value="KOSMO2"/>
<c:set target="${map['default']}" property="pwd" value="0000"/>
<h5>속성값 변경 후 출력</h5>
<ul class="list-unstyled">
<li>이름 : ${map['default'].name}</li>
<li>아이디 : ${map['default'].id}</li>
<li>비번 : ${map['default'].pwd}</li>
</ul>
</fieldset>
</div><!-- container -->
</body>
</html>
<jsp:forward page="SetTagResult.jsp">
<jsp:param value="android" name="subject"/>
</jsp:forward>
▲마지막에 forward 액션태그로 Result페이지로 이동한다. 파라미터로 subject=android도 같이 넘긴다.
Result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SetTagResult.jsp</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
<style>
/*점보트론 세로폭 줄이기*/
.jumbotron {
padding-top: 1rem;
padding-bottom: 1rem;
}
</style>
</head>
<body>
<div class="jumbotron jumbotron-fluid bg-warning">
<div class="container-fluid">
<h1>JSTL(JSP Standard Tag Library)</h1>
</div><!--container-fluid-->
</div><!--jumbotron-fluid-->
<div class="container">
<fieldset class="form-group border p-3">
<legend class="w-auto p-3">set태그로 설정한 객체를 EL로 출력</legend>
<h3>xxxvar계열</h3>
<ul class="list-unstyled">
<li>pagevar : ${pagevar}</li>
<li>requestvar : ${requestvar}</li>
<li>sessionvar : ${sessionvar}</li>
<li>applicationvar : ${applicationvar}</li>
</ul>
<h3>MemberDTO계열(argsMember)출력</h3>
<ul class="list-unstyled">
<li>이름:${argsMember.name}</li>
<li>아이디:${argsMember.id}</li>
<li>비번:${argsMember.pwd}</li>
</ul>
<h3>리스트 계열 컬렉션(인덱스 1인 객체) 출력</h3>
<ul class="list-unstyled">
<li>이름:${list[1].name}</li>
<li>아이디:${list[1].id}</li>
<li>비번:${list[1].pwd}</li>
</ul>
<h3>맵 계열 컬렉션(키값이 'args'인 객체) 출력</h3>
<ul class="list-unstyled">
<li>이름:${map.args.name}</li>
<li>아이디:${map['args'].id}</li>
<li>비번:${map['args']['pwd']}</li>
</ul>
</fieldset>
</div><!-- container -->
</body>
</html>
▲page영역에 저장한 pagevar는 null이므로 출력이 안되고 나머지는 모두 request영역에 저장하였기 때문에 forward방식으로 넘어오면서 모두 공유하고 있으므로 출력이 잘 된다.
remove태그
- removeAttribute와 같은 역할
- 해당 scope 에 있는 변수를 제거하는 역할을 한다.
- 변수를 삭제하는 경우 scope이 맞지 않으면 삭제 되지 않는다.
- scope를 지정하지 않으면 동일한 이름으로 저장된 모든 영역의 변수가 삭제 됨.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="my" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>RemoveTag.jsp</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
<style>
/*점보트론 세로폭 줄이기*/
.jumbotron {
padding-top: 1rem;
padding-bottom: 1rem;
}
</style>
</head>
<body>
<div class="jumbotron jumbotron-fluid bg-warning">
<div class="container-fluid">
<h1>JSTL(JSP Standard Tag Library)</h1>
</div><!--container-fluid-->
</div><!--jumbotron-fluid-->
<div class="container">
<fieldset class="form-group border p-3">
<legend class="w-auto p-3">remove태그</legend>
<!-- 각 영역에 JSTL을 이용해서 속성 저장 -->
<my:set var="pagevar" value="페이지 영역" />
<my:set var="pagevar" value="리퀘스트 영역1" scope="request"/>
<my:set var="requestvar" value="리퀘스트 영역2" scope="request" />
<my:set var="sessionvar" value="세션 영역" scope="session" />
<my:set var="applicationvar" value="어플리케이션 영역" scope="application" />
<h3>삭제 전 출력</h3>
<ul class="list-unstyled">
<ul class="list-unstyled">
<li>pagevar : ${pagevar}</li>
<li>pagevar : ${requestScope.pagevar}</li>
<li>requestvar : ${requestvar}</li>
<li>sessionvar : ${sessionvar}</li>
<li>applicationvar : ${applicationvar}</li>
</ul>
<!-- 삭제만 안됨(세션영역에 키가 없으니까) -->
<my:remove var="requestvar" scope="session"/>
<h3>영역이 다른 경우</h3>
<ul class="list-unstyled">
<ul class="list-unstyled">
<li>pagevar : ${pagevar}</li>
<li>pagevar : ${requestScope.pagevar}</li>
<li>requestvar : ${requestvar}</li>
<li>sessionvar : ${sessionvar}</li>
<li>applicationvar : ${applicationvar}</li>
</ul>
<!-- 영역 미 지정시 모든 영역에서 동일한 이름의 속성들이 삭제된다 -->
<my:remove var="pagevar"/>
<h3>동일한 속성명 삭제(영역 미 지정) 경우</h3>
<ul class="list-unstyled">
<ul class="list-unstyled">
<li>pagevar : ${pagevar}</li>
<li>pagevar : ${requestScope.pagevar}</li>
<li>requestvar : ${requestvar}</li>
<li>sessionvar : ${sessionvar}</li>
<li>applicationvar : ${applicationvar}</li>
</ul>
</fieldset>
</div><!-- container -->
</body>
</html>
▲ 영역만 다르고 키값이 다른경우 remove를 할 때 영역을 지정하지 않으면 어떻게 될까?
▲ 영역을 지정하지 않으면 해당 키값으로 존재하는 모든 value들을 다 삭제한다.
'JSP' 카테고리의 다른 글
[JSP] JSTL Core Tag - part.2(if,choose ~when ~otherwise,forEach) (0) | 2022.05.10 |
---|---|
[JSP]EL : 내장객체 (0) | 2022.05.09 |
[JSP]Expression Language(EL : 표현언어) (0) | 2022.05.06 |
[JSP]Action Tag (0) | 2022.05.03 |
[JSP]session (0) | 2022.05.03 |