[JSP] EL 표현 언어

sang·2024년 3월 21일

EL

$ { 표현식 || 값 }

Expression Language
표현 언어

사용 시 isELIgnored = false 설정 필요
표현식보다 편리한 출력
변수, 다양한 연산자 포함 가능
JSP 내장 객체 속성, 자바 빈 속성 출력 가능
자체 내장 객체 제공

자료형

bool, 정수, 실수, 문자열, null

연산자

+, =, *, div(/), mod(%)
eq(==), ne(!=), lt(<), le(<=), gt(>), ge(>=), and(&&), or(||), not(!)
empty, 삼항연산자

연산

숫자형문자열 + 숫자 = 숫자
null + 숫자 = 숫자
문자열 + 문자열: ERROR


pro14/WebContent/elTest.jsp
기본 연산자

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
    isELIgnored="false" %> <%-- 표현언어 활성화 --%>
<html>
<head>
  <meta charset="UTF-8">
  <title>표현 언어에서 사용되는 데이터들</title>
</head>
<body>
  <h1>표현 언어로 여러 가지 데이터 출력하기</h1>
  <h1>
    \${100}: ${100}<br>
    \${"안녕하세요"}: ${"안녕하세요"}<br>
    \${10+1}: ${10+1}<br>
    \${"10"+1} : ${"10"+1 }<br> <!-- 11 -->
    \${null+10 }: ${null+10 }<br> <!-- 10 -->
    <%-- \${"안녕"+11 }: ${"안녕"+11 }<br> --%> <!-- error -->
    <%-- \${"hello"+"world"}:${"hello"+"world"}<br> --%> <!-- error -->
  </h1>
</body>
</html>

pro14/WebContent/elTest.jsp
empty 연산자

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

<jsp:useBean id="m1" class="sec01.ex01.MemberBean" scope="page" />
<jsp:setProperty name="m1" property="name" value="이순신"/><%-- m1값 설정 --%>

<jsp:useBean id="m2" class="java.util.ArrayList" scope="page" />
<%-- m2값 미설정 --%>

<html>
<head>
  <meta charset="UTF-8">
  <title>표현 언어의 여러 가지 연산자들</title>
</head>
<body>
  empty 연산자
  <h2>
    \${empty m1 } : ${empty m1 } <br>
    \${not empty m1 } : ${not empty m1 } <br><br> <!-- false -->

    \${empty m2 } : ${empty m2 } <br>
    \${not empty m2} : ${not empty m2 } <br><br> <!-- true -->

    \${empty "hello"} : ${empty "hello"}<br> <!-- false -->
    \${empty null} : ${empty null} <br> <!-- true -->
    \${empty ""} : ${empty ""} <br> <!-- true -->
  </h2>
  </body>
</html>

EL 내장 객체

표현 언어에서 사용가능한 내장 객체
JSP 기본 제공 내장 객체는 표현식에서만 사용 가능

pageScope
requestScope
sessionScope
applicationScope

param: 단일 요청 매개변수 처리
paramValues: 복수 요청 매개변수 처리
getParameter() 사용없이 param 내장객체만으로 출력 가능

header: 요청 헤더 이름 정보 반환
headerValues: 요청 헤더 이름 정보 배열 반환

Cookies: 쿠키 이름 값 반환
pageContext
initParam

EL scope 우선 순위

page > request > session > application



EL 활용

EL param

pro14/WebContent/test01/memberForm.jsp

<%@ page language="java" contentType="text/html; charset = UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>회원 가입창</title>
</head>
<body>
  <form method="post" action="member.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>

pro14/WebContent/test01/member.jsp

<%@ 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");
%>

<html>
<head>
  <meta charset="UTF-8">
  <title>회원 정보 출력창</title>
