기존 JSP 스크립트 언어에서 조금 더 발전하여, 표현언어라는 새로운 기능이 추가되었다.

또한, 표현언어에도 개발자가 사용하기 편한 "내장객체"가 정의되어있어서 조금 더 간편하게 데이터를 조작할 수 있다.

 

표현언어 기본 형식 : ${표현식 또는 값}

 

표현식을 이용해 파라미터 출력하기

 

<%@page import="java.util.List"%>
<%@page import="sec01.ex01.MemberDAO"%>
<%@page import="sec01.ex01.MemberBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<%
	request.setCharacterEncoding("UTF-8");
%>   

<%
	String id = request.getParameter("id");
	String pwd = request.getParameter("pwd");
	String name = request.getParameter("name");
	String email = request.getParameter("email");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록</title>
</head>
<body>
  <table align="center"  width="100%">
	 <tr align="center" bgcolor="#99ccff">
	      <td width="7%" >아이디</td>
	      <td width="7%">비밀번호</td>
	      <td width="5%" >이름</td>
	      <td width="11%" >이메일</td>
	   </tr>

	   <tr align="center">
	       <td><%=id%></td>
	       <td><%=pwd%></td>
	       <td><%=name%></td>
	       <td><%=email%></td>
	   </tr>
	   
	   <!--  
	   	 표현식 param 내장객체를 통해 넘어오는 파라미터를 바로 바인딩 할 수 있음.
	    -->
	   <tr align="center">
	       <td>${param.id}</td>
	       <td>${param.pwd}</td>
	       <td>${param.name}</td>
	       <td>${param.email}</td>
	   </tr>	   

	   <tr height="1" bgcolor="#99ccff">
	      <td colspan="5"></td>
	   </tr>
	</table>	
</body>
</html>
  • 표현언어를 사용하기 위해서는 반드시, 페이지 디렉티브에 isELIgnored="false" 을 선언해야 한다.
  • JSP스크립트만 이용하면 웹 파라미터를 받아와서 출력해야 하지만, 표현언어를 사용하면 param객체를 통해 자동으로 바인딩 되므로, 바로 출력할 수 있다.

 

form 파라미터 전송

 

화면에서는 같은 값이 출력되지만, 실제로는 표현식이 더 간편하다.

 

 

requestScope

내장객체를 통해, 리퀘스트 영역의 데이터를 바로 접근할 수 있다.

 

memberForm.html

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>회원 가입창</title>
<body>
<form method="post"  action="forward.jsp">
<h1  style="text-align:center">회원 가입창</h1>
<table  align="center">
      <tr>
         <td width="200"><p align="right">아이디</td>
         <td width="400"><input type="text" name="id"></td>
      </tr>
      <tr>
          <td width="200"><p align="right">비밀번호</td>
          <td width="400"><input type="password"  name="pwd"></td>
      </tr>
      <tr>
          <td width="200"><p align="right">이름</td>
          <td width="400"><p><input type="text"  name="name"></td>
      </tr>
      <tr>
          <td width="200"><p align="right">이메일</td>
          <td width="400"><p><input type="text"  name="email"></td>
      </tr>
      <tr>
          <td width="200"><p>&nbsp;</p></td>
          <td width="400">
			<input type="submit" value="가입하기">
			<input type="reset" value="다시입력">
		  </td>
      </tr>
</table>
</form>
</body>
</html>
  • 파라미터들을 forward.jsp 로 전송한다.

 

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>
  • forward 에서는 request 객체의 데이터를 추가해서 다시 member2.jsp 로 포워딩한다.

 

member2.jsp

<%@page import="java.util.List"%>
<%@page import="sec01.ex01.MemberDAO"%>
<%@page import="sec01.ex01.MemberBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<%
	request.setCharacterEncoding("UTF-8");
%>   

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록</title>
</head>
<body>
  <table align="center"  width="100%">
	 <tr align="center" bgcolor="#99ccff">
	      <td width="7%" >아이디</td>
	      <td width="7%">비밀번호</td>
	      <td width="5%" >이름</td>
	      <td width="11%" >이메일</td>
	      <td width="11%" >주소</td>
	   </tr>

		<!--
	   	 표현식 param 내장객체를 통해 넘어오는 파라미터를 바로 바인딩 할 수 있음.
	    -->
	   <tr align="center">
	       <td>${param.id}</td>
	       <td>${param.pwd}</td>
	       <td>${param.name}</td>
	       <td>${param.email}</td>
	       <td>${requestScope.address}</td>
	   </tr>	   

	   <tr height="1" bgcolor="#99ccff">
	      <td colspan="5"></td>
	   </tr>
	</table>	
</body>
</html>
  • 기존파라미터는 표현식을 통해 바인딩해서 출력하였고, 주소부분은 requestScope를 통해 리퀘스트영역에 바인딩 된 addresss 객체에 접근하여 출력하였다.

 

