21map-baen
Map<String, Bean04> map = new HashMap();
Bean04 obj = new Bean04();
obj.setNickName("korea");
obj.setAge(30000);
obj.setVip(true);
map.put("key1", obj);
pageContext.setAttribute("data", map);
pageContext.setAttribute("key1", "key1");
pageContext.setAttribute("nickName", "nickName");
pageContext.setAttribute("age", "age");
pageContext.setAttribute("vip", "vip");
pageContext.setAttribute("key2", "seoul");
%>
<p>${data.key1.nickName }</p>
<p>${data.key1.age }</p>
<p>${data.key1.vip }</p>
<hr>
<p>${data["key1"]["nickName"] }</p>
<p>${data["key1"]["age"] }</p>
<p>${data["key1"]["vip"] }</p>
<hr>
<p>${data[key1][nickName] }</p>
<p>${data[key1][age] }</p>
<p>${data[key1][vip] }</p>
<p>${[nickName] }</p>
<p>${[key2] }</p>
또쉬맵 .. hashmap, 이번엔 bean04
page 영역 attribute 로 map 객체를 data 라는 이름에 넣고 map 에 key, value 쌍을 (key1(String), obj(Bean04)) 로 추가
22bean-bean
자바파일 쓸 때 해당 패키지 import 했음 <%@ page import="sample03javabean.*" %>
아래에도 안써뒀는데 암튼 bean 쓸거면 import 해야됨
<%
Bean05 obj1 = new Bean05();
Bean03 obj2 = new Bean03();
obj2.setName("donald");
obj2.setAge(99);
obj2.setKid(false);
obj1.setCity("seoul");
obj1.setInfo(obj2);
pageContext.setAttribute("data1", obj1);
%>
<p>${data1.city }</p>
<p>${data1.info.name }</p>
<p>${data1.info.age }</p>
<p>${data1.info.kid }</p>
bean 객체 선언 - obj1, 2
메소드 사용하여 값들을 저장, pageContext.setAttribute 로 data1 에 obj1 을 저장
아래에서 값을 모두 반환해보기
23properties
<%
Map<String, Bean05> map = new HashMap<>();
Bean05 obj = new Bean05();
Bean03 info = new Bean03();
obj.setCity("ny");
obj.setInfo(info);
info.setName("trump");
info.setAge(33);
info.setKid(true);
map.put("data1", obj);
pageContext.setAttribute("data1", map);
%>
<%--
*el사용*
trump
33
ny
true
--%>
<p>${data1.data1.info.name }</p>
<p>${data1.data1.info.age }</p>
<p>${data1.data1.city }</p>
<p>${data1.data1.info.kid }</p>
hashmap 생성 또쉬맵 - map
Bean 객체생성 - obj, info
obj, info로 bean의 set메소드 사용하여 값 저장
map.put 으로 map 안에 obj 을 추가 (data1 의 이름으로)
page 영역에서 setAttribute 로 map 을 data1에 저장하여 전달
아래에서 el 사용하여, 값 반환
data1.data1.info.name
data1.data1.city
Bean05 에 있는 setInfo 메소드 ↓
public void setInfo(Bean03 info) {
this.info = info;
}
map 이라는 이름의 HashMap 선언, Bean05 의 객체 obj 와 Bean03 의 객체 info 선언
obj 즉, Bean05 안의 메소드 setCity 와 setInfo 로 city 에 ny 를, setInfo 에 info 에 info(Bean03 객체) 를 저장
info (Bean03) 안의 메소드 setName, setAge, setKid 로 name 에 trump 를, age 에 33 을, kid 에 true 를 저장
map 에 data1 의 이름으로 obj 저장
- 여기까지 map>data1(obj)>city(ny), {info(info)> name(trump), age(33), kid(true)}
그리고 pageContext.setAttribute("data1", map) 에서 data1 의 이름으로 map 을 저장
결론: 그래서 el 로 반환할 때, 저렇게 했다고 한다~! data1 은 이름이 중복된거임~
24list
<%
List<String> list = new ArrayList<>();
list.add("coffee");
list.add("beer");
list.add("soju");
pageContext.setAttribute("attr1", list);
%>
<p>list : ${attr1 }</p>
<p>list 0번째 : ${attr1[0] }</p>
<p>list 1번째 : ${attr1[1] }</p>
<p>list 2번째 : ${attr1[2] }</p>
<p>list 3번째 : ${attr1[3] }</p>
이번엔 list 로! string 저장할거야
list 에 coffee, beer, soju 추가
page 영역에 attribute 로 list 를 attr1 이름으로 저장
그리고 el 로 값을 모두 반환
- 첫번째는 attr1 을 (즉, list 를) 반환하므로 : [coffee, beer, soju] 로 표시됨
- 두번째부터는 해당 인덱스에 저장된 값을 각각 반환
- 마지막으로 [3] 은 리스트에 존재하지 않으므로 반환값이 없음
25array
<%
String[] arr1 = {"java", "react", "jsp", "vue"};
pageContext.setAttribute("list", arr1);
%>
<p>0 : ${list[0] }</p>
<p>1 : ${list[1] }</p>
<p>2 : ${list[2] }</p>
<p>3 : ${list[3] }</p>
<p>4 : ${list[4] }</p>
배열에 string형으로 값들 (4개) 저장
setAttribute 로 배열을 list 라는 이름으로 저장
el 안에서 배열명[인덱스] 이름으로 반환
하지만 인덱스 3까지 존재하니까 4는 반환값 없음 (null 아니고 그냥 없음)
26list-ex
<body>
<%
List<String> list1 = new ArrayList<>();
list1.add("v");
list1.add("suga");
list1.add("rm");
String[] arr1 = {"jk", "jin", "jimin", "hope"};
pageContext.setAttribute("data1", list1);
pageContext.setAttribute("data2", arr1);
%>
<%-- v, suga, rm, jk, jin, jimin, hope --%>
<p>${data1[0] }</p>
<p>${data1[1] }</p>
<p>${data1[2] }</p>
<p>${data2[0] }</p>
<p>${data2[1] }</p>
<p>${data2[2] }</p>
<p>${data2[3] }</p>
arraylist 로 list1 선언
list1 에 v, suga, rm 을 저장
그리고 갑자기 이번에는 배열을 만들었다
- 여기까지 정리: 리스트 하나 list1, 배열 하나 arr1
그리고 data1 의 이름으로 list1 을 저장, data2 의 이름으로 arr1 을 저장
이제 모두 반환
27list-ex
<%
String[] arr = {"banana", "apple"};
List<String> list = new ArrayList<>();
list.add("java");
list.add("react");
list.add("vue");
pageContext.setAttribute("arr1", arr);
pageContext.setAttribute("list1", list);
%>
<p>${arr1[0] }</p>
<p>${arr1[1] }</p>
<p>${list1[0] }</p>
<p>${list1["1"] }</p>
<p>${list1["2"] }</p>
아 근데 이번에도 그냥 리스트하나, 배열하나 인데 반환하는 방식이 다르다
28list-for
<%
String[] arr = {"apple", "berry", "melon"};
pageContext.setAttribute("list", arr);
%>
<p>${list[0] }</p>
<p>${list[1] }</p>
<p>${list[2] }</p>
<hr>
<%
for (int i = 0; i < arr.length; i++) {
pageContext.setAttribute("idx", i);
%>
<p><%= i %> : ${list[idx] }</p>
<%
}
%>
배열만들고 list 라는 이름으로 저장한 뒤, list 인덱스로 반환하고
for 문으로 인덱스 0~배열크기-1 만큼 돌려서 반환도 가능
인덱스번호로 넣을 i 도 setAttribute 해서 넣기
29list-for-ex
<%
List<String> list = new ArrayList<>();
list.add("java");
list.add("spring");
list.add("mvc");
list.add("controller");
pageContext.setAttribute("data", list);
%>
<%--
0 : java
1 : spring
2 : mvc
3 : controller
--%>
<%
for (int i = 0; i < list.size(); i++) {
pageContext.setAttribute("i", i);
%>
<p>${i} : ${data[i] }</p>
<%
}
%>
arraylist 로 리스트에 값들을 저장하고 리스트를 data에 저장
for 문으로 반환함
30list-for-from, to
from
<%
List<String> list = new ArrayList<>();
list.add("apple");
list.add("tesla");
list.add("meta");
list.add("google");
session.setAttribute("data", list);
response.sendRedirect("30list-for-to.jsp");
%>
list 에 값 넣기 , setAttribute 로 data 이름으로 저장
from → to 리디렉트
to
<%
List<String> data = (List<String>) session.getAttribute("data");
for (int i = 0; i < data.size() ; i++) {
pageContext.setAttribute("i", i);
%>
<p>${i } : ${data[i] }</p>
<%
}
%>
리스트 data 를 선언, 근데 data 를 받아온 (from 에서?)
for 문으로 반환
31jstl-from, to
30 파일을 그대로 < 표준 태그 표현식 JSTL > 를 사용하여 작성한 코드
from
<%
List<String> list = new ArrayList<>();
list.add("apple");
list.add("tesla");
list.add("meta");
list.add("google");
session.setAttribute("data", list);
response.sendRedirect("31jstl-to.jsp");
%>
arraylist 로 list 만들었음, 값 저장함
list 를 data 로 저장한 뒤 to 로 리디렉트
to
<c:forEach items="${data }" var="item" varStatus="status">
<p>${status.index } : ${item }</p>
</c:forEach>
JSTL
↓ import 해야함!!
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
32list-bean
<%
List<Bean03> list = new ArrayList<>();
Bean03 b1 = new Bean03();
b1.setName("donald");
b1.setAge(99);
Bean03 b2 = new Bean03();
b2.setName("trump");
b2.setAge(33);
list.add(b1);
list.add(b2);
pageContext.setAttribute("people", list);
%>
<p>${people[0].name } : ${people[0].age }</p>
<p>${people[1].name } : ${people[1].age }</p>
arraylist list 선언
Bean03 객체 b1 선언 - name, age 에 donald, 99 저장
Bean03 객체 b2 선언 - name, age 에 trump, 33 저장
처음 선언한 리스트 list 에 b1, b2 추가
setAttribute 로 people 이름으로 list 를 저장
people 인덱스로 값 반환
33list-bean
<%
Bean04 o1 = new Bean04();
o1.setNickName("ironman");
o1.setAge(22);
Bean04 o2 = new Bean04();
o2.setNickName("widow");
o2.setAge(11);
Bean04[] list = {o1, o2};
pageContext.setAttribute("list", list);
%>
<p>${list[0].nickName } : ${list[0].age }</p>
<p>${list[1].nickName } : ${list[1].age }</p>
Bean04 객체 o1 생성 - 메소드로 nickname 에 ironman, age 에 22 를 저장
Bean04 객체 o2 생성 - 메소드로 nickname 에 widow, age 에 11 를 저장
Bean04 리스트 ... 만들어서 o1, o2 저장
setAttribute 로 list 에 방금만든 list 저장
list[0] ...
34list-bean
<%
Bean05 o1 = new Bean05();
Bean03 o2 = new Bean03();
o2.setName("captain");
o1.setInfo(o2);
Bean05[] arr = {o1};
Map<String, Bean05[]> map = new HashMap<>();
map.put("data", arr);
pageContext.setAttribute("data", map);
%>
<%-- el사용해서 captain 출력 --%>
<p>${data.data[0].info.name }</p>
Bean05 객체 o1, Bean03 객체 o2 생성
o2 - 메소드 setName 이용하여 name 에 captain 저장
o1 - 메소드 setInfo 이용하여 info 에 o2 저장
Bean05 배열 arr 만들어서 o1 저장
HashMap map 생성, <String, Bean05> 가 key, value?
map 에 data, arr 저장
data 의 이름으로 map 저장
el 로 captain 출력하기 위해 data.data[0].info.name 작성
35implicit-object
< EL 기본객체 11개 >
<p>pageContext : ${pageContext }</p>
<p>pageScope: ${pageScope }</p>
<p>requestScope : ${requestScope }</p>
<p>sessionScope : ${sessionScope }</p>
<p>applicationScope : ${applicationScope }</p>
<p>param : ${param }</p>
<p>paramValues : ${paramValues }</p>
<p>header : ${header }</p>
<p>headerValues : ${headerValues }</p>
<p>cookie : ${cookie }</p>
<p>initParam : ${initParam }</p>
36scope
<%
pageContext.setAttribute("attr1", "pageVal1");
pageContext.setAttribute("page-attr1", "page-val1");
%>
<p>${attr1 }</p>
<p>${pageScope.attr1 }</p>
<p>${pageScope["attr1"] }</p>
<p>${pageScope["page-attr1"] }</p>
setAttribute 로 attr1 의 이름으로 pageVal1 저장, page-attr1 의 이름으로 page-val1 저장
el 로 반환
근데 왜 pageScope.attr1, pageScope["attr1"], pageScope["page-attr1"] 이렇게 반환하지?
- 아, 점 연산자 못 쓰는 것을 [] 로 대체했기 때문
공통점은 Map 객체라는 것 (속성, 값)
pageScope: pageContext 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
requestScope: request 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
sessionScope: session 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
applicationScope: application 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
37scope
request 에 같은 이름의 attr 넣어도 requestscope 로 꺼낼 수 있나?
- 중복된 이름이 있을 경우, 좁은 영역의 것이 출력되는데 , 그 중 넓은 영역의 값을 꺼내고 싶다면 가능하다
혹은 점 연산자로 출력하기 어려운 경우!
<%
pageContext.setAttribute("attr1", "page value1");
request.setAttribute("attr1", "request value1");
%>
<p>${attr1 }</p>
<p>${requestScope.attr1 }</p>
pageContext 의 setAttribute 로 attr1 에 page value1 값 저장,
request 의 setAttribute 로 attr1 에 requesr value1 값 저장
el 로 반환
지금 이름이 attr1 으로 중복이기 때문에 단순히 attr1 으로 꺼내면 좁은 영역인 page 로 저장한 값 page value 가 반환
request 로 저장한 값을 꺼내고 싶다면 아까 배운대로 requestScope.attr1 으로 작성하면 됨
38scope
<%
pageContext.setAttribute("data", "page data");
request.setAttribute("data", "req data");
session.setAttribute("data", "session data");
application.setAttribute("data", "app data");
pageContext.setAttribute("new data", "new page data");
request.setAttribute("new data", "new req data");
session.setAttribute("new data", "new session data");
application.setAttribute("new data", "new app data");
%>
<p>\${data} : ${data }</p>
<p>\${pageScope.data } : ${pageScope.data }</p>
<p>\${requestScope.data } : ${requestScope.data }</p>
<p>\${sessionScope.data } : ${sessionScope.data }</p>
<p>\${applicationScope.data } : ${applicationScope.data }</p>
<hr>
<p>\${pageScope["new data"] } : ${pageScope["new data"] }</p>
<p>\${requestScope["new data"] } : ${requestScope["new data"] }</p>
<p>\${sessionScope["new data"] } : ${sessionScope["new data"] }</p>
<p>\${applicationScope["new data"] } : ${applicationScope["new data"] }</p>
비슷한 소리임 조금 더 다양하게, 심화
39param
< el param 기본객체 >
request parameter : <%= request.getParameter("param1") %>
${param.param1 }
${param.food }
<p>request parameter : <%= request.getParameter("param1") %></p>
<p>\${param.param1 } : ${param.param1 }</p>
<p>\${param.food } : ${param.food }</p>
실행하면,