</head>
<body>
  <table border="1" align="center" >
    <tr align="center" bgcolor="#99ccff">
      <td width="20%"><b>아이디</b></td>
      <td width="20%"><b>비밀번호</b></td>
      <td width="20%" ><b>이름</b></td>
      <td width="20%"><b>이메일</b></td>
    </tr>
    
    <!-- 표현식 -->
    <tr align=center>
      <td><%=id %></td>
      <td><%=pwd%></td>
      <td><%=name %></td>
      <td><%=email %></td>
    </tr>
    
    <!-- 표현 언어 -->
    <tr align=center>
      <td>${param.id }</td>
      <td>${param.pwd }</td>
      <td>${param.name }</td>
      <td>${param.email }</td>
    </tr>
  </table>
</body>
</html>


EL requestScope

pro14/WebContent/test01/memberForm.jsp

<%@ page language="java" contentType="text/html; charset = UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>회원 가입창</title>
</head>
<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>

pro14/WebContent/test01/forward.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>

<%
  request.setCharacterEncoding("utf-8");
  request.setAttribute("address","서울시 강남구"); //주소 바인딩
%>

<html>
<head>
  <meta charset="UTF-8">
  <title>포워드</title>
</head>
<body>
  <jsp:forward page="member.jsp"></jsp:forward> <!-- 포워딩 -->
</body>
</html>

pro14/WebContent/test01/member.jsp

<%@ 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");
%>

<html>
<head>
  <meta charset="UTF-8">
  <title>회원 정보 출력창</title>
</head>
<body>
  <table border="1" align="center" >
    <tr align="center" bgcolor="#99ccff">
      <td width="20%"><b>아이디</b></td>
      <td width="20%"><b>비밀번호</b></td>
      <td width="20%" ><b>이름</b></td>
      <td width="20%"><b>이메일</b></td>
    </tr>
    
    <tr align=center>
      <td>${param.id }</td>
      <td>${param.pwd }</td>
      <td>${param.name }</td>
      <td>${param.email }</td>
      <td>${requestScope.address}</td> <!-- 바인딩된 정보 -->
    </tr>
  </table>
</body>
</html>


El pageContext

pro14/WebContent/test01/login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>로그인창</title>
</head>
<body>
  <form action="result.jsp">
    아이디 : <input type="text" size=20 /><br>
    비밀번호: <input type="password" size=20 /><br>
    <input type="submit" value="로그인" /> <input type="reset" value="다시입력" />
  </form>
<br><br>
<!-- 방법 1 -->
<a href="http://localhost:8090/pro14/test01/memberForm.jsp">sign up</a> <!-- 컨텍스트 이름 직접 입력 -->

<!-- 방법 2 -->
<a href="<%=request.getContextPath() %>/test01/memberForm.jsp">sign up</a> <%-- 표현식 getContextPath 사용 --%>

<!-- 방법 3 -->
<a href="${pageContext.request.contextPath}/test01/memberForm.jsp">sign up</a> <%-- 표현 언어 pageContext 사용 --%>
</body>


EL Bean

${bean 이름: 속성 이름}

pro14/WebContent/test01/member.jsp

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

<%-- bean 생성 및 속성 값 설정 --%>
<jsp:useBean id="m" class="sec01.ex01.MemberBean" />
<jsp:setProperty name="m" property="*" />

<meta charset="UTF-8">
<html>
<head>
  <title>회원 정보 출력창</title>
</head>
<body>
  <table align="center" border="1">
    <tr align="center" bgcolor="#99ccff">
      <td width="20%"><b>아이디</b></td>
      <td width="20%"><b>비밀번호</b></td>
      <td width="20%"><b>이름</b></td>
      <td width="20%"><b>이메일</b></td>
    </tr>
    <!-- bean 속성 접근 및 출력 -->
    <tr align="center">
      <td>${m.id}</td>
      <td>${m.pwd}</td>
      <td>${m.name}</td>
      <td>${m.email}</td>
    </tr>
  </table>
</body>
</html>