주소부분이 추가됨.

 

 

표현언어에서 객체 접근

표현언어를 통해서도 객체(빈)에 조금 더 수월하게 접근할 수 있다.

 

<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<%
	request.setCharacterEncoding("UTF-8");
%>   

<jsp:useBean id="m" class="sec01.ex01.MemberBean" />
<jsp:setProperty name="m" property="*" /> <!--  setProperty로 파라미터들을 담아옴 -->

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록</title>
</head>
<body>
  <table align="center"  width="100%">
	 <tr align="center" bgcolor="#99ccff">
	      <td width="7%" >아이디</td>
	      <td width="7%">비밀번호</td>
	      <td width="5%" >이름</td>
	      <td width="11%" >이메일</td>
	   </tr>


	   <tr align="center">
	       <td><%=m.getId()%></td>
	       <td><%=m.getPwd() %></td>
	       <td><%=m.getName() %></td>
	       <td><%=m.getEmail() %></td>
	   </tr>	   

		<!--
	   	 표현식 param 내장객체를 통해 넘어오는 파라미터를 바로 바인딩 할 수 있음.
	    -->
	   <tr align="center">
	       <td>${m.id}</td>
	       <td>${m.pwd}</td>
	       <td>${m.name}</td>
	       <td>${m.email}</td>
	   </tr>	   

	   <tr height="1" bgcolor="#99ccff">
	      <td colspan="5"></td>
	   </tr>
	</table>	
</body>
</html>
  • jsp:useBean 을 사용하여, 객체 생성 후 setProperty로 데이터를 바인딩한다.
  • JSP 스크립트에서는 객체의 getter / setter 메서드를 통해 값을 출력하지만, 표현언어를 사용하면 조금 더 간편하게 데이터를 출력할 수 있다.

 

 

컬렉션 객체 접근

동일한 방법으로 표현언어에서 컬렉션 객체에 접근 방법을 알아보자.

 

ArrayList

 

member4.jsp

<%@page import="sec01.ex01.MemberBean"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<%
	request.setCharacterEncoding("UTF-8");
%>   

<jsp:useBean id="m1" class="sec01.ex01.MemberBean" />
<jsp:setProperty name="m1" property="*" /> <!--  setProperty로 파라미터들을 담아옴 -->
<jsp:useBean id="memberList" class="java.util.ArrayList" />

<%
	MemberBean m2 = new MemberBean("son", "1234", "손흥민", "son@test.com");
	memberList.add(m1);
	memberList.add(m2);
%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록</title>
</head>
<body>
  <table align="center"  width="100%">
	 <tr align="center" bgcolor="#99ccff">
	      <td width="7%" >아이디</td>
	      <td width="7%">비밀번호</td>
	      <td width="5%" >이름</td>
	      <td width="11%" >이메일</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>	   

		<!--
	   	 표현식 param 내장객체를 통해 넘어오는 파라미터를 바로 바인딩 할 수 있음.
	    -->
	   <tr align="center">
	       <td>${memberList[1].id}</td>
	       <td>${memberList[1].pwd}</td>
	       <td>${memberList[1].name}</td>
	       <td>${memberList[1].email}</td>
	   </tr>	   

	   <tr height="1" bgcolor="#99ccff">
	      <td colspan="5"></td>
	   </tr>
	</table>	
</body>
</html>
  • 컬렉션 프레임워크의 "ArrayList" 는 객체를 배열하는 배열이기 때문에, 인덱스로 접근한다.
  • 보통의 사용법과 다르지 않다.
  • getter 메서드를 통해 값을 출력하지 않아도 되므로, 편리하다.

 

 

HashMap

 

<%@page import="sec01.ex01.MemberBean"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<%
	request.setCharacterEncoding("UTF-8");
%>   

<jsp:useBean id="m1" class="sec01.ex01.MemberBean" />
<jsp:setProperty name="m1" property="*" /> <!--  setProperty로 파라미터들을 담아옴 -->

<jsp:useBean id="membersList" class="java.util.ArrayList" />
<jsp:useBean id="membersMap" class="java.util.HashMap" />

<%
	membersMap.put("id", "park2");
	membersMap.put("pwd", "4321");
	membersMap.put("name", "박지성");
	membersMap.put("email", "park2@test.com");


	MemberBean m2 = new MemberBean("son", "1234", "손흥민", "son@test.com");
	membersList.add(m1);
	membersList.add(m2);	
	membersMap.put("membersList", membersList);
	
