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();  %>

  • EL - 단순표현과 가독성이 높아진다

#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의 모든 것은 표현식을 평가하는 자바빈을 담고 있는 컨텍스트주위에 집중해 있다.(?)

8.2 Basic expression language features

  • 위 제목링크는 기본적인 expression language 특징에 대해서 설명하고 있습니다.

8.3 Working with collections

  • 위 제목링크는 Working with collections에 대해서 설명하고 있습니다.

8.4 Advanced expression language features

  • 위 제목링크는 Advanced expression language features에 대해서 설명하고 있습니다.

8.5 Summary

  • EL이 value stack과 작용하는 방법이다.
  • 다른 액션에 의해 랜더링되어지는 두개의 페이지의 똑같은 JSP블럭들은 그 스택의 같은 객체들이다.