쿼리스트링으로 param1=apple 을 작성해주면, 첫번째와 두번째 줄의 결과가 apple 로 뜬다
40form, view
from
<form action="40view.jsp" method="post">
<input type="text" name="id" placeholder="아이디">
<br>
<input type="password" name="password" placeholder="암호">
<br>
<input type="email" name="email" placeholder="이메일">
<br>
<textarea name="address" id="" cols="30" rows="10" placeholder="주소"></textarea>
<br>
<input type="submit" value="전송">
</form>
그냥 로그인 창 action 으로 view 파일로 넘겨주고
view
<p>id : ${param.id }</p>
<p>password : ${param.password }</p>
<p>address : ${param.address }</p>
<p>email : ${param.email }</p>
아까 받은 값들을 param.name 으로 el 방식으로 반환함
'course 2021 > JSP' 카테고리의 다른 글
JSP15 - 12jstl (0) | 2021.11.22 |
---|---|
JSP14 - 11el(3) (0) | 2021.11.21 |
JSP12 - 11el (0) | 2021.11.19 |
JSP11 - 10scope (0) | 2021.11.19 |
JSP10 - 09cookie (0) | 2021.11.19 |
21map-baen
Map<String, Bean04> map = new HashMap();
Bean04 obj = new Bean04();
obj.setNickName("korea");
obj.setAge(30000);
obj.setVip(true);
map.put("key1", obj);
pageContext.setAttribute("data", map);
pageContext.setAttribute("key1", "key1");
pageContext.setAttribute("nickName", "nickName");
pageContext.setAttribute("age", "age");
pageContext.setAttribute("vip", "vip");
pageContext.setAttribute("key2", "seoul");
%>
<p>${data.key1.nickName }</p>
<p>${data.key1.age }</p>
<p>${data.key1.vip }</p>
<hr>
<p>${data["key1"]["nickName"] }</p>
<p>${data["key1"]["age"] }</p>
<p>${data["key1"]["vip"] }</p>
<hr>
<p>${data[key1][nickName] }</p>
<p>${data[key1][age] }</p>
<p>${data[key1][vip] }</p>
<p>${[nickName] }</p>
<p>${[key2] }</p>
또쉬맵 .. hashmap, 이번엔 bean04
page 영역 attribute 로 map 객체를 data 라는 이름에 넣고 map 에 key, value 쌍을 (key1(String), obj(Bean04)) 로 추가
22bean-bean
자바파일 쓸 때 해당 패키지 import 했음 <%@ page import="sample03javabean.*" %>
아래에도 안써뒀는데 암튼 bean 쓸거면 import 해야됨
<%
Bean05 obj1 = new Bean05();
Bean03 obj2 = new Bean03();
obj2.setName("donald");
obj2.setAge(99);
obj2.setKid(false);
obj1.setCity("seoul");
obj1.setInfo(obj2);
pageContext.setAttribute("data1", obj1);
%>
<p>${data1.city }</p>
<p>${data1.info.name }</p>
<p>${data1.info.age }</p>
<p>${data1.info.kid }</p>
bean 객체 선언 - obj1, 2
메소드 사용하여 값들을 저장, pageContext.setAttribute 로 data1 에 obj1 을 저장
아래에서 값을 모두 반환해보기
23properties
<%
Map<String, Bean05> map = new HashMap<>();
Bean05 obj = new Bean05();
Bean03 info = new Bean03();
obj.setCity("ny");
obj.setInfo(info);
info.setName("trump");
info.setAge(33);
info.setKid(true);
map.put("data1", obj);
pageContext.setAttribute("data1", map);
%>
<%--
*el사용*
trump
33
ny
true
--%>
<p>${data1.data1.info.name }</p>
<p>${data1.data1.info.age }</p>
<p>${data1.data1.city }</p>
<p>${data1.data1.info.kid }</p>
hashmap 생성 또쉬맵 - map
Bean 객체생성 - obj, info
obj, info로 bean의 set메소드 사용하여 값 저장
map.put 으로 map 안에 obj 을 추가 (data1 의 이름으로)
page 영역에서 setAttribute 로 map 을 data1에 저장하여 전달
아래에서 el 사용하여, 값 반환
data1.data1.info.name
data1.data1.city
Bean05 에 있는 setInfo 메소드 ↓
public void setInfo(Bean03 info) {
this.info = info;
}
map 이라는 이름의 HashMap 선언, Bean05 의 객체 obj 와 Bean03 의 객체 info 선언
obj 즉, Bean05 안의 메소드 setCity 와 setInfo 로 city 에 ny 를, setInfo 에 info 에 info(Bean03 객체) 를 저장
info (Bean03) 안의 메소드 setName, setAge, setKid 로 name 에 trump 를, age 에 33 을, kid 에 true 를 저장
map 에 data1 의 이름으로 obj 저장
- 여기까지 map>data1(obj)>city(ny), {info(info)> name(trump), age(33), kid(true)}
그리고 pageContext.setAttribute("data1", map) 에서 data1 의 이름으로 map 을 저장
결론: 그래서 el 로 반환할 때, 저렇게 했다고 한다~! data1 은 이름이 중복된거임~
24list
<%
List<String> list = new ArrayList<>();
list.add("coffee");
list.add("beer");
list.add("soju");
pageContext.setAttribute("attr1", list);
%>
<p>list : ${attr1 }</p>
<p>list 0번째 : ${attr1[0] }</p>
<p>list 1번째 : ${attr1[1] }</p>
<p>list 2번째 : ${attr1[2] }</p>
<p>list 3번째 : ${attr1[3] }</p>
이번엔 list 로! string 저장할거야
list 에 coffee, beer, soju 추가
page 영역에 attribute 로 list 를 attr1 이름으로 저장
그리고 el 로 값을 모두 반환
- 첫번째는 attr1 을 (즉, list 를) 반환하므로 : [coffee, beer, soju] 로 표시됨
- 두번째부터는 해당 인덱스에 저장된 값을 각각 반환
- 마지막으로 [3] 은 리스트에 존재하지 않으므로 반환값이 없음
25array
<%
String[] arr1 = {"java", "react", "jsp", "vue"};
pageContext.setAttribute("list", arr1);
%>
<p>0 : ${list[0] }</p>
<p>1 : ${list[1] }</p>
<p>2 : ${list[2] }</p>
<p>3 : ${list[3] }</p>
<p>4 : ${list[4] }</p>
배열에 string형으로 값들 (4개) 저장
setAttribute 로 배열을 list 라는 이름으로 저장
el 안에서 배열명[인덱스] 이름으로 반환
하지만 인덱스 3까지 존재하니까 4는 반환값 없음 (null 아니고 그냥 없음)
26list-ex
<body>
<%
List<String> list1 = new ArrayList<>();
list1.add("v");
list1.add("suga");
list1.add("rm");
String[] arr1 = {"jk", "jin", "jimin", "hope"};
pageContext.setAttribute("data1", list1);
pageContext.setAttribute("data2", arr1);
%>
<%-- v, suga, rm, jk, jin, jimin, hope --%>
<p>${data1[0] }</p>
<p>${data1[1] }</p>
<p>${data1[2] }</p>
<p>${data2[0] }</p>
<p>${data2[1] }</p>
<p>${data2[2] }</p>
<p>${data2[3] }</p>
arraylist 로 list1 선언
list1 에 v, suga, rm 을 저장
그리고 갑자기 이번에는 배열을 만들었다
- 여기까지 정리: 리스트 하나 list1, 배열 하나 arr1
그리고 data1 의 이름으로 list1 을 저장, data2 의 이름으로 arr1 을 저장
이제 모두 반환
27list-ex
<%
String[] arr = {"banana", "apple"};
List<String> list = new ArrayList<>();
list.add("java");
list.add("react");
list.add("vue");
pageContext.setAttribute("arr1", arr);
pageContext.setAttribute("list1", list);
%>
<p>${arr1[0] }</p>
<p>${arr1[1] }</p>
<p>${list1[0] }</p>
<p>${list1["1"] }</p>
<p>${list1["2"] }</p>
아 근데 이번에도 그냥 리스트하나, 배열하나 인데 반환하는 방식이 다르다
28list-for
<%
String[] arr = {"apple", "berry", "melon"};
pageContext.setAttribute("list", arr);
%>
<p>${list[0] }</p>
<p>${list[1] }</p>
<p>${list[2] }</p>
<hr>
<%
for (int i = 0; i < arr.length; i++) {
pageContext.setAttribute("idx", i);
%>
<p><%= i %> : ${list[idx] }</p>
<%
}
%>
배열만들고 list 라는 이름으로 저장한 뒤, list 인덱스로 반환하고
for 문으로 인덱스 0~배열크기-1 만큼 돌려서 반환도 가능
인덱스번호로 넣을 i 도 setAttribute 해서 넣기
29list-for-ex
<%
List<String> list = new ArrayList<>();
list.add("java");
list.add("spring");
list.add("mvc");
list.add("controller");
pageContext.setAttribute("data", list);
%>
<%--
0 : java
1 : spring
2 : mvc
3 : controller
--%>
<%
for (int i = 0; i < list.size(); i++) {
pageContext.setAttribute("i", i);
%>
<p>${i} : ${data[i] }</p>
<%
}
%>
arraylist 로 리스트에 값들을 저장하고 리스트를 data에 저장
for 문으로 반환함
30list-for-from, to
from
<%
List<String> list = new ArrayList<>();
list.add("apple");
list.add("tesla");
list.add("meta");
list.add("google");
session.setAttribute("data", list);
response.sendRedirect("30list-for-to.jsp");
%>
list 에 값 넣기 , setAttribute 로 data 이름으로 저장
from → to 리디렉트
to
<%
List<String> data = (List<String>) session.getAttribute("data");
for (int i = 0; i < data.size() ; i++) {
pageContext.setAttribute("i", i);
%>
<p>${i } : ${data[i] }</p>
<%
}
%>
리스트 data 를 선언, 근데 data 를 받아온 (from 에서?)
for 문으로 반환
31jstl-from, to
30 파일을 그대로 < 표준 태그 표현식 JSTL > 를 사용하여 작성한 코드
from
<%
List<String> list = new ArrayList<>();
list.add("apple");
list.add("tesla");
list.add("meta");
list.add("google");
session.setAttribute("data", list);
response.sendRedirect("31jstl-to.jsp");
%>
arraylist 로 list 만들었음, 값 저장함
list 를 data 로 저장한 뒤 to 로 리디렉트
to
<c:forEach items="${data }" var="item" varStatus="status">
<p>${status.index } : ${item }</p>
</c:forEach>
JSTL
↓ import 해야함!!
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
32list-bean
<%
List<Bean03> list = new ArrayList<>();
Bean03 b1 = new Bean03();
b1.setName("donald");
b1.setAge(99);
Bean03 b2 = new Bean03();
b2.setName("trump");
b2.setAge(33);
list.add(b1);
list.add(b2);
pageContext.setAttribute("people", list);
%>
<p>${people[0].name } : ${people[0].age }</p>
<p>${people[1].name } : ${people[1].age }</p>
arraylist list 선언
Bean03 객체 b1 선언 - name, age 에 donald, 99 저장
Bean03 객체 b2 선언 - name, age 에 trump, 33 저장
처음 선언한 리스트 list 에 b1, b2 추가
setAttribute 로 people 이름으로 list 를 저장
people 인덱스로 값 반환
33list-bean
<%
Bean04 o1 = new Bean04();
o1.setNickName("ironman");
o1.setAge(22);
Bean04 o2 = new Bean04();
o2.setNickName("widow");
o2.setAge(11);
Bean04[] list = {o1, o2};
pageContext.setAttribute("list", list);
%>
<p>${list[0].nickName } : ${list[0].age }</p>
<p>${list[1].nickName } : ${list[1].age }</p>
Bean04 객체 o1 생성 - 메소드로 nickname 에 ironman, age 에 22 를 저장
Bean04 객체 o2 생성 - 메소드로 nickname 에 widow, age 에 11 를 저장
Bean04 리스트 ... 만들어서 o1, o2 저장
setAttribute 로 list 에 방금만든 list 저장
list[0] ...
34list-bean
<%
Bean05 o1 = new Bean05();
Bean03 o2 = new Bean03();
o2.setName("captain");
o1.setInfo(o2);
Bean05[] arr = {o1};
Map<String, Bean05[]> map = new HashMap<>();
map.put("data", arr);
pageContext.setAttribute("data", map);
%>
<%-- el사용해서 captain 출력 --%>
<p>${data.data[0].info.name }</p>
Bean05 객체 o1, Bean03 객체 o2 생성
o2 - 메소드 setName 이용하여 name 에 captain 저장
o1 - 메소드 setInfo 이용하여 info 에 o2 저장
Bean05 배열 arr 만들어서 o1 저장
HashMap map 생성, <String, Bean05> 가 key, value?
map 에 data, arr 저장
data 의 이름으로 map 저장
el 로 captain 출력하기 위해 data.data[0].info.name 작성
35implicit-object
< EL 기본객체 11개 >
<p>pageContext : ${pageContext }</p>
<p>pageScope: ${pageScope }</p>
<p>requestScope : ${requestScope }</p>
<p>sessionScope : ${sessionScope }</p>
<p>applicationScope : ${applicationScope }</p>
<p>param : ${param }</p>
<p>paramValues : ${paramValues }</p>
<p>header : ${header }</p>
<p>headerValues : ${headerValues }</p>
<p>cookie : ${cookie }</p>
<p>initParam : ${initParam }</p>
36scope
<%
pageContext.setAttribute("attr1", "pageVal1");
pageContext.setAttribute("page-attr1", "page-val1");
%>
<p>${attr1 }</p>
<p>${pageScope.attr1 }</p>
<p>${pageScope["attr1"] }</p>
<p>${pageScope["page-attr1"] }</p>
setAttribute 로 attr1 의 이름으로 pageVal1 저장, page-attr1 의 이름으로 page-val1 저장
el 로 반환
근데 왜 pageScope.attr1, pageScope["attr1"], pageScope["page-attr1"] 이렇게 반환하지?
- 아, 점 연산자 못 쓰는 것을 [] 로 대체했기 때문
공통점은 Map 객체라는 것 (속성, 값)
pageScope: pageContext 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
requestScope: request 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
sessionScope: session 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
applicationScope: application 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
37scope
request 에 같은 이름의 attr 넣어도 requestscope 로 꺼낼 수 있나?
- 중복된 이름이 있을 경우, 좁은 영역의 것이 출력되는데 , 그 중 넓은 영역의 값을 꺼내고 싶다면 가능하다
혹은 점 연산자로 출력하기 어려운 경우!
<%
pageContext.setAttribute("attr1", "page value1");
request.setAttribute("attr1", "request value1");
%>
<p>${attr1 }</p>
<p>${requestScope.attr1 }</p>
pageContext 의 setAttribute 로 attr1 에 page value1 값 저장,
request 의 setAttribute 로 attr1 에 requesr value1 값 저장
el 로 반환
지금 이름이 attr1 으로 중복이기 때문에 단순히 attr1 으로 꺼내면 좁은 영역인 page 로 저장한 값 page value 가 반환
request 로 저장한 값을 꺼내고 싶다면 아까 배운대로 requestScope.attr1 으로 작성하면 됨
38scope
<%
pageContext.setAttribute("data", "page data");
request.setAttribute("data", "req data");
session.setAttribute("data", "session data");
application.setAttribute("data", "app data");
pageContext.setAttribute("new data", "new page data");
request.setAttribute("new data", "new req data");
session.setAttribute("new data", "new session data");
application.setAttribute("new data", "new app data");
%>
<p>\${data} : ${data }</p>
<p>\${pageScope.data } : ${pageScope.data }</p>
<p>\${requestScope.data } : ${requestScope.data }</p>
<p>\${sessionScope.data } : ${sessionScope.data }</p>
<p>\${applicationScope.data } : ${applicationScope.data }</p>
<hr>
<p>\${pageScope["new data"] } : ${pageScope["new data"] }</p>
<p>\${requestScope["new data"] } : ${requestScope["new data"] }</p>
<p>\${sessionScope["new data"] } : ${sessionScope["new data"] }</p>
<p>\${applicationScope["new data"] } : ${applicationScope["new data"] }</p>
비슷한 소리임 조금 더 다양하게, 심화
39param
< el param 기본객체 >
request parameter : <%= request.getParameter("param1") %>
${param.param1 }
${param.food }
<p>request parameter : <%= request.getParameter("param1") %></p>
<p>\${param.param1 } : ${param.param1 }</p>
<p>\${param.food } : ${param.food }</p>
실행하면,

쿼리스트링으로 param1=apple 을 작성해주면, 첫번째와 두번째 줄의 결과가 apple 로 뜬다
40form, view
from
<form action="40view.jsp" method="post">
<input type="text" name="id" placeholder="아이디">
<br>
<input type="password" name="password" placeholder="암호">
<br>
<input type="email" name="email" placeholder="이메일">
<br>
<textarea name="address" id="" cols="30" rows="10" placeholder="주소"></textarea>
<br>
<input type="submit" value="전송">
</form>
그냥 로그인 창 action 으로 view 파일로 넘겨주고
view
<p>id : ${param.id }</p>
<p>password : ${param.password }</p>
<p>address : ${param.address }</p>
<p>email : ${param.email }</p>
아까 받은 값들을 param.name 으로 el 방식으로 반환함
'course 2021 > JSP' 카테고리의 다른 글
JSP15 - 12jstl (0) | 2021.11.22 |
---|---|
JSP14 - 11el(3) (0) | 2021.11.21 |
JSP12 - 11el (0) | 2021.11.19 |
JSP11 - 10scope (0) | 2021.11.19 |
JSP10 - 09cookie (0) | 2021.11.19 |