학원/JSP

11/29 53-1 [JSP] JSTL (SetTag)

도원결의 2022. 11. 29. 17:48

원래 개념 싹 정리하고 들어가려고 했는데

오늘 너무 걍 싹다 멘붕

그럴시간도 없다 지금 블로그 예쁘게 정리할 때가 아님!!! 배운거 걍 열심히 이것저것 시도해 보는게 지금은 중요한거 같아서 배운거 위주로 그냥 적어놓자 !! 시간이 너어어어무 없어!

큰 틀만 대충 잡고 넘어자가

JSTL의 태그에는 5가지 태그를 지원한다.

core  - 이거 오늘 배움

xml -이건 안배울거

국제화 - 곧 배울거

데이터베이스 - 얘도 안배울거

함수 -곧 배울거

 

core태그는 taglib지시어를 사용하여 접근한다.

%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 이렇게 쓰는 것!

core태그의 주요기능(종류).. 많음

표현언어: catch,out,remove,set

흐름제어 : chooes,when,otherwise,forEach,forToken,if

url관리 : impor,param,redirect,url

 

이걸 하나씩 정리할 것임 !! 

바로 고 

수업 땐 스크립트 요소로 비교하면서 했는데 여기선 다 뺄거 

지금은 el이 중요해  

[SetTag]

SetTagIndex.jsp

1.set태그로 el에서 사용할 변수 설정

    var속성: 문자열만 가능   -- var 에 설정 한 이름으로 출력하는거다 !! ${var에 설정한이름}

    value속성 : 값,표현식 el식 모두 가능하다

    scope속성 : "page","request" ,"session","application" 중 하나(기본은 페이지)

<h3>set태그로 EL에서 사용 할 변수 설정</h3>
	<ul class="list-unstyled">
		<li>value속성에 직접 값 설정 : <c:set var="directvar" value="100"/>   </li>			
			<!-- 위는 아래 자바코드와 같음 -->
		<% 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>

 

2. set태그로 설정한 값 출력하기(pageScope가 디폴트라 생략가능한건 저번시간에 배운거!)

<ul class="list-unstyled">
	<li>directvar : ${pageScope.directvar} </li> 
	<li>elvar : ${elvar} </li>
	<li>expvar : ${expvar} </li>
	<li>betweenvar : ${betweenvar} </li>	
</ul>

 

 

 

3.set태그로 각 영역에 저장-value에 직접 값 설정

(영역에 저장 할 때 지정하지 않으면 기본 page영역임! 특정 영역에 저장 하고 싶을 때는 반드시 scope 설정 필요!)

<c:set var="pagevar" value="페이지영역"/>	
<c:set var="requestvar" value="리퀘스트영역" scope="request"/>		
<c:set var="sessionvar" value="세션영역" scope="session"/>				
<c:set var="applicationvar" value="어플리케이션영역" scope="application"/>

4.el로 값 출력하기

<li>pagevar : ${pagevar} </li>
<li>requestvar : ${requestvar} </li>
<li>sessionvar : ${sessionvar} </li>
<li>applicationvar : ${applicationvar} </li>

 

 

5.set태그로 자바빈 객체 저장(기본생성자 사용)

<c:set scope="request" var="defaultMember" value="<%=new MemberDTO() %>"/>
이번엔 영역을 지정 했지?    var명으로 출력하면 될 거고     MemberDTO 타입이니까그안의 속성을 또 꺼내올 수 있겠지

6.el로 값 출력

<ul class="list-unstyled">	
	<li>실험: ${defaultMember}</li> 
	<li>이름 :${defaultMember.name }</li>
	<li>아이디 : ${defaultMember.id }</li>
	<li>비밀번호 : ${defaultMember.pwd }</li>
</ul>

아직 뭘 저장하지 않아서 null/ 혹은 출력 안됨!

 

6-1 인자생성자를 넣고 출력 (자바 태그는 꼭  '  '  로 감싸야 한다 !!!!)

<c:set scope="request" var="argsMember" value='<%=new MemberDTO("KIM","1234","김길동","20") %>'/>
<ul class="list-unstyled">	
	<li>이름 :${argsMember.name }</li>
	<li>아이디 : ${argsMember.id }</li>
	<li>비밀번호 : ${argsMember.pwd }</li>
</ul>

 

[target/property 속성]

 

set태그의 target속성과 property속성도 있음!

그건 자바빈 객체나 컬렉션계열 객체 "설정"할 때 사용할 수 있는 속성

set!!!!

 

target : 반.드.시. el식이나 표현식만 가능 !

property : 모두 가능 !!  여기에 key역할 하는 걸 넣으면 됨(ex.자바의 속성명, map의 키값..) ! 왜냐면 거의 var대신 쓰거든 !

     그래서 중요한게!!! scope 속성을 쓰려면 반드시 var속성을 지정한 태그에서만 설정이 가능하다!!

     또 그래서 target,property 속성 사용하면 var속성 지정을 못해!

