Expression Language
JSP 스펙 2.0
EL님에 의해 스크립팅에서 해방된 JSP라..............우하하..
요즘 스프링을 하다보니.. JSTL을 자연스럽게 접하게 되면서 기억이 가물가물한걸 살리기 위해 정리함..
잠안자고 뭔짓인지..
출처 : Head First Servlets & JSP
핵심정리
■ EL 표현식은 항상 중괄호로 묶고 앞에 달러($)기호를 붙입니다. ${표현식)
표현식에서 첫 번째 변수는 내장 객체거나 아니면 다음 4가지 생존범위에 속하는 속성입니다. (page, request, session, application)
■ 도트 연산자는 맵 키 이름이나 빈 프로퍼티 이름으로 값을 읽습니다. 예를 들어 ${foo.bar}에서 foo가 맵이라면 bar는 키가 될 것이며, foo가 빈이라면 bar는 당연히 프로퍼티가 되겠죠. 여하튼 사용자는 그 값을 읽을 수 있죠. 그리고 도트 연산자의 경우 오른쪽에 어떤 것이 오더라도 그 이름은 자바 명명 규칙을 따라야 합니다. 즉 문자, _, $가 제일 처음에 와야 하며 다음에는 앞에 것에 더하여 숫자까지 나올 수 있지요. 나머진 안됩니다.
■ 도트 연산자 오른쪽에 자바 식별자로서 부적절한 이름은 절대 올 수 없습니다. ${foo.1}과 같이 코딩할 수 없습니다.
■ []연산자는 도트 연산자보다 훨씬 기능이 강력합니다. 왜냐구요. []연산자는 배열과 리스트 값도 읽을 수 있으니까. []안에 변수를 포함한 표현식을 쓸 수 있으며, 얼마든지 많은 []을 포함할 수도 있습니다.
■ 예를 들어 musicList가 ArrayList라고 해봅시다. musicList의 첫 번째 값을 읽으려면 ${musicList[0]}로 해도 되고 ${musicList[“0”]}로 해도 됩니다. EL에서는 인덱스 값에 따옴표를 허용합니다.
■ []안에 있는 것에 따옴표가 없다면, 컨테이너는 이 값이 무언잇진 실행(평가)해봅니다. 따옴표가 있다면, 그리고 연산자 왼쪽이 배열이나 리스트가 아니라면, 프로퍼티나 키 이름이라고 생각하겠죠.
■ 딱 하나만 빼고 EL 내장 객체는 모두 맵입니다. 맵 내장 객체만 있으면 4가지 생존범위 객체에 묶여 있는 속성, 요청 파라미터값, 헤더값, 쿠키값, 컨텍스트 초기화 파라미터에 접근할 수가 있지요. 맵 타입이 아닌 객체는 pageContext뿐인데, 이는 PageContext 객체 참조 변수입니다.
■ EL 내장 생존범위 객체하고 실제 속성이 묶여 있는 객체하고 헛갈리지 마세요. 즉 requestScope 내장 객체하고 실제 JSP request 내장 객체하고 구분해야 합니다. EL에서 request 객체에 접근할 수 있는 유일한 길은 pageContext 내강 객체를 통해서입니다. (꼭 request에 접근하지 않더라도 다른 EL 내장 객체 param/parmaValues, header/headerValues, cookie를 가지고서도 필요한 정보를 읽을 수 있습니다.)
■ EL 함수를 사용하면 일반 자바 클래스에 있는 정적인 공용(public static)메소드를 호출할 수 있습니다. 함수 이름하고 실제 메소드 이름이 일치할 필요는 없죠! 예를 들어 ${foo:rollIt}라고 해서 메소드 이르이 rollIt()이어야할 필요는 없단 말이지요.
■ TLD(태그 라이브러리 서술자)파일을 사용해서 함수 (예: rollIt())와 실제 정적인 메소드를 서로 매핑합니다. <function>태그에 함수를 정의하는데, 그 하위 태그인 <name>에는 함수 이름을, <function-class>에는 경로까지 기술한 함수 클래스명을, <function-signature>에는 함수의 리턴 타입과 인자가 어떻게 되는지 작성합니다.
■ JSP에서 함수를 사용하려면, taglib 지시자로 이름공간(namespace)을 선어해야 합니다. taglib 지시자에 있는 앞 첨자(prefix)를 가지고 컨테이너는 코딩에서 호출한 함수가 어느 TLD에 있는지 파악하는데 사용합니다. 예를 들면 : <@ taglib prefix=”mine” uri=”/WEB-INF/foo.tld”%>
퇴근해서 집구석에서 12:51분에 작성함..
이래저래 스트레스 받네.. 집구석에서 뭐하는 짓이람..ㅡ.ㅡ;
다음은 테스트해본 코드... 대충~~ ㅋㅋ
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.HashMap"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EL TEST</title>
</head>
<body>
Code by fransis[2007-06-20]
<%
String[] favoriteMusic = {"Zero 7", "Tahiti 80", "BT", "Frou Frou"};
request.setAttribute("musicList", favoriteMusic);
ArrayList favoriteFood = new ArrayList();
favoriteFood.add("chai ice cream");
favoriteFood.add("fajitas");
favoriteFood.add("thai pizza");
favoriteFood.add("anything in dark chocolate");
request.setAttribute("favoriteFood", favoriteFood);
HashMap musicMap = new HashMap();
musicMap.put("Ambient", "Zero 7");
musicMap.put("Surf", "Tahiti 80");
musicMap.put("DJ", "BT");
musicMap.put("Indie", "Travis");
request.setAttribute("musicMap", musicMap);
request.setAttribute("Genre", "Ambient");
%>
Music is : ${musicList}<br/>
First song is : ${musicList[0]}<br/>
Second song is : ${musicList["1"]}<hr/>
Foods are : ${favoriteFood}<br/>
First food is : ${favoriteFood[0]}<br/>
Second food is : ${favoriteFood["1"]}<hr/>
Ambient is : ${musicMap.Ambient}<br/>
Ambient is : ${musicMap["Ambient"]}<hr/>
Music is : ${musicMap[Genre]}<br/> <!-- 작동함 -->
Music is : ${musicMap["Genre"]}<hr/> <!-- 작동안함 -->
<!--
파라미터 넘오는 값..
-->
Request Parma name is : ${param.name}<br/>
Request Parma food is : ${param.food}<br/>
Request paramValues first food is : ${paramValues.food[0]}<br/>
Request paramValues second food is : ${paramValues.food[1]}<br/>
Request paramValues first name is : ${paramValues.name[0]}<hr/>
<!--
헤더 정보..
-->
Host is : <%= request.getHeader("host") %><br/>
Host is : ${header["host"]}<br/>
Host is : ${header.host}<hr/>
<!--
HTTP 요청 메소드 정보..
-->
Method is : <%= request.getMethod() %><br/>
Method is : ${request.method}<br/><!-- 작동안함 -->
Method is : ${requestScope.method}<br/><!-- 작동안함 -->
Method is : ${pageContext.request.method}<hr/><!-- 작동함 -->
<!--
Cookie 요청 메소드 정보..
쿠키가 없음으로...주석..
<%
/*
Cookie[] cookies = request.getCookies();
for(int i = 0; i < cookies.length; i++){
if ((cookies[i].getName()).equals("userName")){
out.println(cookies[i].getValue());
}
}
*/
%>
${cookie.userName.value}
-->
<form>
Name : <input type="text" name="name" value="lee"/><br/>
First Food : <input type="text" name="food" value="pizza"/><br/>
Second Food :<input type="text" name="food" value="sushi"/><hr/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
'java' 카테고리의 다른 글
Jakarta String Tag Library (4) | 2007.12.13 |
---|---|
현재 프로젝트의 자바 라이브러리 정리.. (0) | 2007.09.14 |
jasper report용 servlet (0) | 2007.07.05 |
oracle8i/jdbc/tomcat (0) | 2004.09.15 |
mssql/jdbc/tomcat (0) | 2004.09.14 |