날아라쩡글이의 블로그입니다.

EL 본문

중앙 HTA (2106기) story/model2(MVC패턴)

EL

날아라쩡글이 2021. 12. 13. 17:26
반응형

속성 과 스코프 

  • 클라이언트에서 웹서버로 요청을 하면 요청객체와 응답객체가 생성된다. 
    • 요청객체에는 요청파라미터와 속성이 존재한다. 
    • 요청파라미터는 name : value의 값을 가지며, form요소에서 submit된 객체, 쿼리스트링을 요청파라미터의 값으로 갖고 getParameter로 조회할 수 있다. 
    • 속성은 이름은 String으로 갖고 이름은 Object로 갖는다. 
    • 그리고 JSP에 전달되어 forward방식으로 실행된다. 
      • 넣는 객체는 RequestDispatcher이다. 
  • JSP로 값이 전달되면 _jspService(HttpServletRequest request, HttpServletResponse response)메소드가 실행된다. 
    • 미리 약속된 객체로 저장된다. 
    • PageCotext
      • Jsp당 각기 1개씩 생성된다. 
      • setAttribute(String name, Object value)의 형태로 속성을 저장할 수 있다. 
      • JSP가 실행되는 동안.
    • HttpSession session
      • 특정클라이언트마다 아이디가 달라진다. 
      • 로그아웃을 하면 파괴되어 사라진다. 
      • 오랫동안 유지된다. 일반적으로 session에는 null값이 존재하지 않는다. 
    • HttpServletRequest
      • 응답시까지만 존재한다. 
      • 메모리부분에 영향이 미치지 않는다 pageContext와 같이 맘대로 속성값을 입력해도된다. 
    • ServletContext 
      • WebApplecation마다 존재하고 웹서버종료시까지 존재한다. 
      • 전체적으로 공유된다. 
      • Httpsession과 servletContext는 오래존재하기 때문에 개발자가 개인적으로 결정할 수 없다. 
        회의로 객체의 종류, 이름이 결정되어야한다. 
  • 스코프 
    • 해당객체의 속성조정시 언제까지 유지되는 가?
    • pageContext (PageScope)
      • 같은 JSP내에서만 속성을 공유할 수 있다. 
    • HttpServletRequest(Request Scope)
      • 응답이 완료될 때까지 
      • 클라이언트의 요청을 처리하는 동안 속성을 공유할 수 있다. 
      • foward, include방식을 사용하는 경우 여러 JSP페이지에서 요청객체에 저장된 속성을 공유할 수 있다. 
      • model2개발방식에서는 model이 획득한 데이터를 View에 전달할 때 주로 사용되는 유효범위이다. 
      • 클라이언트의 요청 처리가 완료되면(응답이 완료되면) 요청객체가 소멸되기 때문에 저장된 속성도 사라진다. 
      • 속성에 대한 관리가 필요없다 (메모리 문제를 신경 쓸 필요없다.)
    • HttpSession(Session Scope)
      • 로그아웃시
      • 특정클라이언트만 사용가능하다
      • 세션객체가 유지되는 동안은 세션객체에 저장된 속성(값, 객체)은 서로 다른 JSP페이지에서도 공유할 수 있다. 
      • 세션객체가 만료되는 순간(로그아웃, 브라우져를 닫는 경우 )저장된 속성도 사라진다. 
      • 세션객체는 브라우저마다 (클라이언트 )마다 하나씩 생성되는 객체이기 떄문에 세션에 속성(값, 객체)으로 저장되는 것은 해당 클라이언트만 사용할 수 있다. 
      • 세션객체 속성으로 저장되는 것들은 "개인적인 정보"만 저장된다. 
    • ServletContext(Application Scope)
      • ServletContext에 저장되는 속성이 가지는 유효범위다. 
      • 웹서버가 실행되는 동안(웹 애플리케이션이 실행되는 동안) ServletContext객체에 저장된 속성(값, 객체)은 모든 JSP, 모든 servlet, 모든 필터, 모든 사용자가 공유할 수 있다
  • 속성관련 
    • 저장
      • void setAttribute(String name, Object value)
    • 조회
      • Object getAttribute(String name)
    • 삭제
      • void removeAttribute(String name)

