EL (Expression Language)

 1. EL ?

   1) JSTL(JSP Standard Tag Library) 1.0 규약에 소개된 내용

   2) JSP 2.0 에 처음으로 소개

   3) ECMAScript(JavaScript)와 XPath의 개념을 이용해서 설계

   4) EL 에서는 "." 와 "[' ']" 는 같다.

     session.setAttribute("irum", "John");

     String name = (String)session.getAttribute('irum');  --> ${sesseonScope.irum}

     ${expression}                                                          ${sessionScope["irum"]}

   5) Null 에 대해 관대하다. 

   6) 자동 형 변환 객체를 제공한다.

     ${"10" + 1} --> 11   --> <%= 10 + 1 %>


2. EL 이 제공하는 기능

  1) JSP 의 기본객체(내장객체) 중 scope 에 관련된 객체

     application, session, request, page

  2) 집합 객체(배열, 자바의 컬렉션)에 대한 접근 방법

  3) 수치, 관계, 논리 연산자를 제공

  4) JavaBean 의 메소드에 접근 가능

  5) 그 외에 EL 만이 가지는 객체 접근 가능


3. 표현방법

 ${expression}

 ${7} --> 7 --> <%= 7 %>

 <%= 10 + 20 + 30 %>  --> ${10 + 20 + 30 }

 Name : <%= (String)session.getAttribute("irum") %> 

 Name : ${ sessionScope.irum}, or ${sessionScope["irum"]}

 <%! %>, <%  %>, <%= %>은 사용할 수 없다.


4. EL 의 내장객체

 1) pageScope : javax.servlet.jsp.JspContext 객체

 2) requestScope : javax.servlet.http.ServletRequest Map 객체 

 3) sessionScope : javax.servlet.http.HttpSession Map 객체

 4) applicationScope : javax.servlet.ServletContext Map 객체

 removeAttribute(key), setAttribute(key, value), getAttribute(key)

   ${pageScope | requestScope | sessionScope | applicationScope .key }


 5) pageContext : javax.servlet.jsp.PageContext 객체

 6) param : Map 객체

 7) paramValues : Map 객체

 8) header : Map 객체

 9) headerValues : Map 객체

 10) cookie : Map 객체

 11) initParam : Map 객체


5. EL literal

  1) boolean : true, false

  2) 정수형 : 4, -6

  3) 실수형 : 3.14, 0.5E10, 3e10

  4) String : 'DOG', '고양이'

  5) Null : null


6. Operator

  1) 산술연산자 : +, -, *, /(div), %(mod), 

  2) 비교연산자 : ==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge)

  3) 논리연산자 : &&(and), ||(or), !(not)

  4) Empty 연산자 : 널 여부 판단, empty <값>  예)${empty param["page"] }

  5) 삼항연산자 

  6) 연산자의 우선 순위

    - [ ], .

    - ( )

    - 단항연산자 : -, not, !, empty

    - 이항연산자 : 산술연산자, 비교연산자, 관계연산자, 비트연산자

    - 삼항연산자


7. 배열 데이터 처리방법

8. List 계열 데이터 처리방법

9. Map 계열 데이터 처리방법

10. JavaBean 의 static method 호출하는 방법






eldemo.jsp

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

    pageEncoding="UTF-8"%>

<%-- 

<%

String str_num1 = request.getParameter("num1");

String str_num2 = request.getParameter("num2");

%>

Value 1 : <%=str_num1 %><br />

Value 2 : <%=str_num2 %><br />

<%

out.print(str_num1 + " + " + str_num2 + " = ");

out.println(Integer.parseInt(str_num1) + Integer.parseInt(str_num2));

%>

--%>


Value 1 : ${ param.num1} <br />

Value 2 : ${ param["num2"]} <br />

${ param.num1} + ${ param["num2"]} = ${ param.num1 + param.num2 }

웹브라우저 http://localhost:8080/0626/eldemo.jsp?num1=5&num2=3 

출력:

Value 1 : 5 