Bean get 방식 비교

  <!-- 스크립트 요소: 표현식 -->
  <tr align="center">
    <td><%= bean.getId() %></td>
    <td><%= bean.getPwd() %></td>
    <td><%= bean.getName() %></td>
    <td><%= bean.getEmail() %></td>
    <td><%= bean.getJoinDate() %></td>
  </tr>
  
  
  <!-- 액션 태그: getProperty -->
  <tr align="center">
    <td><jsp:getProperty name="m" property="id" /></td>
    <td><jsp:getProperty name="m" property="pwd" /></td>
    <td><jsp:getProperty name="m" property="name" /></td>
    <td><jsp:getProperty name="m" property="email" /></td>
  </tr>
  
  
  <!-- 표현 언어 -->
  <tr align="center">
    <td>${m.id}</td>
    <td>${m.pwd}</td>
    <td>${m.name}</td>
    <td>${m.email}</td>
  </tr>


EL Collection

${Collection 객체 이름 [index].속성이름 }

표현 언어로 컬렉션 객체 접근

pro14/WebContent/test01/member.jsp

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

<!-- ArrayList -->
<%-- ArrayList 생성 --%>
<jsp:useBean id="membersList" class="java.util.ArrayList" />

<%-- bean1 생성 및 member1 정보 저장 --%>
<jsp:useBean id="m1" class="sec01.ex01.MemberBean" />
<jsp:setProperty name="m1" property="*" />

<%-- bean2 생성 및 member2 정보 저장 --%>
<%  MemberBean m2 = new MemberBean("son", "1234", "손흥민", "son@test.com"); %>

<%-- ArrayList에 bean1, bean2 저장 --%>
<%  membersList.add(m1); membersList.add(m2); %>

<!-- HashMap -->
<%-- HashMap 생성 --%>
<jsp:useBean id="membersMap" class="java.util.HashMap" />

<%-- HashMap에 member3 정보 저장 --%>
<%  membersMap.put("id", "park2");
    membersMap.put("pwd", "4321");
    membersMap.put("name", ",박지성");
    membersMap.put("email", "park2@test.com"); %>
<%-- HashMap에 membersList 저장 --%>
<%  membersMap.put("membersList", membersList); %>

<html>
<head>
  <title>회원 정보 출력창</title>
</head>
<body>
  <table align="center" border="1">
    <tr align="center" bgcolor="#99ccff">
      <td width="20%"><b>아이디</b></td>
      <td width="20%"><b>비밀번호</b></td>
      <td width="20%"><b>이름</b></td>
      <td width="20%"><b>이메일</b></td>
    </tr>
    
    <!-- ArrayList(1) 출력 -->
    <tr align="center">
      <td>${membersList[0].id}</td>
      <td>${membersList[0].pwd}</td>
      <td>${membersList[0].name}</td>
      <td>${membersList[0].email}</td>
    </tr>
    
    <!-- ArrayList(2) 출력 -->
    <tr align="center">
      <td>${membersList[1].id}</td>
      <td>${membersList[1].pwd}</td>
      <td>${membersList[1].name}</td>
      <td>${membersList[1].email}</td>
    </tr>
    
    <!-- membersMap(1) 출력 -->
    <tr align="center">
      <td>${membersMap.id}</td>
      <td>${membersMap.pwd}</td>
      <td>${membersMap.name}</td>
      <td>${membersMap.email }</td>
    </tr>
    
    <!-- membersMap(2[0]) 출력 -->
    <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>
    
    <!-- membersMap(2[1]) 출력 -->
    <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>
  </table>
</body>
</html>


EL has-a Bean

${parrent.child.attribute}

속성으로 다른 javaBean을 갖는 경우

pro14/src/sec01/ex02/MemberBean.java

package sec01.ex02;
...

public class MemberBean {
  private String id;
  private String pwd;
  private String name;
  private String email;
  private Date joinDate;
  private Address addr; //다른 javaBean 클래스 타입의 속성

  public MemberBean() { }
  ... // getter/setter
}

pro14/src/sec01/ex02/Address.java

public class Address {
 private String city;
 private String zipcode;
 
  public Address() { }
  ... // getter/setter
}

pro14/WebContent/test01/member.jsp

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