EL(Expression Language)

  • 표현언어이다. 
  • JSP 2.0부터 JSP에 포함된 기술이다. 
  • EL은 값을 표현할 때 사용되는 스크립트 언어다. 
  • 기능
    • 요청파라미터 값, 초기화파라미터값의 표현
    • pageContext, HttpServletRequest, HttpSession, Application객체의 속성값을 표현한다. 
    • 요청헤더정보, 쿠키값을 표현한다. 
    • 사칙연산, 비교연산, 논리연산자, 기타연산자를 제공한다. 
      • 기타연산자는 empty라는 걸 주는데 이것이 유용하다. 
    • 메소드 호출기능을 제공한다. 
    • ${EL표현식}
      • 태그와 태그사이
      • img태그의 속성사이
      • value에 사용
      • 쿼리스트링(jap?no=${}&cateno=${})
      • id 등 어디에서든 사용이 가능하다.
    • 이름이 무엇인지 알고 있어야한다.
    • 속성 값의 타입이 무엇인지 알고 있어야한다. 
    • 기본자료형 String값
      • ${속성명 } : 기본자료형값 혹은 String값이 조회됨 
    • 기본자료형과 String을 요소로하는 배열
      • ${속성명[인덱스] } 

        ${속성명 } : 배열객체가 조회됨
        ${속성명[인덱스] } :배열객체에서 지정된 인덱스번째의 값이 조회됨
    • 객체타입(VO객체, DTO객체)의 값을 요청객체의 속성으로 지정하는 경우 
      • ${속성명.프로퍼티명 } 
        ${속성명["프로퍼티명"] } 
        프로퍼티명은 실제로는 getter메소드의 이름이다. 
        getter메소드가 존재하지 않으면 에러가 난다.

        ${속성명 } : User객체가 조회됨
        ${속성명.변수명 } :User객체에 지정된 변수명으로 저장된 값이 조회됨
    • Map타입의 값을 요청객체의 속성을 지정한 경우
      • ${속성명.key} 
        ${속성명["key"] } 
        ${속성명['key'] }

        ${속성명 } : Map객체가 조회됨
        ${속성명["Key"] :Map객체에 지정된 Key로 저장된 값이 조회됨
    • VO객체와 DTO객체를 요소로하는 List타입의 값(배열과 동일시 하면된다. )
      • ${속성명[인덱스].프로퍼티명} 
        ${속성명[인덱스]["프로퍼티명"] }
         
        ${속성명 } : List객체가 조회됨
        ${속성명[인덱스] } : List객체의 지정된 인덱스에 저장된 VO객체나 DTO객체가 조회됨
        ${속성명[인덱스].프로퍼티명 } : List객체의 지정된 인덱스에 저장된 VO객체나 DTO객체의 멤버변수에 저장된 값이 조회됨
  • 값의 형태가 다양하다. 
  • 표현하려면  Controller에서 JSP로 내부이동해야 출력이 가능하다.
  • EL은 ${속성명 }으로 표기하면 PageContext, HttpServletRequest, HttpSession, Application순으로 탐색한다. 
  • 이렇게 참조하고 있다. 
    • PageContext
    • Request
    • Session
    • Application
    • 이순으로 찾고 발견되면 더이상 찾지 않기 때문에 같은 이름으로 저장해서는 안된다. 
  • 어딘가에서 찾는지 정하고 싶다면 ${스코프명.속성명}으로 직접적으로 작성할 수 있지만 이렇게 작성하는 것을 개발자들은 혐호한다. 
    객체 4개중에서 검색하는 것은 실행속도에 아무런 영향을 미치지 않기 때문에 속성명만 잘 작성하면 검색할 수 있다. 
  • ${menu}
    • pageContext에서 menu를 찾는다.
    • pageContext에서 menu가 검색된다. 그리고 표현한다. 
    • HttpServletRequest, HttpSession, ServletContext에서는 검색하지 않는다. 
  • ${u1.name}
    • pageContext에서 u1을 찾는다. 검색되지 않는다. 
    • HttpServletRequest에서 u1을 찾는다.
    • HttpServletRequest에서 u1이 검색된다.
    • HttpSession, ServletContext에서는 검색하지 않는다. 
  • ${loginedUser.id}
    • pageContext에서 loginedUser을 검색한다 . 검색되지 않는다. 
    • HttpServletRequest에서 loginedUser을 찾는다. 검색되지 않는다.
    • HttpSession에서 loginedUser을 찾는다. 
    • HttpSession에서 loginedUser가 검색된다. 표현한다. 
    • ServletContext는 검색하지 않는다. 
  • EL 표현식으로 속성을 검색하면 pageContext -> HttpServletRequest -> HttpSession -> ServletContext순으로 EL표현식에서 지정한 속성을 검색한다. 
  • 각 객체를 순서대로 검색하는 도중, EL표현식에 해당하는 속성이 발견되면 그 속성값을 표현하고, 검색순위상 뒤에 나아있는 객체에서는 검색작업을 수행하지 않는다. 
    • 순서대로 검색하니까 같은 속성명으로 담는 행위를 하지 않으면 된다. 
  • 어느 속성으로 넣는것이든 상관없다. 
    • 배열, Map, 속성에 넣으면 표현방식에만 차이가 있을 뿐이다. 
  • 사칙연산
  • 구분 연산 연산자
    사칙연산 덧셈 +
      뺄셈 -
      곳셈 *
      나눗셈 div
      나머지 mod
  • 비교연산
  • 구분 연산 연산자
    비교연산 크다 gt
      크거나 같다 ge
      작다 lt
      작거나 같다 le
      같다  eq
      같지 않다 ne
  • 논리연산
  • 구분 연산 연산자
    논리연산 논리곱 and
      논리합 or
      논리부정 not
  • 기타연산
    구분 연산 연산자
    삼항연산 삼항연산 ? 값1:값2
    기타연산 기타 empty
  • 기타연산의 경우 empty는 isempty와 동일한 값을 의미한다. 
    • empty연산자가 true를 반환하는 경우 
      • 값이 null인 경우 
      • ""빈문자열인 경우 
      • 배열이나 콜렉션의 길이가 0인경우 
        • null은 아니지만 사이즈가 0인 경우
    • 비어있는 Map인 경우 
  • 사칙연산으로 계산하는 경우 getter메소드에서 작성하는 편이 좋다. 

EL의 내장객체 

  • EL은 JSP의 요청파라미터, 속성, 스코프, 요청헤더정보, 초기화 파라미터 정보에 접근할 수 있도록 해당 값을 제공하는 내장객체를 가지고 있다. 
  • ${Param.파라미터명 } 
    • request.getParameter("파라미터명"); 과 동일하다.
반응형

'중앙 HTA (2106기) story > model2(MVC패턴)' 카테고리의 다른 글

JSTL(fmt태그)  (0) 2021.12.15
JSTL(Core태그)  (0) 2021.12.14
URL과 URI의 차이  (0) 2021.12.13
MVC패턴을 웹 개발방식에 사용하는 model2개발방식  (0) 2021.12.10
Comments