Value 2 : 3 

5 + 3 = 8

---------------------------------

eldemo1.jsp

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

    pageEncoding="UTF-8"%>

   

<%-- User-Agent : <%=request.getHeader("User-Agent") --%> 

<%--

     만일 key 가 영문자, 숫자, $, _ 가 아닌 특수문자일 경우에는

     . 연산자를 사용하지 못하고 반드시 [스트링]으로 해야 한다.

--%>

<%-- User-Agent : ${ header.user-agent}  --%>

User-Agent : ${ header['user-agent']} <br />

<%-- User's Host : <%= request.getHeader("host") --%>

User's Host : ${ header.host } <br />

<%-- 요청메소드 : <%=request.getMethod() --%>

요청메소드 : ${ pageContext.request.method } <br />

<%-- User's IP : <%= request.getRemoteAddr() %>  --%>

User's IP : ${ pageContext.request.remoteAddr } <br />

Session ID : ${ cookie["JSESSIONID"].value}

<%-- Session ID : 

<%

Cookie [] array = request.getCookies();

if(array != null){

for(int i = 0 ;i < array.length ; i++){

if(array[i].getName().equals("JSESSIONID")){

out.println(array[i].getValue());

}

}

}

%>

--%>

출력:

User-Agent : Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 

User's Host : localhost:8080 

요청메소드 : GET 

User's IP : 0:0:0:0:0:0:0:1 

Session ID : 73632397B338D3464FDB98FD9B4C91A2

---------------

cookieset.jsp

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

    pageEncoding="UTF-8"%>

<%

Cookie c1 = new Cookie("irum", "Sally");

response.addCookie(c1);

Cookie c2 = new Cookie("gender", "female");

response.addCookie(c2);

Cookie c3 = new Cookie("age", "20");

response.addCookie(c3);

%>

<body>

<h1>Cookie 가 잘 저장됐습니다.</h1>

</body>


cookieget.jsp

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

    pageEncoding="UTF-8"%>

<body>

Name : ${ cookie.irum.value } <br /> 

Gender : ${ cookie["gender"].value } <br />

Age : ${ cookie["age"]["value"] }

</body>

cookieset.jsp 실행후 cookieget.jsp 실행

출력:

Name : Sally 

Gender : female 

Age : 20

-----------------------------

eldemo2.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<form action="eldemo2.jsp" method="post">

Name : <input type="text" name="username" /><br /> 

Gender : <input type="radio" name="gender" value="남자" />남자&nbsp;

              <input type="radio" name="gender" value="여자" />여자<br />

Hobby : <input type="checkbox" name="hobby" value="등산" />등산<br />

<input type="checkbox" name="hobby" value="낚시" />낚시<br />

<input type="checkbox" name="hobby" value="바둑" />바둑<br />

<input type="checkbox" name="hobby" value="독서" />독서<br />

<input type="checkbox" name="hobby" value="영화감상" />영화감상<br />

Favorite Season : <select name="season">

                               <option>--선택--</option>

                               <option value="spring">봄</option>

                               <option value="summer">여름</option>

                               <option value="fall">가을</option>

                               <option value="winter">겨울</option>

   </select><br />

Language :           <select name="language" multiple size="5">

                               <option>--선택--</option>

                               <option value="C-language">C-language</option>

                               <option value="Java">Java</option>

                               <option value="C#">C#</option>

                               <option value="Python">Python</option>

   </select><br /><br />

Self : <textarea name="self"></textarea><br />

<input type="submit" value="전송" />

</form>

</body>

</html>


eldemo2.jsp

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

    pageEncoding="UTF-8"%>

<% request.setCharacterEncoding("utf-8");  %>    

Name : ${param.username}<br />

Gender : ${param["gender"]} <br />

Hobby : ${paramValues.hobby[0]},${paramValues.hobby[1]},${paramValues.hobby[2]},${paramValues.hobby[3]},${paramValues.hobby[4]} <br />

Season : ${param["season"]} <br />