<%-- AddressBean 생성 --%>
<jsp:useBean id="addr" class="sec01.ex02.Address"/>
<jsp:setProperty name="addr" property="city" value="서울"/>
<jsp:setProperty name="addr" property="zipcode" value="07654"/>

<%-- MemberBean 생성 --%>
<jsp:useBean id="m" class="sec01.ex02.MemberBean" />
<jsp:setProperty name="m" property="*" />
<%  m.setAddr(addr); /*MemberBean 속성에 AddressBean 설정*/ %>

<html>
<head>
  <meta charset="UTF-8">
  <title>회원 정보 출력창</title>
</head>
<body>
  <table border=1 align="center" >
    <tr align="center" bgcolor="#99ccff" >
      <td width="7%"><b>아이디</b></td>
      <td width="7%"><b>비밀번호</b></td>
      <td width="5%"><b>이름</b></td>
      <td width="5%"><b>이메일</b></td>
      <td width="5%"><b>도시</b></td>
      <td width="5%"><b>우편번호</b></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>
  </table>
</body>
</html>


EL 바인딩 출력

pro14/WebContent/test02/forward.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
  request.setCharacterEncoding("utf-8");
  
  // 1, 회원 정보 직접 전달
  request.setAttribute("id","hong");
  request.setAttribute("pwd", "1234");
  session.setAttribute("name", "홍길동");
  application.setAttribute("email", "hong@test.com");
  
  // 2, Bean 안에 정보 넣어서 전달
  MemberBean member = new MemberBean("lee", "1234", "이순신", "lee@test.com");
  request.setAttribute("member", member);
  
  //3, ArrayList 안에 Bean를 넣어서 전달
  List membersList = new ArrayList();
  MemberBean m1 = new MemberBean("lee", "1234", "이순신", "lee@test.com");
  MemberBean m2 = new MemberBean("son", "1234", "손흥민", "son@test.com");
  membersList.add(m1);
  membersList.add(m2);
  request.setAttribute("membersList", membersList);
%>
<html>
<head>
  <meta charset="UTF-8">
  <title>forward2</title>
</head>
<body>
  <jsp:forward page="member.jsp" />
</html>

pro14/WebContent/test02/member.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<%
  request.setCharacterEncoding("UTF-8");
  String id= (String)request.getAttribute("id");
  String pwd= (String)request.getAttribute("pwd");
  String name= (String)session.getAttribute("name");
  String email= (String)application.getAttribute("email");
%>

<html>
<head>
  <meta charset="UTF-8">
  <title>회원 정보 출력창</title>
</head>
<body>
  <table border="1" align="center" >
    <tr align="center" bgcolor="#99ccff">
      <td width="20%"><b>아이디</b></td>
      <td width="20%"><b>비밀번호</b></td>
      <td width="20%" ><b>이름</b></td>
      <td width="20%"><b>이메일</b></td>
    </tr>
    
    <!-- 1, 표현식 -->
    <tr align="center">
      <td><%=id %></td>
      <td><%=pwd%></td>
      <td><%=name %></td>
      <td><%=email %></td>
    </tr>
    
    <!-- 1, 표현언어 -->
    <tr align="center">
      <td>${id}</td>
      <td>${pwd}</td>
      <td>${name}</td>
      <td>${email}</td>
    
    <!-- 2 -->
    <tr align="center">
      <td>${member.id}</td>
      <td>${member.pwd}</td>
      <td>${member.name}</td>
      <td>${member.email}</td>
    </tr>
    
    <!-- 3 -->
    <tr align="center">
      <td>${membersList[0].id}</td>
      <td>${membersList[0].pwd}</td>
      <td>${membersList[0].name}</td>
      <td>${membersList[0].email}</td>
    </tr>
    
    <!-- 3 -->
    <tr align="center">
      <td>${membersList[1].id}</td>
      <td>${membersList[1].pwd}</td>
      <td>${membersList[1].name}</td>
      <td>${membersList[1].email}</td>
    </tr>
  </table>
</body>
</html>


*자바 웹을 다루는 기술

profile
CS 메모장

0개의 댓글