8. Getting data with the expression language
8.1 What is an expression language?
- EL - Expression Language
- OGNL - Oject Graph Navigation Language
8.1.1 Why an expression language?
- Expression languages은 공통된 일을 수행하는 단순한 표현을 쓸 수 있게 디자인 되어지는 게 그들의 속성이다.
- 예를 들면, Hibernate 프로젝트에서 Hibernate Query Language(HQL) 이라 불리는 특별한 EL은 개발자와 복잡한 SQL문의 버퍼로서 작용한다.
- 웹 프레임웍에서 expression languages은 비슷한 목표를 가진다.
- 반복코드를 줄이기 위해 존재한다.
- 세션으로 부터 쇼핑카트를 가져오는 Jsp예제
<%
ShoppingCart cart = (ShoppingCart)session.get("cart");
int id = cart.getId();
%>
<%= id %>
<%= ((ShoppingCart)session.get("cart")).getId(); %>
#session.cart.id
8.1.2 Why OGNL?
- 웹환경에서 서블릿과 JSP 스펙으로 만들어진 독특한 프로그램들은 다음과 같은 검증(Assertion)과 결론들을 만들 수 있다.
■ 검증(Assertion): 모든 request 파라미터들은 .어떤 타입도 가능(Strings, String arrays)
결론: Strings 와 String arrays로 부터 ints, booleans, dates등으로 변환 필요
■ 검증(Assertion): HTML은 국제화도지 않았기 때문에, 값들은 서버측에서 올바르게 로컬화된 String으로 변환되어야 한다.
결론: The need to convert to a String is just as strong as the need to convert from Strings.
■ 검증(Assertion): 웹 어플리케이션의 전형적인 세션 과정에서, 여러번 String과 원시타입으로 변환JS되어질 수 있다.
결론: 웹은 약하게 타이핑된 플래폼이고 어떤 코드는 좀더 강하게 타이핑된 자바 플래폼사이에서 버퍼로서 작동한다.(?)
■ 검증(Assertion): Person과 같은 크고 복잡한 객체를 가질때 하나의 웹페이지에서 다른 장소에서 first name과 last name같은 객체의 일부를 표현하고 싶다.
결론: 알갱이 방법으로 어떤 객체의 부분을 액세스하는 것이 중요하다.
8.1.3 Other expression languages
■ JSTL - 자바진영에서 독립적으로 개발되어진 JSP를 위한 표준 스크립트이면서 EL
■ Groovy - 자바문법과 루비의 일부를 첨가한다.
■ Velocity - Velocity 정확히 EL은 아니지만 Velocity template을 쓰는 스크립트는 OGNL과 다른 EL들과 유사하다.
8.1.4 Key OGNL concepts
- OGNL의 모든 것은 표현식을 평가하는 자바빈을 담고 있는 컨텍스트주위에 집중해 있다.(?)
- 위 제목링크는 기본적인 expression language 특징에 대해서 설명하고 있습니다.
- 위 제목링크는 Working with collections에 대해서 설명하고 있습니다.
- 위 제목링크는 Advanced expression language features에 대해서 설명하고 있습니다.
8.5 Summary
- EL이 value stack과 작용하는 방법이다.
- 다른 액션에 의해 랜더링되어지는 두개의 페이지의 똑같은 JSP블럭들은 그 스택의 같은 객체들이다.