날아라쩡글이의 블로그입니다.
EL 본문
728x90
반응형
속성 과 스코프
- 클라이언트에서 웹서버로 요청을 하면 요청객체와 응답객체가 생성된다.
- 요청객체에는 요청파라미터와 속성이 존재한다.
- 요청파라미터는 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로 저장된 값이 조회됨
- ${속성명.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인 경우
- empty연산자가 true를 반환하는 경우
- 사칙연산으로 계산하는 경우 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