익스프레션 언어(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 |