%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록</title>
</head>
<body>
  <table align="center"  width="100%">
	 <tr align="center" bgcolor="#99ccff">
	      <td width="7%" >아이디</td>
	      <td width="7%">비밀번호</td>
	      <td width="5%" >이름</td>
	      <td width="11%" >이메일</td>
	   </tr>


	   <tr align="center">
	       <td>${membersMap.id}</td>
	       <td>${membersMap.pwd}</td>
	       <td>${membersMap.name}</td>
	       <td>${membersMap.email}</td>
	   </tr>	   

	   <tr align="center">
	       <td>${membersMap.membersList[0].id}</td>
	       <td>${membersMap.membersList[0].pwd}</td>
	       <td>${membersMap.membersList[0].name}</td>
	       <td>${membersMap.membersList[0].email}</td>
	   </tr>
	   
	   <tr align="center">
	       <td>${membersMap.membersList[1].id}</td>
	       <td>${membersMap.membersList[1].pwd}</td>
	       <td>${membersMap.membersList[1].name}</td>
	       <td>${membersMap.membersList[1].email}</td>
	   </tr>	   	   	   

	   <tr height="1" bgcolor="#99ccff">
	      <td colspan="5"></td>
	   </tr>
	</table>	
</body>
</html>
  • 별 다를게 없다. Map 은 key, value 이므로 key에 접근해서 값을 출력해온다.
  • key 값이 List도 되어있을 경우도 마찬가지이다.

 

has-a 관계 데이터 가져오기.

has-a 관계란 한 객체안에서 다른 객체를 참조하고 있는 경우를 뜻 한다.

 

myMemberBean

private Address addr; // 사용자 객체변수
  • 객체의 프로퍼티에 Address 객체를 가진다.

 

Address

package sec01.ex02;

public class Address {
	private String city;
	private String zipcode;
	
	public Address() {
		
	}

	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;
	}		
}

 

member6.jsp

<%@page import="sec01.ex01.MemberBean"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<%
	request.setCharacterEncoding("UTF-8");
%>   

<jsp:useBean id="m" class="sec01.ex02.MemberBean" />
<jsp:setProperty name="m" property="*" /> <!--  setProperty로 파라미터들을 담아옴 -->

<jsp:useBean id="addr" class="sec01.ex02.Address" />
<jsp:setProperty name="addr" property="city" value="서울" /> <!--  setProperty로 파라미터들을 담아옴 -->
<jsp:setProperty name="addr" property="zipcode" value="076054" /> <!--  setProperty로 파라미터들을 담아옴 -->

<%
	m.setAddr(addr);
%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록</title>
</head>
<body>
  <table align="center"  width="100%">
	 <tr align="center" bgcolor="#99ccff">
	      <td width="7%" >아이디</td>
	      <td width="7%">비밀번호</td>
	      <td width="5%" >이름</td>
	      <td width="11%" >이메일</td>
	      <td width="11%" >도시</td>
	      <td width="11%" >우편번호</td>
	   </tr>

	   <tr align="center">
	       <td>${m.id}</td>
	       <td>${m.pwd}</td>
	       <td>${m.name}</td>
	       <td>${m.email}</td>
	       <td><%=m.getAddr().getCity()%></td>
	       <td><%=m.getAddr().getZipcode()%></td>
	       
	   </tr>	   

	   <tr align="center">
	       <td>${m.id}</td>
	       <td>${m.pwd}</td>
	       <td>${m.name}</td>
	       <td>${m.email}</td>
	       <td>${m.addr.city}</td>
	       <td>${m.addr.zipcode}</td>
	   </tr>
	   
	   <tr height="1" bgcolor="#99ccff">
	      <td colspan="5"></td>
	   </tr>
	</table>	
</body>
</html>
  • has-a 객체에 접근

 

 

 

스코프 우선순위

내장객체의 변수값이 모두 같은 이름일 때, 데이터 접근에 대한 우선순위를 가진다.

이럴경우 가장 가까운 영역의 데이터를 가져온다.

 

forward.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false" %>
    
<%
	request.setCharacterEncoding("UTF-8");
	request.setAttribute("address", "서울시 강남구");
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>포워딩</title>
</head>
<body>
	<jsp:forward page="member4.jsp"></jsp:forward>
</body>
</html>
  • 리퀘스트 객체의 address 데이터 세팅.

 

member4.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<%
	request.setCharacterEncoding("UTF-8");
	session.setAttribute("address", "서울시 동작구");
%>   


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록</title>
</head>
<body>
  <table align="center"  width="100%">
	 <tr align="center" bgcolor="#99ccff">
	      <td width="7%" >주소</td>
	   </tr>


	   <tr align="center">
	       <td>${address}</td>
	   </tr>	   

	   <tr height="1" bgcolor="#99ccff">
	      <td colspan="5"></td>
	   </tr>
	</table>	
</body>
</html>
  • 세션객체의 데이터 address 세팅

 

같은 이름으로 바인딩 되었지만 request 영역이 가장 가깝기에 "강남구" 가 출력된다.

 

내장객체 접근 우선순위는 page request → session → applicationContext 순이다.

 

출처: 자바 웹을 다루는 기술

 

 

블로그 이미지

파니동

,