221007 - EL - empty 연산자, 내장객체, 스코프 우선순위
- empty 연산자
객체 값이 존재하는지 확인
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" import="java.util.*"%>
<jsp:useBean id="memBean" class="jsp03.ex01.MemberBean" scope="page" />
<jsp:setProperty property="name" value="길동" name="memBean" />
<jsp:useBean id="memList" class="java.util.ArrayList" scope="page" /> <%-- 비어있는 ArrayList 객체 생성 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>empty 연산자</title>
</head>
<body>
<h2>
\${empty memBean } : ${empty memBean } <br>
\${not empty memBean } : ${not empty memBean }<br>
\${empty memList } : ${empty memList }<br>
\${not empty memList } : ${not empty memList } <br>
\${empty "hello" } : ${empty "hello" } <br>
\${empty null } : ${ empty null } <br>
\${ empty "" } : ${ empty "" } <br>
</h2>
</body>
</html>
//
${empty memBean } : false
${not empty memBean } : true
${empty memList } : true
${not empty memList } : false
${empty "hello" } : false
${empty null } : true
${ empty "" } : true
https://devinside.tistory.com/71
EL 내장 객체
구 분 | 내 장 객 체 | 설 명 |
Scope | pageScope | page 영역에 존재하는 객체의 참조 |
requestScope | request 영역에 존재하는 객체의 참조 | |
sessionScope | session 영역에 존재하는 객체의 참조 | |
applicationScope | application 영역에 존재하는 객체의 참조 | |
요청 파라미터 | param | 요청 파라미터 값을 단일 값으로 반환 |
paramValues | 요청 파라미터 값을 배열로 반환 | |
헤더 값 | header | 요청 헤더명의 정보를 단일 값으로 반환 |
headerValues | 요청 헤더명의 정보를 배열로 반환 | |
쿠키 값 | Cookies | 쿠키명의 값을 반환 |
JSP 내용 | pageContext | PageContext 객체를 참조할 때 |
초기 파라미터 | initParam | 컨텍스트의 초기화 매개변수명의 값을 반환 |
- param
= request.getParameter()
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
<tr align="center" bgcolor="beige">
<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td>
</tr>
<tr>
<td>${param.id }</td> ////
<td>${param.pwd }</td> ////
<td>${param.name }</td> ////
<td>${param.email }</td> ////
</tr>
</table>
</body>
</html>
- requestScope
- memberForm.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 창</title>
<script type="text/javascript">
function fn_sendMember(){
let frmMember = document.frmMember;
let id = frmMember.id.value;
let pwd = frmMember.pwd.value;
let name = frmMember.name.value;
let email = frmMember.email.value;
if(id.length==0||id==""){
alert('아이디를 입력해주세요');
} else if (pwd.length==0||pwd==""){
alert('비밀번호를 입력해주세요');
} else if (name.length==0||name==""){
alert('이름을 입력해주세요');
} else if (email.length==0||email==""){
alert('이메일을 입력해주세요');
} else {
frmMember.method="post";
frmMember.action="forward.jsp"; ////
frmMember.submit();
}
}
</script>
</head>
<body>
<form name=frmMember>
<h2>회원가입 창</h2>
<table>
<tr>
<td>아이디</td>
<td><input type="text" name="id"></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="pwd"></td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>이메일</td>
<td><input type="text" name="email"></td>
</tr>
</table>
<input type="button" value="가입하기" onclick="fn_sendMember()">
<input type="reset" value="다시 입력">
<input type="hidden" name="command" value="addMember">
</form>
</body>
</html>
- forward.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
request.setAttribute("address", "서울시 종로구");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>포워딩 실습</title>
</head>
<body>
<jsp:forward page="member2.jsp"></jsp:forward>
</body>
</html>
- member2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
<tr align="center" bgcolor="beige">
<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td><td>주소</td>
</tr>
<tr>
<td>${param.id }</td>
<td>${param.pwd }</td>
<td>${param.name }</td>
<td>${param.email }</td>
<td>${requestScope.address }</td> ////
</tr>
</table>
</body>
</html>
=> 포워딩 시 같은 요청 객체를 그대로 전달하므로 ${param.id} 사용 가능
- pageContext
${pageContext.request.contextPath} : 프로젝트의 상대 경로 가져옴
- login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="result.jsp">
아이디 <input type="text" name="id"><br>
비밀번호 <input type="password" name="pw"><br>
<input type="submit" value="로그인">
<input type="reset" value="다시 입력"><br>
<a href="${pageContext.request.contextPath }/memberForm.html">회원가입</a>
<!-- 프로젝트 경로 가져옴 -->
</form>
</body>
</html>
객체 접근
getter 없이 속성값 가져올 수 있음
${빈이름.속성이름}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="mem" class="jsp03.ex01.MemberBean" scope="page"></jsp:useBean>
<jsp:setProperty property="*" name="mem"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
<tr align="center" bgcolor="beige">
<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td>
</tr>
<tr>
<td><%=mem.getId() %></td>
<td>${mem.pwd}</td> ////
<td>${mem.name }</td> ////
<td><jsp:getProperty property="email" name="mem"/></td>
</tr>
</table>
</body>
</html>
- Collection 객체 접근
ArrayList : ${객체명[index].속성명}
HashMap : ${객체명.key명}
- ArrayList
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
import="java.util.*, jsp03.ex01.*"
%>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="mem1" class="jsp03.ex01.MemberBean" scope="page"></jsp:useBean>
<jsp:setProperty property="*" name="mem1"/>
<jsp:useBean id="memList" class="java.util.ArrayList"></jsp:useBean> //List memList = new ArrayList()
<%
MemberBean mem2 = new MemberBean("lee","2222","이강인","lee@gmail.com");
memList.add(mem1);
memList.add(mem2);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
<tr align="center" bgcolor="beige">
<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td>
</tr>
<tr>
<td>${memList[0].id}</td>
<td>${memList[0].pwd}</td>
<td>${memList[0].name }</td>
<td>${memList[0].email}</td>
</tr>
<tr>
<td>${memList[1].id}</td>
<td>${memList[1].pwd}</td>
<td>${memList[1].name }</td>
<td>${memList[1].email}</td>
</tr>
</table>
</body>
</html>
//
아이디 비밀번호 이름 이메일
ㅇ d ㅇ ㅇ
lee 2222 이강인 lee@gmail.com
- HashMap
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
import="java.util.*, jsp03.ex01.*"
%>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="mem1" class="jsp03.ex01.MemberBean" scope="page"></jsp:useBean>
<jsp:setProperty property="*" name="mem1"/>
<jsp:useBean id="memList" class="java.util.ArrayList"></jsp:useBean> <%-- List memList = new ArrayList() --%>
<jsp:useBean id="memMap" class="java.util.HashMap"></jsp:useBean> ////
<%
MemberBean mem2 = new MemberBean("lee","2222","이강인","lee@gmail.com");
memList.add(mem1);
memList.add(mem2);
memMap.put("id","cha");
memMap.put("pwd","3333");
memMap.put("name","차범근");
memMap.put("email","cha@naver.com");
memMap.put("memberList",memList); ////
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
<tr align="center" bgcolor="beige">
<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td>
</tr>
<tr>
<td>${memMap.id}</td>
<td>${memMap.pwd}</td>
<td>${memMap.name }</td>
<td>${memMap.email}</td>
</tr>
<tr>
<td>${memMap.memberList[0].id}</td> ////
<td>${memMap.memberList[0].pwd}</td>
<td>${memMap.memberList[0].name }</td>
<td>${memMap.memberList[0].email}</td>
</tr>
<tr>
<td>${memMap.memberList[1].id}</td> ////
<td>${memMap.memberList[1].pwd}</td>
<td>${memMap.memberList[1].name }</td>
<td>${memMap.memberList[1].email}</td>
</tr>
</table>
</body>
</html>
//
아이디 비밀번호 이름 이메일
cha 3333 차범근 cha@naver.com
d d d d
lee 2222 이강인 lee@gmail.com
- has-a 관계 빈의 자식빈 속성에 접근
has-a 관계 : 객체가 다른 객체를 속성으로 가짐
${부모빈명.자식빈명.속성명}
- Address.java
public class Address {
private String city;
private String zipcode;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
- MemberBean.java
public class MemberBean {
private String id;
private String pwd;
private String name;
private String email;
private Date joinDate;
private Address addr; ////
public Address getAddr() {
return addr;
}
public void setAddr(Address addr) {
this.addr = addr;
}
public MemberBean() {
}
public MemberBean(String id, String pwd, String name, String email) {
this.id = id;
this.pwd = pwd;
this.name = name;
this.email = email;
}
public Date getJoinDate() {
return joinDate;
}
public void setJoinDate(Date joinDate) {
this.joinDate = joinDate;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
- memeber6.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
%>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="mem1" class="jsp03.ex01.MemberBean" scope="page"></jsp:useBean>
<jsp:setProperty property="*" name="mem1"/>
<jsp:useBean id="addr" class="jsp03.ex01.Address"></jsp:useBean> ////
<jsp:setProperty property="city" name="addr" value="서울" /> ////
<jsp:setProperty property="zipcode" name="addr" value="01234" /> ///
<%
mem1.setAddr(addr); ////
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
<tr align="center" bgcolor="beige">
<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td><td>도시</td><td>우편번호</td>
</tr>
<tr align="center">
<td>${mem1.id}</td>
<td>${mem1.pwd}</td>
<td>${mem1.name}</td>
<td>${mem1.email}</td>
<td><%=mem1.getAddr().getCity() %></td> //
<td><%=mem1.getAddr().getZipcode() %></td> //
</tr>
<tr align="center">
<td>${mem1.id}</td>
<td>${mem1.pwd}</td>
<td>${mem1.name}</td>
<td>${mem1.email}</td>
<td>${mem1.addr.city}</td> ////
<td>${mem1.addr.zipcode}</td> ////
</tr>
</table>
</body>
</html>
객체 포워딩
- 일반적 EL 포워딩
- forward2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
request.setAttribute("id","son");
request.setAttribute("pwd","1234");
session.setAttribute("name","손흥민");
application.setAttribute("email","son@gmail.com");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>일반적인 포워딩</title>
</head>
<body>
<jsp:forward page="member8.jsp" />
</body>
</html>
- member8.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
%>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원정보 출력창</title>
</head>
<body>
<table border="1" align="center">
<tr align="center" bgcolor="beige">
<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td>
</tr>
<tr align="center">
<td>${id }</td><td>${pwd }</td><td>${name }</td><td>${email }</td> ////
</tr>
</table>
</body>
</html>
- 멤버빈 객체 활용한 포워딩
- forward3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="jsp03.ex01.*"%>
<%
request.setCharacterEncoding("utf-8");
MemberBean member = new MemberBean("lee", "3333", "이영표","lee@naver.com"); ////
request.setAttribute("member", member); ////
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>멤버빈 객체 활용한 포워딩</title>
</head>
<body>
<jsp:forward page="member9.jsp" />
</body>
</html>
- member9.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
%>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원정보 출력창</title>
</head>
<body>
<table border="1" align="center">
<tr align="center" bgcolor="beige">
<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td>
</tr>
<tr align="center">
<td>${member.id}</td><td>${member.pwd }</td> ////
<td>${member.name }</td><td>${member.email }</td> ////
</tr>
</table>
</body>
</html>
- Collection 객체 포워딩
setAttribute => 포워딩 시 따로 getter 없이 바로 표현언어로 값 가져올 수 있음
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="jsp03.ex01.*, java.util.*"%>
<%
request.setCharacterEncoding("utf-8");
List memberList = new ArrayList();
MemberBean member1 = new MemberBean("lee", "3333", "이영표","lee@naver.com"); ////
MemberBean member2 = new MemberBean("park", "1111", "박지성","park@naver.com"); ////
memberList.add(member1);
memberList.add(member2);
request.setAttribute("memberList", memberList); ////
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>멤버빈 객체 활용한 포워딩</title>
</head>
<body>
<jsp:forward page="member10.jsp" />
</body>
</html>
- member10.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
%>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원정보 출력창</title>
</head>
<body>
<table border="1" align="center">
<tr align="center" bgcolor="beige">
<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td>
</tr>
<tr align="center">
<td>${memberList[0].id}</td><td>${memberList[0].pwd }</td><td>${memberList[0].name }</td><td>${memberList[0].email }</td>
</tr>
<tr align="center">
<td>${memberList[1].id}</td><td>${memberList[1].pwd }</td><td>${memberList[1].name }</td><td>${memberList[1].email }</td>
</tr>
</table>
</body>
</html>
=> Collection 객체 출력 위해 for문 사용시 스크립트릿과 혼용해야 함 -> 코드 복잡해짐
=> JSTL이 해결
스코프 우선순위
request > session > application
- forward5.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="jsp03.ex01.*, java.util.*"%>
<%
request.setCharacterEncoding("utf-8");
request.setAttribute("id","son");
request.setAttribute("pwd","1234");
session.setAttribute("name","손흥민");
application.setAttribute("email","son@gmail.com");
request.setAttribute("address", "서울시 종로구"); ////
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>멤버빈 객체 활용한 포워딩</title>
</head>
<body>
<jsp:forward page="member11.jsp" />
</body>
</html>
- member11.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
%>
<%
request.setCharacterEncoding("utf-8");
session.setAttribute("address", "서울시 영등포구"); ////
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원정보 출력창</title>
</head>
<body>
<table border="1" align="center">
<tr align="center" bgcolor="beige">
<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td><td>주소</td>
</tr>
<tr align="center">
<td>${id }</td><td>${pwd }</td><td>${name }</td><td>${email }</td><td>${address }</td>
</tr>
</table>
</body>
</html>
//
주소 : 서울시 종로구