Programming/국비학원

221007 - EL - empty 연산자, 내장객체, 스코프 우선순위

지고르 2022. 10. 9. 23:25
  • 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>

 

//
주소 : 서울시 종로구