본문으로 바로가기

익스프레션 언어

category 웹/JSP 2018. 10. 29. 21:26

익스프레션 언어(EL)

 

익스프레션 언어란??

익스프레션 말 그대로 표현이란 뜻입니다. 흔히 EL이라고 합니다.

표현 언어로 코드를 줄여 줄 수 있는 편리한 기능을 가지고 있습니다.

즉 두 가지 형태가 있습니다.

${}와 <%=%>

 

${}와 <%=%>의 차이점은 무엇일까요 ???

바로 ${}안에는 애트리뷰트의 이름이 들어가고 <%=%>는 자바의 변수이름이 들어갑니다.

여기서 에트리뷰트가 뜬금없이 나왔지만 무엇인지 궁금해하는 여러분들께 알려드리겠습니다.

애트리뷰트는 앞서 배웠던 데이터 공유시 사용한 메소드 !! setAttribute getAttribute로 저장 되는 데이터를 뜻합니다.!!

즉 두개의 형태로 표현 되는데요

하나는,

request.setAttribute("RESULT",new Integer(sum)); =====> <%=request.getAttribute("RESULT")%>

다른 하나는,

request.setAttribute("RESULT",new Integer(sum)); =====> ${RESULT}

입니다.

물론 RequestDispatcher로 forward를 해야겠지요??(데이터 공유를 위해 request.로 이용하기 때문, application이용시 전체이므로 forward 하지 않아도 무방)

 

자세히 살펴보도록 하죠.

 

익스프레션 언어의 유일한 목적은 식을 계산하여 결과를 출력하는 것입니다.

 

1. ${RESULT} 

2. ${RESULT+100} 

3. ${m:sqrt(100)}

등 정적 메서드를 호출 할 수도 있고 연산자를 포함 할 수도있습니다.

 

${RESULT}는 데이터이름 하나로만 구성된 EL식으로

request.setAttribute("RESULT",new Integer(sum)); =====> ${RESULT}

으로 사용합니다.

 

앞서 배운 application , request 도대체 무슨 차이지?? 하시는 분들을 위해 정리했습니다.

총 4가지의 애트리뷰트가 있습니다.

애트리뷰트 종류 

호출 시 사용 내장변수 

 

 page

pageContext 

 

request 

request 

 

session 

session 

 

application 

application 

 

 

request.setAttribute("RESULT",new Integer(sum)); =====> ${RESULT}

이것을 pageContext.setAttribute("RESULT",new Integer(sum)); =====> ${RESULT}

로 사용 가능하다는 겁니다. 마찬가지로 이때는 forward가 필요 없겠지요.. PAGE에 관한 애트리뷰트이기 때문입니다...

 

즉 범위를 얘기하자면

page ----> request ----> session -----> application 순입니다.

 

만약에 이를 혼합하여 여러 애트리뷰트가 있을 경우 구분해주기위해서 xxxxScope를 이용합니다.

예를들어서

${pageScope.SUM} ${requestScope.SUM} ${sessionScope.SUM} ${applicationScope.SUM} 으로 구분해줍니다.

 

여러 익스프레션 언어식에 들어갈 내장 객체를 살펴봅시다.

param

param은 웹 브라우저상에 FORM 앨리먼트를 통해 입력된 데이터를 가져올 때 사용합니다.

사용방법은 두가지 입니다.

${param.NUM} or ${param["NUM"]}

만약에 여러 데이터가 입력될 경우에는 paramValues를 이용하면 됩니다.

${paramValues.ANIMAL[0]} or ${paramValues["ANIMAL"][1]} 로 이용합니다.

 

간단한 예를 보시죠

우선 애완동물 관련 입력 html 파일입니다. (FORM)

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>아이 러브 펫</title>
</head>
<body>
<form action="PetsResult.jsp">
아이디:<INPUT TYPE=TEXT NAME=ID><br><br>
다음 중 회원님이 키우고 있는 애완동물을 선택하십시오<br><br>
 개:<INPUT TYPE=CHECKBOX NAME=ANIMAL VALUE="개">
 고양이:<INPUT TYPE=CHECKBOX NAME=ANIMAL VALUE="고양이">
 금붕어:<INPUT TYPE=CHECKBOX NAME=ANIMAL VALUE="금붕어"><br><br>
 <INPUT TYPE=RESET VALUE="취소">
 <INPUT TYPE=SUBMIT VALUE="확인">
</form>
</body>
</html>

 

여기서 입력된 데이터들이 FORM action에 지정된 jsp 파일로 가게 됩니다. 이때 ${param}과 ${paramValues}등의 EL식을 사용합니다.

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
 아이디:${param.ID }<br>
 선택 동물:${paramValues.ANIMAL[0]}
 ${paramValues.ANIMAL[1]}
 ${paramValues.ANIMAL[2]}
   
</body>
</html>

이는 jsp파일로 보시다시피 ID와 동물 값들에 대해 불러왔습니다.

 

또한 header 내장객체가 있습니다.

이는 HTTP 요청 메시지의 헤더 값을 가져올 때 사용합니다.

${header.Host} or ${header["User-Agetn"]}로 이용합니다.

첫번째 사용은 HTTP 헤더이름이 자바의 식별자 명명규칙을 따르지 않을때는 사용 할 수 없는 제약사항이 있어서 두번째 방법을 많이 이용합니다.

 

헤더가 둘 이상 있을 때는 headerValues를 사용합니다

${headerValues.Accept[0]} ${headerValues["User-data"][0]}

 

또한 ccokie 내장객체가 있습니다.

웹 브라우저가 웹 서버로 보낸 쿠키를 가져올 때 사용합니다.

${cookie.CART} ${cookie["CART"]}

이는 객체이기 때문에 값을 가져오기 위해선 value를 사용합니다.

${cookie.CART.value} ${cookie["CART"]["value"]}

${cookie.CART["value"]} ${cookie["CART"].value} 등 4가지 방법이 있습니다.

 

쿠기 객체에는 쿠기 값 외에 도메인, URL 수명 등이 있으므로 이를 얻기 위해서는 value대신에 domain, path, maxAge를 써넣으면 됩니다.

${cookie.CART.domain} ${cookie.CART["path"]} ${cookie["CART"]["maxAge"]}

 

쿠키를 저장하고 출력하는 간단한 예제를 보겠씁니다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<%
Cookie cookie=new Cookie("NAME","John");
response.addCookie(cookie);
%>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
쿠키 값이 설정 됐습니다.
</body>
</html>

쿠키를 저장합니다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
NAME 쿠기 데이터 값은 ?${cookie.NAME.value} //${cookie.NAME["value"]} , ${cookie["NAME"]["value"]}, ${cookie["NAME"].value}
</body>
</html>

가져오기 위해 ${cookie.NAME.value} EL식을 사용 했습니다.

 

이어서 포스팅 하겠습니다. 감사합니다.

 

 

' > JSP' 카테고리의 다른 글

Tld EL함수  (0) 2018.11.05
익스프레션 언어(2)  (0) 2018.10.31
서블릿의 라이프 사이클(2)  (0) 2018.10.29
서블릿의 라이프 사이클  (0) 2018.10.24
JSP의 기초(2)  (0) 2018.10.03