이거 왜 쓰는지 이유를 알겟어!!

원래 var에는 문자열만 올 수 있는데 

${ } 이걸 var에다가 넣고 싶은거지!!

그래서 대체할 수 있는 속성을 만든게야!!!! 오오오오오오!!!

 

 

7.target 및 property속성으로 값 설정 후 EL로 출력

<c:set target="${defaultMember}" property="id" value="PARK" />
<c:set target="${defaultMember}" property="pwd" value="1234" />
<c:set target="${defaultMember}" property="name" value="박길동" />
<li>이름 :${defaultMember.name }</li>
<li>아이디 : ${defaultMember.id }</li>
<li>비밀번호 : ${defaultMember.pwd }</li>

출력 할 땐 그냥 var쓰는거랑 저어어언혀 다른게 없네

 

 

--리스트계열 컬렉션---

<%
   리스트계열 컬렉션 - 자바빈(MemberDTO) 저장
   List<MemberDTO> list = Arrays.asList(
                     (MemberDTO)request.getAttribute("defaultMember"),
                     (MemberDTO)request.getAttribute("argsMember"));
%>

target 속성으로 값을 저장 해 보자!

<c:set scope="request" value="<%=list %>" var="list"/>
<c:set target="${list[0]}"  value="한소인"  property="name"/> 
<c:set target="${list[0]}"  value="코스모"  property="id"/> 	
<c:set target="${list[0]}"  value="1234"  property="pwd"/>

아니 이게 너무 헷깔렸어서 

처음에 

defaultMember 박길동 정보 들어가 있고 그다음에 argsMember에 김길동 정보 입력함

그리고나서 list계열에 박길동,김길동 순서로 저장

그리고 list[0]번방을 새롭게 셋팅함

그래서 list를 출력 해보면

<li>실험 : ${list}</li>
<li>이름 : ${defaultMember.name }</li>
<li>아이디 : ${defaultMember.id }</li>
<li>비밀번호 : ${defaultMember.pwd }</li>

 

0번방에 한소인, 1번방에 김길동 박길동은 사라짐

 

---맵 계열 컬렉션 ---

<%
  Map<String,MemberDTO> map = new HashMap<>();
    map.put("default",list.get(0));   ==>default는 el의 예약어라서 map["default"] 방식으로 접근한다!!
    map.put("args",list.get(1));
%>

0방이였던 한소인을 default라는 키값에 넣고

1번방이였떤 김길동을 args라는 키값에 넣음

그리고나서 default를 새롭게 셋팅하면

한소인이 새롭게 바뀌겠지!

<c:set var="map"  value="<%=map %>" scope="request"/>
<!-- default는 el의 예약어라서 map["default"] 방식으로 접근한다!! -->
<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="9999"/>

셋팅

<li>실험 : ${map }</li>	
<li>이름 : ${map["default"].name}</li>
<li>아이디 : ${map["default"].id }</li>
<li>비밀번호 : ${map["default"].pwd }</li>

출력


페이지를 포워딩 시켜서 두번째 페이지에서 출력 해 보자!!

첫 번째 페이지 마지막에

<jsp:forward page="SetTagResult.jsp" >
             <jsp:param name="subject" value="android"/>
</jsp:forward>

추가해서 포워딩 고

 

1.xxxvar계열

<li>pagevar : ${pagevar} </li>
<li>requestvar : ${requestvar}</li>
<li>sessionvar : ${sessionvar} </li>
<li>applicationvar : ${applicationvar} </li>

gage영역은 당연히 사라지지

2.MemberDTO(자바빈)계열(argsMember)출력

<li>이름: ${argsMember.name }</li>
<li>아이디:${argsMember.id }</li>
<li>비번:${argsMember.pwd } </li>
<li>나이:${argsMember.age } </li>
<li>argsMember:${argsMember} </li>

3.리스트 계열 컬렉션(인덱스 1인 객체) 출력

<li>이름:${list[1].name } </li>
<li>아이디:${list[1].id } </li>
<li>비번:${list[1].pwd } </li>
<li>나이:${list[1].age } </li>

 

 

4.맵 계열 컬렉션(키값이 'args'인 객체) 출력

 args는 예약어 아니니까 .을쓰건 [ ] 를 쓰건 내 맴

<li>이름:${map.args.name} </li>
<li>아이디: ${map["args"].id}</li>
<li>비번:${map['args'].pwd}</li>

 

 

5.파라미터 출력

미쳣어... param. 꼭 반드시!!!!!! 까먹지 말라고 !!!!!!

\${param.subject} : ${param.subject}