java bean
속성(데이터), 변경 이벤트, 객체 직렬화를 위한 표준. JSP 에서는 속성을 표현하기 위한 용도로 사용됨.
<java bean properties>
get set 메소드에 의해 결정됨
property 의 이름은 get, set 메소드의 get, set 을 지우고 앞글자를 소문자로 함
ex) public String getValue1(){ return Value1; }
public void setValue1(String value1){ Value1 = value1; }
*property 값에는 읽기전용과 읽기/쓰기 가 있다
읽기전용 property: get 또는 is 메소드만 존재하는 property
읽기/쓰기 property: get/set 또는 is/set 메소드가 존재하는 property
*property type 이 boolean 형이면 get 대신 is 를 쓸 수 있다
* getter, setter
> Getter: getFieldName()
- public / 리턴타입: 필드의 리턴타입 / 메소드명: get+필드이름(첫글자대문자) / 리턴값: 필드값
> Setter: setFieldName(타입 fieldName)
- public / void / 메소드명: set+필드이름(첫글자대문자) / 매개변수타입: 필드타입
01javabean
기본 생성을 가지고 있어야 함
생성자를 작성하지 않으면 기본 생성자가 자동으로 추가된다
예제)
아래 두개의 property 만들기
- property name (read/write)
- property age (read/write)
bean01.java
public class Bean01{
private String value1;
private int value2;
private int value3;
private int value4;
public int getVal(){
return value4;
}
public void setVal(int val){
this.value4 = val;
}
public String getValue1(){
return value1;
}
public void setValue1(String value1){
this.value1 = value1;
}
public int getValue2(){
return value2;
}
public void setValue2(int value2){
this.value2 = value2;
}
public int getValue3(){
return value3;
}
public void setValue3(int value3){
this.value3 = value3;
}
}
Bean02.java
public class Bean02{
private String name;
private double age;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public double getAge(){
return age;
}
public void setAge(double age){
this.age = age;
}
}
- 일단 파일은 모두 아예 자바파일로 작성되었음
그리고 자바파일은 webcontent 가 아닌 src 폴더에 위치!!!!
(아 이전에 sample 어딨지 하던것도 여기에 있었다. 자바파일이라서.)
- 01파일
일단 value 1~4 모두 get, set
get 은 리턴했고, set 은 this 로 값을 저장했다 (매개변수로 받은 값)
- 02파일
name 이랑 age 하래서 getName, setName, getAge, setAge 했음
뭐야 파일 1이랑 무슨 상관?
- 아마 예제는 2번 파일인 듯
02javabean
예제)
아래 3개의 속성을 갖도록 java bean 규칙을 따라 작성하기
String nickname, int age, boolean vip
- bean03.java
public class Bean03 {
private String name;
private int age;
private boolean kid;
// public boolean getKid() {
// return kid;
// }
public boolean isKid() {
return kid;
}
public void setKid(boolean kid) {
this.kid = kid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
- bean04.java
public class Bean04 {
private String nickName;
private int age;
private boolean vip;
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isVip() {
return vip;
}
public void setVip(boolean vip) {
this.vip = vip;
}
}
아마 예제는 4번 파일인 듯
nickname, age, vip 하래서 했고, vip 는 boolean 형이라서 get 대신 is 를 사용한 것을 볼 수 있다
03el
expression language
작성법: ${attribute }
jsp 출력용으로 사용된다
** 역슬래시 \ 사용 시 el 적용 안됨 (ex. \${attribute })
예제)
<%
pageContext.setAttribute("pageAttr1", "pageVal1");
pageContext.setAttribute("pageAttr2", 100000);
pageContext.setAttribute("pageAttr3", true);
%>
<p>java code : <%= pageContext.getAttribute("pageAttr1") %></p>
<p>el : ${pageAttr1 }</p>
<p>java code : <%= pageContext.getAttribute("pageAttr2") %></p>
<%-- el사용해서 pageAttr2의 값 출력 코드 작성 --%>
<p>el : ${pageAttr2 }</p>
<%-- java code (expression) 사용해서 pageAttr3의 값 출력 코드 작성 --%>
<%-- el사용해서 pageAttr3의 값 출력 코드 작성 --%>
<p>java code : <%= pageContext.getAttribute("pageAttr3") %></p>
<p>el : ${pageAttr3 }</p>
<p>java code : <%= pageContext.getAttribute("pageAttr4") %></p>
<p>el : ${pageAttr4 }</p>
맨 위의 자바코드에서 pageAttr1,2,3 에 각각 값들을 넣었다
java code : <%= pageContext.getAttribute("pageAttr1") %>
el : ${pageAttr1 }
→ 아마 java code 로 저렇게, el 로는 저렇게 작성한다고 보면 될 듯. 둘 다 같은 거.
1, 2, 3, 4 다 똑같음
아 그리고 맨 위에서 자바코드로 pageContext.setAttribute 로 값 넣었던거 잊지말깅 그러니까 반환했지
근데 4 는 값을 안넣었기 때문에 null 반환
04el-request
el 없는 값이면 아무것도 출력되지 않는다
* boolean 형 true, false 와 String 형 true, false 는 html 출력값이 같아서 코드 보고 판단해야 함
<%
request.setAttribute("reqAttr1", "reqVal1");
request.setAttribute("reqAttr2", 900000000);
request.setAttribute("reqAttr3", false);
%>
<p>java code : <%= request.getAttribute("reqAttr1") %></p>
<p>el : ${reqAttr1 }</p>
<p>java code : <%= request.getAttribute("reqAttr2") %></p>
<p>el : ${reqAttr2 }</p>
<p>java code : <%= request.getAttribute("reqAttr3") %></p>
<p>el : ${reqAttr3 }</p>
<p>java code : <%= request.getAttribute("reqAttr4") %></p>
<p>el : ${reqAttr4 }</p>
request.setAttribute 로 reqAttr 1, 2, 3 에 값 저장
위에 03 이랑 다른 건 getAttribute 에서 pageContext 가 아닌 request 라는 것
하지만 어차피 el 로는 동일
05forward-from, to
from
<%
request.setAttribute("reqAttr1", 3.1415);
%>
<jsp:forward page="05forward-to.jsp"></jsp:forward>
request.setAttribute 로 reqAttr1 에 3.1415 넣기
forward - to 파일로 보냄. 포워드는 html 코드는 다 지우지만 자바코드는 실행함
to
<p>reqAttr1 : ${reqAttr1 }</p>
${reqAttr1 } 반환했음 (아까 포워딩 되기 전에 파일에서 저장한 값)
06from, to
from
<%--
request 영역에 적절한 attributes 를 추가
--%>
<%
request.setAttribute("name", "donald");
request.setAttribute("age", 30);
request.setAttribute("height", 190.5);
request.setAttribute("width", 300.3333);
%>
<jsp:forward page="06to.jsp"></jsp:forward>
request.setAttribute 로 값 다 넣고 to 파일로 포워딩
to
<p>name : ${name }</p> <%-- donald --%>
<p>age : ${age }</p> <%-- 30 --%>
<p>height : ${height }</p> <%-- 190.5 --%>
<p>width : ${width }</p> <%-- 300.3333 --%>
el 로 값 다 반환함
음... 주목할만한 건 <p> 태그 안에서 작성되었다는 것?
07session
이번에는 session.setAttribute 로 넣고, session.getAttribute 로 반환하는데
이것 역시 el 로 반환해도 같다
08redirect-from, to
from
session.setAttribute 로 값 다 넣고 갑자기 리디렉트, to 파일로
to
갑자기 냅다 반환함 el 로
- 어 전에 배웠듯이, request 로 전달 안됨. 따라서 1)쿼리스트링 2)session 으로 전달해야 함
09
08이랑 동일
10application
application 으로 넣고 반환하기
걍 똑같음
11application
10 에서 전달한 값 여기서 그냥 받음 왜냐면 application 이니까 ㅇㅇ
- application 은 모든 jsp, servlet 이 공유해서 사용하는 객체이므로 !
12scope
el 꺼낼 때 어떤 영역에서 꺼내는 지 모름
만약 중복된 이름이 있다면 값을 넣었을 때 어떤 순서대로 찾는지??
같은 이름으로 다른 영역에 attribute 가 있다면
pageContext > request > session > application 순으로!!
<%
pageContext.setAttribute("attr01", "pageVal01");
request.setAttribute("attr01", "reqVal01");
session.setAttribute("attr01", "sesVal01");
application.setAttribute("attr01", "appVal01");
request.setAttribute("attr02", "reqVal02");
session.setAttribute("attr02", "sesVal02");
application.setAttribute("attr02", "appVal02");
session.setAttribute("attr03", "sesVal03");
application.setAttribute("attr03", "appVal03");
application.setAttribute("attr04", "appVal04");
%>
<p>attr01 : ${attr01 }</p>
<p>attr02 : ${attr02 }</p>
<p>attr03 : ${attr03 }</p>
<p>attr04 : ${attr04 }</p>
<p>attr05 : ${attr05 }</p>
pageContext, request, session, application 모두 1 저장
request, session, application 에 2 저장
session, application 에 3 저장
application 4 저장
후, el 로 1, 2, 3, 4, 5 반환
1에서는 (모두 다 저장한 건) pageContext 반환
2에서는 request 반환
3에서는 session 반환
4에서는 application 반환
13javaBean
<%
Bean03 obj1 = new Bean03();
obj1.setAge(30);
obj1.setName("donald");
obj1.setKid(false);
pageContext.setAttribute("attr1", obj1);
%>
<hr>
<p>java code : <%= pageContext.getAttribute("attr1") %></p>
<p>el : ${attr1 }</p>
<hr>
<%
Bean03 var1 = (Bean03) pageContext.getAttribute("attr1");
%>
<p>java code : <%= var1.getName() %></p>
<p>el : ${attr1.name }</p>
<p>java code : <%= var1.getAge() %></p>
<p>el : ${attr1.age }</p>
<p>java code : <%= var1.isKid() %></p>
<p>el : ${attr1.kid }</p>
Bean03 객체생성, obj1
obj1 에 age, name, kid 에 값 저장, attr1 에 obj1 저장
java code, el 로 attr1 값 반환 (obj1)
Bean03 객체생성, var1 , 근데 attr1?
java code, el 로 값 반환,
Bean03 은 아까 작성한 자바파일, 객체생성을 했으니까 변수명.메소드명 을 쓸 수 있지!
그래서 자바파일에 작성한 대로 set 하면 저장하고 get 하면 반환하네!
14forward-from,to
from
<%
Bean03 obj1 = new Bean03();
obj1.setName("korea");
obj1.setAge(30000);
obj1.setKid(false);
request.setAttribute("bean1", obj1);
%>
<jsp:forward page="14forward-to.jsp"></jsp:forward>
Bean03 객체 obj1 선언
Name, Age, Kid 값 저장
bean1 에 obj1 저장
포워딩 to 파일로
to
<%
Bean03 o = (Bean03) request.getAttribute("bean1");
%>
<p>name : <%= o.getName() %></p>
<p>age : <%= o.getAge() %></p>
<p>kid : <%= o.isKid() %></p>
값들을 모두 반환
근데 그 전에 객체생성 함
객체변수명.메소드명()
15forward-from, to
from
<%
Bean03 obj1 = new Bean03();
obj1.setName("korea");
obj1.setAge(30000);
obj1.setKid(false);
request.setAttribute("bean1", obj1);
%>
<jsp:forward page="15forward-to-el.jsp"></jsp:forward>
bean03 객체생성
포워딩
to
<p>name : ${bean1.name }</p>
<p>age : ${bean1.age }</p>
<p>kid : ${bean1.kid }</p>
또 ...
똑같지 뭐
16from, to
from
<%
Bean04 b2 = new Bean04();
b2.setAge(99999);
b2.setNickName("captain");
b2.setVip(true);
session.setAttribute("bean2", b2);
response.sendRedirect("16to.jsp");
%>
bean04 객체생성, b2
set 메소드로 값 저장
session.setAttribute 로 bean2 에 b2 (아까 생성한 객체 변수) 저장
그리고 to 파일로 리디렉션
to
p>nickName : ${bean2.nickName }</p>
<p>age : ${bean2.age }</p>
<p>vip : ${bean2.vip }</p>
그냥 이번에도 반환함
${attribute명.property명 }
17map
<%
Map<String, String> map = new HashMap<>();
map.put("lang", "java");
map.put("pre", "html");
map.put("pattern", "mvc");
// 2개의 key,value 쌍(entry) 넣고
map.put("city", "seoul");
map.put("food", "cake");
pageContext.setAttribute("bean1", map);
%>
<hr>
<p>map : ${bean1 }</p>
<p>lang : ${bean1.lang }</p>
<p>pre : ${bean1.pre }</p>
<p>pattern : ${bean1.pattern }</p>
<%-- 위에 추가한 value를 출력 -el 사용 --%>
<p>city: ${bean1.city }</p>
<p>food: ${bean1.food }</p>
HashMap, map 에 값 (key, value) 저장
pageContext.setAttribute 로 bean1 에 map 저장
각 값을 el 로 반환 - bean1.key
bean1 의 반환값은 key=value 쌍으로 모두 반환됨
18map
map 의 key 는 대소문자 규칙 없음
property 명이 변수명
el 의 점 연산자로 숫자 사용 불가하기 때문에 점 연산자 대신 쓸 수 있는 연산자 [] 가 있다
만약 key 가 숫자라면 [] 안에 String 으로 작성 (쌍따옴표!! "")
ex. ${bean1.1 } 말고 ${bean1["1"] } 이렇게 작성
ex2. ${bean1.nick name } 말고 ${bean1["nick name"] } 이렇게 작성
<%
Map<String, String> map = new HashMap<>();
map.put("name", "donald");
map.put("Name", "trump");
map.put("1", "java");
map.put("nick name", "coffee");
pageContext.setAttribute("bean1", map);
%>
<p>name : ${bean1.name }</p>
<p>name : ${bean1["name"] }</p>
<p>name : ${bean1[name] }</p>
<p>Name : ${bean1.Name }</p>
<p>Name : ${bean1["Name"] }</p>
<%-- <p>1 : ${bean1.1 }</p> --%>
<p>1 : ${bean1["1"] }</p>
<%-- <p>nick name : ${bean.nick name }</p> --%>
<p>nick name : ${bean1["nick name"] }</p>
<hr>
<%
Bean03 obj1 = new Bean03();
obj1.setName("computer");
pageContext.setAttribute("bean2", obj1);
%>
<p>name : ${bean2.name }</p>
<p>name : ${bean2["name"] }</p>
HashMap 으로 map 안에 key=value 쌍으로 값을 여러개 저장
el 로 반환하는데 , 이번에는 숫자 key, 띄어쓰기 포함된 key 가 포함
마지막에 Bean03 객체생성
19from,to
from
<%
Map<String, String> data = new HashMap<>();
data.put("name", "computer");
data.put("city", "ny");
data.put("1000", "son");
data.put("this day", "11월 4일");
request.setAttribute("data1", data);
%>
<jsp:forward page="19to.jsp" />
HashMap 으로 data 안에 key=value 저장
request.setAttribute 로 data1 안에 data 저장
to 파일로 포워딩
to
<p>name : ${data1.name }</p>
<p>city : ${data1.city }</p>
<p>1000 : ${data1["1000"] }</p>
<p>this day : ${data1["this day"] }</p>
값 반환
20map-bean
map 과 bean 합쳐서
${attribute명.(map의)key명.(bean의)property명 }
<%
Map<String, Bean03> map = new HashMap<>();
Bean03 val1 = new Bean03();
val1.setName("donald");
val1.setAge(3000);
Bean03 val2 = new Bean03();
val2.setName("trump");
val2.setAge(999);
Bean03 val3 = new Bean03();
val3.setName("john");
val3.setAge(22);
map.put("person1", val1);
map.put("person2", val2);
map.put("new person", val3);
pageContext.setAttribute("persons", map);
%>
<p>1번 이름 : ${persons.person1.name }</p>
<p>1번 나이 : ${persons.person1.age }</p>
<p>2번 이름 : ${persons.person2.name }</p>
<p>2번 나이 : ${persons.person2.age }</p>
<p>new person 이름 : ${persons["new person"].name }</p>
<p>new person 이름 : ${persons["new person"]["name"] }</p>
<p>new person 나이 : ${persons["new person"].age }</p>
<p>new person 나이 : ${persons["new person"]["age"] }</p>
또 hashmap - https://tokkicode.tistory.com/26?category=987176
day19 - API(2) generic, collection
> java.util 패키지 > 제네릭 generic 클래스나 인터페이스 선언에 유형 매개변수가 들어있는 클래스 제네릭 타입은 클래스/인터페이스 이름 뒤 "<매개변수>" 위치 클래스에 원치않는 datatype이 들어가
tokkicode.tistory.com
(근데 <String, Bean03> 은 무슨 의미지 왜 쓰지? - key 값이 String, value 값이 Bean03 이라는...)
반환할 값이 person(Attribute).property 여야하는데, 받은값이 map 이다.
map 은 key 값을 써줘야 value 를 얻을 수 있다
여기에서 value 는 java bean 인데, 이 java bean 은 property 써야 값을 얻을 수 있음
결론: key, property → java bean (value) ??
'course 2021 > JSP' 카테고리의 다른 글
JSP14 - 11el(3) (0) | 2021.11.21 |
---|---|
JSP13 - 11el(2) (0) | 2021.11.20 |
JSP11 - 10scope (0) | 2021.11.19 |
JSP10 - 09cookie (0) | 2021.11.19 |
JSP09 - 08session (0) | 2021.11.18 |
java bean
속성(데이터), 변경 이벤트, 객체 직렬화를 위한 표준. JSP 에서는 속성을 표현하기 위한 용도로 사용됨.
<java bean properties>
get set 메소드에 의해 결정됨
property 의 이름은 get, set 메소드의 get, set 을 지우고 앞글자를 소문자로 함
ex) public String getValue1(){ return Value1; }
public void setValue1(String value1){ Value1 = value1; }
*property 값에는 읽기전용과 읽기/쓰기 가 있다
읽기전용 property: get 또는 is 메소드만 존재하는 property
읽기/쓰기 property: get/set 또는 is/set 메소드가 존재하는 property
*property type 이 boolean 형이면 get 대신 is 를 쓸 수 있다
* getter, setter
> Getter: getFieldName()
- public / 리턴타입: 필드의 리턴타입 / 메소드명: get+필드이름(첫글자대문자) / 리턴값: 필드값
> Setter: setFieldName(타입 fieldName)
- public / void / 메소드명: set+필드이름(첫글자대문자) / 매개변수타입: 필드타입
01javabean
기본 생성을 가지고 있어야 함
생성자를 작성하지 않으면 기본 생성자가 자동으로 추가된다
예제)
아래 두개의 property 만들기
- property name (read/write)
- property age (read/write)
bean01.java
public class Bean01{
private String value1;
private int value2;
private int value3;
private int value4;
public int getVal(){
return value4;
}
public void setVal(int val){
this.value4 = val;
}
public String getValue1(){
return value1;
}
public void setValue1(String value1){
this.value1 = value1;
}
public int getValue2(){
return value2;
}
public void setValue2(int value2){
this.value2 = value2;
}
public int getValue3(){
return value3;
}
public void setValue3(int value3){
this.value3 = value3;
}
}
Bean02.java
public class Bean02{
private String name;
private double age;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public double getAge(){
return age;
}
public void setAge(double age){
this.age = age;
}
}
- 일단 파일은 모두 아예 자바파일로 작성되었음
그리고 자바파일은 webcontent 가 아닌 src 폴더에 위치!!!!
(아 이전에 sample 어딨지 하던것도 여기에 있었다. 자바파일이라서.)
- 01파일
일단 value 1~4 모두 get, set
get 은 리턴했고, set 은 this 로 값을 저장했다 (매개변수로 받은 값)
- 02파일
name 이랑 age 하래서 getName, setName, getAge, setAge 했음
뭐야 파일 1이랑 무슨 상관?
- 아마 예제는 2번 파일인 듯
02javabean
예제)
아래 3개의 속성을 갖도록 java bean 규칙을 따라 작성하기
String nickname, int age, boolean vip
- bean03.java
public class Bean03 {
private String name;
private int age;
private boolean kid;
// public boolean getKid() {
// return kid;
// }
public boolean isKid() {
return kid;
}
public void setKid(boolean kid) {
this.kid = kid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
- bean04.java
public class Bean04 {
private String nickName;
private int age;
private boolean vip;
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isVip() {
return vip;
}
public void setVip(boolean vip) {
this.vip = vip;
}
}
아마 예제는 4번 파일인 듯
nickname, age, vip 하래서 했고, vip 는 boolean 형이라서 get 대신 is 를 사용한 것을 볼 수 있다
03el
expression language
작성법: ${attribute }
jsp 출력용으로 사용된다
** 역슬래시 \ 사용 시 el 적용 안됨 (ex. \${attribute })
예제)
<%
pageContext.setAttribute("pageAttr1", "pageVal1");
pageContext.setAttribute("pageAttr2", 100000);
pageContext.setAttribute("pageAttr3", true);
%>
<p>java code : <%= pageContext.getAttribute("pageAttr1") %></p>
<p>el : ${pageAttr1 }</p>
<p>java code : <%= pageContext.getAttribute("pageAttr2") %></p>
<%-- el사용해서 pageAttr2의 값 출력 코드 작성 --%>
<p>el : ${pageAttr2 }</p>
<%-- java code (expression) 사용해서 pageAttr3의 값 출력 코드 작성 --%>
<%-- el사용해서 pageAttr3의 값 출력 코드 작성 --%>
<p>java code : <%= pageContext.getAttribute("pageAttr3") %></p>
<p>el : ${pageAttr3 }</p>
<p>java code : <%= pageContext.getAttribute("pageAttr4") %></p>
<p>el : ${pageAttr4 }</p>
맨 위의 자바코드에서 pageAttr1,2,3 에 각각 값들을 넣었다
java code : <%= pageContext.getAttribute("pageAttr1") %>
el : ${pageAttr1 }
→ 아마 java code 로 저렇게, el 로는 저렇게 작성한다고 보면 될 듯. 둘 다 같은 거.
1, 2, 3, 4 다 똑같음
아 그리고 맨 위에서 자바코드로 pageContext.setAttribute 로 값 넣었던거 잊지말깅 그러니까 반환했지
근데 4 는 값을 안넣었기 때문에 null 반환
04el-request
el 없는 값이면 아무것도 출력되지 않는다
* boolean 형 true, false 와 String 형 true, false 는 html 출력값이 같아서 코드 보고 판단해야 함
<%
request.setAttribute("reqAttr1", "reqVal1");
request.setAttribute("reqAttr2", 900000000);
request.setAttribute("reqAttr3", false);
%>
<p>java code : <%= request.getAttribute("reqAttr1") %></p>
<p>el : ${reqAttr1 }</p>
<p>java code : <%= request.getAttribute("reqAttr2") %></p>
<p>el : ${reqAttr2 }</p>
<p>java code : <%= request.getAttribute("reqAttr3") %></p>
<p>el : ${reqAttr3 }</p>
<p>java code : <%= request.getAttribute("reqAttr4") %></p>
<p>el : ${reqAttr4 }</p>
request.setAttribute 로 reqAttr 1, 2, 3 에 값 저장
위에 03 이랑 다른 건 getAttribute 에서 pageContext 가 아닌 request 라는 것
하지만 어차피 el 로는 동일
05forward-from, to
from
<%
request.setAttribute("reqAttr1", 3.1415);
%>
<jsp:forward page="05forward-to.jsp"></jsp:forward>
request.setAttribute 로 reqAttr1 에 3.1415 넣기
forward - to 파일로 보냄. 포워드는 html 코드는 다 지우지만 자바코드는 실행함
to
<p>reqAttr1 : ${reqAttr1 }</p>
${reqAttr1 } 반환했음 (아까 포워딩 되기 전에 파일에서 저장한 값)
06from, to
from
<%--
request 영역에 적절한 attributes 를 추가
--%>
<%
request.setAttribute("name", "donald");
request.setAttribute("age", 30);
request.setAttribute("height", 190.5);
request.setAttribute("width", 300.3333);
%>
<jsp:forward page="06to.jsp"></jsp:forward>
request.setAttribute 로 값 다 넣고 to 파일로 포워딩
to
<p>name : ${name }</p> <%-- donald --%>
<p>age : ${age }</p> <%-- 30 --%>
<p>height : ${height }</p> <%-- 190.5 --%>
<p>width : ${width }</p> <%-- 300.3333 --%>
el 로 값 다 반환함
음... 주목할만한 건 <p> 태그 안에서 작성되었다는 것?
07session
이번에는 session.setAttribute 로 넣고, session.getAttribute 로 반환하는데
이것 역시 el 로 반환해도 같다
08redirect-from, to
from
session.setAttribute 로 값 다 넣고 갑자기 리디렉트, to 파일로
to
갑자기 냅다 반환함 el 로
- 어 전에 배웠듯이, request 로 전달 안됨. 따라서 1)쿼리스트링 2)session 으로 전달해야 함
09
08이랑 동일
10application
application 으로 넣고 반환하기
걍 똑같음
11application
10 에서 전달한 값 여기서 그냥 받음 왜냐면 application 이니까 ㅇㅇ
- application 은 모든 jsp, servlet 이 공유해서 사용하는 객체이므로 !
12scope
el 꺼낼 때 어떤 영역에서 꺼내는 지 모름
만약 중복된 이름이 있다면 값을 넣었을 때 어떤 순서대로 찾는지??
같은 이름으로 다른 영역에 attribute 가 있다면
pageContext > request > session > application 순으로!!
<%
pageContext.setAttribute("attr01", "pageVal01");
request.setAttribute("attr01", "reqVal01");
session.setAttribute("attr01", "sesVal01");
application.setAttribute("attr01", "appVal01");
request.setAttribute("attr02", "reqVal02");
session.setAttribute("attr02", "sesVal02");
application.setAttribute("attr02", "appVal02");
session.setAttribute("attr03", "sesVal03");
application.setAttribute("attr03", "appVal03");
application.setAttribute("attr04", "appVal04");
%>
<p>attr01 : ${attr01 }</p>
<p>attr02 : ${attr02 }</p>
<p>attr03 : ${attr03 }</p>
<p>attr04 : ${attr04 }</p>
<p>attr05 : ${attr05 }</p>
pageContext, request, session, application 모두 1 저장
request, session, application 에 2 저장
session, application 에 3 저장
application 4 저장
후, el 로 1, 2, 3, 4, 5 반환
1에서는 (모두 다 저장한 건) pageContext 반환
2에서는 request 반환
3에서는 session 반환
4에서는 application 반환
13javaBean
<%
Bean03 obj1 = new Bean03();
obj1.setAge(30);
obj1.setName("donald");
obj1.setKid(false);
pageContext.setAttribute("attr1", obj1);
%>
<hr>
<p>java code : <%= pageContext.getAttribute("attr1") %></p>
<p>el : ${attr1 }</p>
<hr>
<%
Bean03 var1 = (Bean03) pageContext.getAttribute("attr1");
%>
<p>java code : <%= var1.getName() %></p>
<p>el : ${attr1.name }</p>
<p>java code : <%= var1.getAge() %></p>
<p>el : ${attr1.age }</p>
<p>java code : <%= var1.isKid() %></p>
<p>el : ${attr1.kid }</p>
Bean03 객체생성, obj1
obj1 에 age, name, kid 에 값 저장, attr1 에 obj1 저장
java code, el 로 attr1 값 반환 (obj1)
Bean03 객체생성, var1 , 근데 attr1?
java code, el 로 값 반환,
Bean03 은 아까 작성한 자바파일, 객체생성을 했으니까 변수명.메소드명 을 쓸 수 있지!
그래서 자바파일에 작성한 대로 set 하면 저장하고 get 하면 반환하네!
14forward-from,to
from
<%
Bean03 obj1 = new Bean03();
obj1.setName("korea");
obj1.setAge(30000);
obj1.setKid(false);
request.setAttribute("bean1", obj1);
%>
<jsp:forward page="14forward-to.jsp"></jsp:forward>
Bean03 객체 obj1 선언
Name, Age, Kid 값 저장
bean1 에 obj1 저장
포워딩 to 파일로
to
<%
Bean03 o = (Bean03) request.getAttribute("bean1");
%>
<p>name : <%= o.getName() %></p>
<p>age : <%= o.getAge() %></p>
<p>kid : <%= o.isKid() %></p>
값들을 모두 반환
근데 그 전에 객체생성 함
객체변수명.메소드명()
15forward-from, to
from
<%
Bean03 obj1 = new Bean03();
obj1.setName("korea");
obj1.setAge(30000);
obj1.setKid(false);
request.setAttribute("bean1", obj1);
%>
<jsp:forward page="15forward-to-el.jsp"></jsp:forward>
bean03 객체생성
포워딩
to
<p>name : ${bean1.name }</p>
<p>age : ${bean1.age }</p>
<p>kid : ${bean1.kid }</p>
또 ...
똑같지 뭐
16from, to
from
<%
Bean04 b2 = new Bean04();
b2.setAge(99999);
b2.setNickName("captain");
b2.setVip(true);
session.setAttribute("bean2", b2);
response.sendRedirect("16to.jsp");
%>
bean04 객체생성, b2
set 메소드로 값 저장
session.setAttribute 로 bean2 에 b2 (아까 생성한 객체 변수) 저장
그리고 to 파일로 리디렉션
to
p>nickName : ${bean2.nickName }</p>
<p>age : ${bean2.age }</p>
<p>vip : ${bean2.vip }</p>
그냥 이번에도 반환함
${attribute명.property명 }
17map
<%
Map<String, String> map = new HashMap<>();
map.put("lang", "java");
map.put("pre", "html");
map.put("pattern", "mvc");
// 2개의 key,value 쌍(entry) 넣고
map.put("city", "seoul");
map.put("food", "cake");
pageContext.setAttribute("bean1", map);
%>
<hr>
<p>map : ${bean1 }</p>
<p>lang : ${bean1.lang }</p>
<p>pre : ${bean1.pre }</p>
<p>pattern : ${bean1.pattern }</p>
<%-- 위에 추가한 value를 출력 -el 사용 --%>
<p>city: ${bean1.city }</p>
<p>food: ${bean1.food }</p>
HashMap, map 에 값 (key, value) 저장
pageContext.setAttribute 로 bean1 에 map 저장
각 값을 el 로 반환 - bean1.key
bean1 의 반환값은 key=value 쌍으로 모두 반환됨
18map
map 의 key 는 대소문자 규칙 없음
property 명이 변수명
el 의 점 연산자로 숫자 사용 불가하기 때문에 점 연산자 대신 쓸 수 있는 연산자 [] 가 있다
만약 key 가 숫자라면 [] 안에 String 으로 작성 (쌍따옴표!! "")
ex. ${bean1.1 } 말고 ${bean1["1"] } 이렇게 작성
ex2. ${bean1.nick name } 말고 ${bean1["nick name"] } 이렇게 작성
<%
Map<String, String> map = new HashMap<>();
map.put("name", "donald");
map.put("Name", "trump");
map.put("1", "java");
map.put("nick name", "coffee");
pageContext.setAttribute("bean1", map);
%>
<p>name : ${bean1.name }</p>
<p>name : ${bean1["name"] }</p>
<p>name : ${bean1[name] }</p>
<p>Name : ${bean1.Name }</p>
<p>Name : ${bean1["Name"] }</p>
<%-- <p>1 : ${bean1.1 }</p> --%>
<p>1 : ${bean1["1"] }</p>
<%-- <p>nick name : ${bean.nick name }</p> --%>
<p>nick name : ${bean1["nick name"] }</p>
<hr>
<%
Bean03 obj1 = new Bean03();
obj1.setName("computer");
pageContext.setAttribute("bean2", obj1);
%>
<p>name : ${bean2.name }</p>
<p>name : ${bean2["name"] }</p>
HashMap 으로 map 안에 key=value 쌍으로 값을 여러개 저장
el 로 반환하는데 , 이번에는 숫자 key, 띄어쓰기 포함된 key 가 포함
마지막에 Bean03 객체생성
19from,to
from
<%
Map<String, String> data = new HashMap<>();
data.put("name", "computer");
data.put("city", "ny");
data.put("1000", "son");
data.put("this day", "11월 4일");
request.setAttribute("data1", data);
%>
<jsp:forward page="19to.jsp" />
HashMap 으로 data 안에 key=value 저장
request.setAttribute 로 data1 안에 data 저장
to 파일로 포워딩
to
<p>name : ${data1.name }</p>
<p>city : ${data1.city }</p>
<p>1000 : ${data1["1000"] }</p>
<p>this day : ${data1["this day"] }</p>
값 반환
20map-bean
map 과 bean 합쳐서
${attribute명.(map의)key명.(bean의)property명 }
<%
Map<String, Bean03> map = new HashMap<>();
Bean03 val1 = new Bean03();
val1.setName("donald");
val1.setAge(3000);
Bean03 val2 = new Bean03();
val2.setName("trump");
val2.setAge(999);
Bean03 val3 = new Bean03();
val3.setName("john");
val3.setAge(22);
map.put("person1", val1);
map.put("person2", val2);
map.put("new person", val3);
pageContext.setAttribute("persons", map);
%>
<p>1번 이름 : ${persons.person1.name }</p>
<p>1번 나이 : ${persons.person1.age }</p>
<p>2번 이름 : ${persons.person2.name }</p>
<p>2번 나이 : ${persons.person2.age }</p>
<p>new person 이름 : ${persons["new person"].name }</p>
<p>new person 이름 : ${persons["new person"]["name"] }</p>
<p>new person 나이 : ${persons["new person"].age }</p>
<p>new person 나이 : ${persons["new person"]["age"] }</p>
또 hashmap - https://tokkicode.tistory.com/26?category=987176
day19 - API(2) generic, collection
> java.util 패키지 > 제네릭 generic 클래스나 인터페이스 선언에 유형 매개변수가 들어있는 클래스 제네릭 타입은 클래스/인터페이스 이름 뒤 "<매개변수>" 위치 클래스에 원치않는 datatype이 들어가
tokkicode.tistory.com
(근데 <String, Bean03> 은 무슨 의미지 왜 쓰지? - key 값이 String, value 값이 Bean03 이라는...)
반환할 값이 person(Attribute).property 여야하는데, 받은값이 map 이다.
map 은 key 값을 써줘야 value 를 얻을 수 있다
여기에서 value 는 java bean 인데, 이 java bean 은 property 써야 값을 얻을 수 있음
결론: key, property → java bean (value) ??
'course 2021 > JSP' 카테고리의 다른 글
JSP14 - 11el(3) (0) | 2021.11.21 |
---|---|
JSP13 - 11el(2) (0) | 2021.11.20 |
JSP11 - 10scope (0) | 2021.11.19 |
JSP10 - 09cookie (0) | 2021.11.19 |
JSP09 - 08session (0) | 2021.11.18 |