Language : ${paramValues.language[0]},${paramValues.language[1]},${paramValues.language[2]},${paramValues.language[3]},${paramValues.language[4]} <br />

Self : ${param.self} <br />


EL은 루프를 돌릴수 없어 하나하나 다써줘야한다.

----------------------------------

eldemo3.jsp

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

    pageEncoding="UTF-8"%>


<%--     

DBUSER : <%=application.getInitParameter("DBUSER") %> <br />

DBPWD : <%=application.getInitParameter("DBPWD") %> <br />

--%>


DBUSER : ${ initParam.DBUSER} <br /> 

DBPWD : ${ initParam["DBPWD"]}

--------------------

eldemo4.jsp

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

    pageEncoding="UTF-8"%>

    

<%

session.setAttribute("username", "조성모");

%>    

<body>


Name : <%=(String)session.getAttribute("username") %><br />

Name : ${ sessionScope.username }<br />

Name : ${ sessionScope["username"] }<br />


</body>

출력이 같음.

-------------------

eldemo5.jsp

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

    pageEncoding="UTF-8"%>


\${"10" + 1} : ${"10" + 1} <br />

\${5 lt 10} : ${ 5 lt 10} <br />


${ param.num1} + ${ param.num2 } = ${param.num1+ param.num2}<br />

${ param.num1} - ${ param.num2 } = ${param.num1+ param.num2}<br />

${ param.num1} * ${ param.num2 } = ${param.num1* param.num2}<br />

${ param.num1} / ${ param.num2 } = ${param.num1 div param.num2}<br />

${ param.num1} % ${ param.num2 } = ${param.num1 mod param.num2}<br />

웹브라우저 http://localhost:8080/0626/eldemo5.jsp?num1=5&num2=1 접속.

출력:

${"10" + 1} : 11 

${5 lt 10} : true 

5 + 1 = 6

5 - 1 = 6

5 * 1 = 5

5 / 1 = 5.0

5 % 1 = 0

----------------

eldemo6.jsp

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

    pageEncoding="UTF-8"%>

    

<%

String [] array = new String[3];

array[0] = "나훈아";

array[1] = "조용필";

array[2] = "설운도";

pageContext.setAttribute("ARRAY", array);

%>    

    

<body>

<h1>가수 목록</h1>

1등 : ${ARRAY[0]} <br />

2등 : ${ARRAY[1]} <br />

3등 : ${ARRAY[2]} <br />

</body>

출력:

가수 목록

1등 : 나훈아 

2등 : 조용필 

3등 : 설운도 

---------------------

eldemo7.jsp

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

    pageEncoding="UTF-8"%>

<jsp:directive.page import="java.util.ArrayList" />    

    

<%

ArrayList<String> items = new ArrayList<String>();

items.add("딸기");

items.add("복숭아");

items.add("포도");

items.add("수박");

pageContext.setAttribute("FRUITS", items);

%>    

<body>

<h1>6월에 가장 많이 팔린 과일</h1>

1위 : ${ FRUITS[0]} <br />

2위 : ${ FRUITS[1]} <br />

3위 : ${ FRUITS[2]} <br />

4위 : ${ FRUITS[3]} <br />

</body>

출력:

6월에 가장 많이 팔린 과일


1위 : 딸기 

2위 : 복숭아 

3위 : 포도 

4위 : 수박 

-------------------------

eldemo8.jsp

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

    pageEncoding="UTF-8"%>

<jsp:directive.page import="java.util.HashMap" />

<%

HashMap<String ,String> map = new HashMap<String, String>();

map.put("Marketing", "New York");

map.put("Acconting", "Boston");

map.put("Sales", "Seoul");

map.put("Operation", "Cicago");

pageContext.setAttribute("DNAME", map);

%>

<body>

${ param.TEAM } Team 의 도시는 : ${ DNAME[param.TEAM]}

</body>

http://localhost:8080/0626/eldemo8.jsp?TEAM=Marketing 접속

출력:

Marketing Team 의 도시는 : New York

