ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [헤드퍼스트 Servlet&Jsp] 8-1. 스크립트가 없는 페이지
    카테고리 없음 2017. 2. 19. 12:07

    드디어 크롬 개발자도구 에서 확인하는 HTML 속 ${...} 를 이해할 수 있게 된다. :3


    XPATH 와 자바스크립트 (ECMAScript) 에서 영감을 받아 만든 EL

    웹 디자이너들이 친숙하게 사용할 수 있는

    유지 보수가 평이한 EL




    학습목표


    빈 표준 액션태그 <jsp:useBean>


    EL 최상위 변수 활용


    EL 연산자: 프로퍼티 접근자 . / 컬렉션 접근자 []

    산술연산자, 관계연산자, 논리연산자


    EL 함수



    Java Bean과
    빈 표준 액션태그


    Java Bean 은 클래스 변수에 대해 각각 게터/세터 메소드를 가진 일반적인 자바 클래스

    JSP 에는 빈 관련 표준 액션이 있습니다. <jsp:useBean> / <jsp:getProperty>


    속성이름(name), 생존범위(scope), 프로퍼티이름(property)


    <jsp:useBean id="person" class="foo.Person" scope="request" />

    먼저 실제 객체를 선언하고 초기화하는 태그


    표준액션

    빈 객체 식별자 person (없으면 만들고, 있으면 대체하고) 

    빈 객체의 클래스타입 선언 

    빈 객체의 속성 생존범위



    <jsp:getProperty name="person" property="name" />

    속성 빈 프로퍼티를 읽어오는 태그


    표준액션

    빈 객체 이름 식별 person

    빈 객체의 프로퍼티 이름 (빈 클래스의 게터/세터메소드 확인)



    <jsp:useBean id="person" class="foo.Person" scope="request" >

    <jsp:setProperty name="person" property="name" value="Fred" />

    </jsp:useBean>


    <jsp:useBean> 몸체는 속성 빈을 찾지 못하고, 

    새로운 빈을 만들었을 때에만 조건부로 실행되는 코드입니다.



    빈 규약

    - 클래스에서 자바 빈을 꺼내기 위한 규약


    1) 반드시 인자가 없는 public 생성자가 있어야 합니다.

    2) 게터메소드, 세터메소드가 있어야 프로퍼티로 인정됩니다.

    3) JSP 표준액션으로는 프로퍼티 타입은 Primitive Type 만 허용합니다.
    (프로퍼티 타입으로 객체를 사용하려면 스크립팅을 통해야 합니다.)



    자바빈 다형성 기법

    Type 참조타입 vs Class 객체타입

    Person 빈

    foo.Employee 객체 인스턴스


    type 은 선언할 것이므로, 추상객체여도 관계없지만

    class 는 인스턴스화 할 것이므로 실제 객체여야 합니다.

    tpe x = new class()


    Person 은 추상클래스, Employee 가 Person을 상속한 구체적인 클래스라면?

    (상속 + 인터페이스 등 다형성 기법 모두) 


    <jsp:useBean id="person" type="foo.Person" class="foo.Employee" scope="page" />

    ... foo.Person person = new foo.Employee();


    type 은 참조 변수 

    class 는 인스턴스 변수



    <jsp:useBean id=
    "person" type="foo.Person" scope="page" />

    ... class가 없는 경우, 자바빈은 먼저 존재해야 합니다.
    그렇지 않으면 InstantiationException 이 발생합니다.

    class 만 있으면 모를까~! type 만 있으면 안됩니다. 


    scope 은 default "page" 입니다.




    속성 param

    param 속성으로 요청 파라미터 값을 빈 프로퍼티에 곧바로 설정할 수 있습니다. 그것도 요청 파라미터 이름을 가지고...


    <jsp:useBean id="person" type="foo.Person" class="foo.Employee">

    <jsp:setProperty name="person" property="name" param="userName" />

    </jsp:useBean>



    HTML 폼 코드를 수정해서-

    입력필드 이름과 프로퍼티이름하고 동일하게 만듭니다.

    param 속성을 명시하지 않아도 컨테이너가 자동적으로 설정합니다.


    <jsp:useBean id="person" type="foo.Person" class="foo.Employee">

    <jsp:setProperty name="person" property="name" param="userName" />

    <jsp:setProperty name="person" property="name" param="empId" />

    //<jsp:setProperty name="person" property="*" />

    </jsp:useBean>


    ... 입력필드도 name, empId

    ... 프로퍼티 이름도 name, empId

    ... //심지어 모든 프로퍼티 설정까지


    <jsp:setProperty> 액션은 String 형 요청 파라미터를 받아,

    이를 int 형으로 변환한 다음

    빈의 해당 프로퍼티 설정자를 호출합니다.


    파싱 (parsing), 변환(conversion) 할 필요가 없어요!





    자바를 사용하지 않고
    자바 객체에 접근할 수 있는 방법

    EL Expression Language 


    프로퍼티가 객체일 경우에는?

    즉, 프로퍼티의 프로퍼티 (내장 프로퍼티)

    Person이 가진 Dog의 name 프로퍼티를 출력해봅시다.


    >> 표현식 언어 EL 이 답입니다!



    <html><body>

    Dog's name is: ${person.dog.name}

    </body></html>


    EL ${person.dog.name}

    Script <%= ((foo.Person) request.getAttribute("person")).getDog().getNmae() %>



    EL의 필요성만 잠깐 살펴보았으니,

    이쯤 끊고! 다음 포스트에서 EL 에 대해 더 자세히 정리해보고자 합니다. 

    댓글

Designed by Tistory.