-------------------------------

eldemo9.jsp

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

    pageEncoding="UTF-8"%>

<jsp:directive.page import="kr.javaexpert.libs.Product" />    

<%-- 

<%

Product  p = new Product();

p.setName("Pencil");

p.setPrice(1000);

%>

--%>

<jsp:useBean id="p" class="kr.javaexpert.libs.Product" />

<jsp:setProperty name="p" property="name" value="Pencil" />

<jsp:setProperty name="p" property="price" value="1000" />

<%

session.setAttribute("PRODUCT", p);

pageContext.forward("eldemo10.jsp");

%>


kr.javaexpert..libs 패키지 Product.java

package kr.javaexpert.libs;


public class Product {

private String name;

private int price;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getPrice() {

return price;

}

public void setPrice(int price) {

this.price = price;

}

}


eldemo10.jsp

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

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<h2>상품정보</h2>

이름 : ${sessionScope.PRODUCT.name }<br />

가격 : ${sessionScope["PRODUCT"]["price"] }

</body>

</html>


eldemo10.jsp를 실행시키나 eldemo9.jsp를 실행시키나 출력은 아래와 같다.

상품정보

이름 : Pencil

가격 : 1000

--------------------------

함수를 정의한 TLD파일 작성

kr.javaexpert.libs 패키지의 DateEL.java

package kr.javaexpert.libs;


import java.text.SimpleDateFormat;

import java.util.Date;


public class DateEL {

private static SimpleDateFormat sdf = 

new SimpleDateFormat("YYYY-MM-dd");

public static String getFormat(Date date){

return sdf.format(date);

}

}


WebContent-WEB-INF-tlds폴더의 el-function.tld

<taglib xmlns="http://java.sun.com/xml/ns/javaee" version="2.1">

<description>EL 에서 함수 실행하기</description>

<tlib-version>1.0</tlib-version>

<short-name>el-function</short-name>

<function>

<description>Date 객체에서의 포매팅</description>

<name>dateFormat</name>

<function-class>kr.javaexpert.libs.DateEL</function-class>

<function-signature>java.lang.String getFormat(java.util.Date)</function-signature>

</function>

</taglib>

eldemo.11.jsp

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

    pageEncoding="UTF-8"%>

<%@ taglib prefix="eltest" uri="/WEB-INF/tlds/el-function.tld" %>    

<jsp:directive.page import="java.util.Date" />


<%

Date now = new Date();

request.setAttribute("today", now);

%>

<body>

오늘은 <b>${eltest:dateFormat(today) }</b> 입니다.

</body>

출력:

오늘은 2014-06-26 입니다.

---------------------------

EL 안쓰는 방법

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

    pageEncoding="UTF-8" isELIgnored="false" %>

<%@ taglib prefix="eltest" uri="/WEB-INF/tlds/el-function.tld" %>    

<jsp:directive.page import="java.util.Date" />


<%

Date now = new Date();

request.setAttribute("today", now);

%>

<body>

오늘은 <b>${eltest:dateFormat(today) }</b> 입니다.

</body>

여기서 isELIgnored="ture" 로 바꿔줌.

페이지에서 뿐아니라 전체적으로 못 써주게 하려면 web.xml에서 

  <jsp-config>

  <jsp-property-group>

  <url-pattern>*.jsp</url-pattern>

  <el-ignored>true</el-ignored>

  </jsp-property-group>

  </jsp-config>

위처럼 해주고

안 사용하려는 곳에

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

    pageEncoding="UTF-8" deferredSyntaxAllowedAsLiteral="true" %>

<%--     

DBUSER : <%=application.getInitParameter("DBUSER") %> <br />

DBPWD : <%=application.getInitParameter("DBPWD") %> <br />

--%>

DBUSER : ${ initParam.DBUSER} <br /> 

DBPWD : ${ initParam["DBPWD"]}

위처럼 deferredSyntaxAllowedAsLiteral="true" 를 써주면 된다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

+ Recent posts