웹/백엔드
JSP의 JSTL & EL - (부스트코스)
csmoon1010
2021. 4. 5. 23:51
1. EL(Expression Language, 표현 언어)
값을 표현하는 데 사용되는 스크립트 언어 (JSP의 기본 문법 보완 - Java 코드의 간단화 for 협업)
1) 기능
- JSP의 스코프(scope)에 맞는 속성 사용 - Page, Request, Session, Application
- 집합 객체에 대한 접근 방법 제공
- 수치 연산, 관계 연산, 논리 연산자 제공
- 자바 클래스 메소드 호출 기능 제공
- 표현언어만의 기본 객체 제공
2) 기본 객체
3) 표현 방법
(1) 기본 표현
- ${expr}
- 스크립트 요소(스크립트릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용 가능
- ex. <b>${sessionScope.member.id}</b>님 환영합니다.
(2) 객체 접근
- ${<표현1>.<표현2>}
- 표현 1이나 표현 2가 null 인 경우 : null을 반환
- 표현1이 Map일 경우 : 표현2를 key로한 값을 반환
- 표현1이 List나 배열인 경우
- 표현2가 정수 : 해당 정수 번째 index에 해당하는 값을 반환
- 표현2가 정수X : 오류 발생
- 표현1이 객체인 경우 : 표현2에 해당하는 getter메소드를 호출한 결과를 반환
4) 연산자
(1) 수치 연산자
- + : 덧셈
- - : 뺄셈
- * : 곱셈
- / 또는 div : 나눗셈
- % 또는 mod : 나머지
- 숫자가 아닌 객체와 수치 연산자를 사용할 경우 객체를 숫자 값으로 변환 후 연산자를 수행 : ${"10"+1} → ${10+1}
- 숫자로 변환할 수 없는 객체와 수치 연산자를 함께 사용하면 에러를 발생 : ${"열"+1} → 에러
- 수치 연산자에서 사용되는 객체가 null이면 0으로 처리 : ${null + 1} → ${0+1}
(2) 비교 연산자
- == 또는 eq
- != 또는 ne
- < 또는 lt
- > 또는 gt
- <= 또는 le
- >= 또는 ge
- 문자열 비교: ${str == '값'} -- str.compareTo("값") == 0 과 동일
(3) empty 연산자
- empty <값>
- <값>이 null인 경우 : true 반환
- <값>이 ""인 경우 : true 반환
- <값>이 길이가 0인 배열인 경우 : true 반환
- <값>이 빈 Map인 경우 : true 반환
- <값>이 빈 Collection인 경우 : true 반환
- 그 외 : false 반환
(4) 비교 선택 연산자
- <수식> ? <값1> : <값2>
- <수식>의 결과값이 true인 경우 : <값1> 반환
- <수식>의 결과값이 false인 경우 : <값2> 반환
(5) 연산자 우선순위
① [] .
② ()
③ 부정, null 처리 : - not ! empty
④ 수치 연산 : * / div % mod
⑤ 수치 연산 : + -
⑥ 비교 연산 : < > <= >= lt gt le ge
⑦ 비교 연산 : == != eq ne
⑧ 논리 연산 : && and
⑨ 논리 연산 : || or
⑩ 비교 선택 여산 : ? :
5) ESTL 비활성화
<%@ page isELIgnored = "true" %>
- default는 "false"값
2. JSTL(JSP Standard Tag Library)
JSP 페이지에서 조건문 처리, 반복문 처리 등(로직)을 html tag 형태로 작성할 수 있게 도와주는 라이브러리
- 유지보수의 용이함 : 프론트 개발자의 편의
- JSP의 목적이 "결과를 출력만한다"이므로 적절한 선택
1) 사용 방법
http://tomcat.apache.org/download-taglibs.cgi
위 사이트에서 3가지 jar 파일 다운로드 후 복사
2) 태그 종류
(1) 변수 지원 - set, remove
- 설정 : <c:set var="EL변수명" scope="변수값 저장 영역(page,request,session,application) value="변수값"/>
- <c:set var="varName" scope="session" value="someValue"/>
- <c:set var="varName" scope="session">someValue</c:set>
- 제거 : <c:set var="EL변수명" scope="변수값 저장 영역(page,request,session,application) value="변수값"/>
- <c:remove var="varName" scope="request"/>
- 프로퍼티 설정 : <c:set target="${변수객체명}" property="프로퍼티 이름" value="새로 지정할 값"/>
- <c:set target="${some}" property="propertyName" value="anyValue"/>
- some객체가 자바빈 : some.setPropertyName(anyvalue) ____ property의 첫 문자가 대문자로 바꿔 setter 형성하는 규칙有
- some객체가 맵(map) : some.put(propertyName, anyValue);
(2) 흐름제어 태그 - if, choose, forEach, import, redirect
- if : <c:if test="조건">
- test의 조건이 true이면 처리. else는 제공하지 않음
- <c:if test="${param.name=='bk'}"> 수행문 </c:if>
- "조건"은 EL표기법을 활용해 나타냄 __ ${expr}
- choose : <c:choose> <c:when test="조건">...</c:when>...<c:otherwhise>...</c:otherwise> </c:choose>
- 여러 개의 조건 처리
- "조건"은 EL표기법을 활용
<c:choose>
<c:when test="${score >= 90 }">
A학점입니다.
</c:when>
<c:when test="${score >= 80 }">
B학점입니다.
</c:when>
<c:when test="${score >= 70 }">
C학점입니다.
</c:when>
<c:otherwise>
D학점입니다.
</c:otherwise>
</c:choose>
- forEach : <c:forEach var="변수" items="아이템" [begin="시작번호] [end="끝번호"]> "수행문" </c:forEach>
- "items" : 배열 및 Collection에 저장된 요소를 차례대로 처리
- "수행문"은 EL표기법 ${변수}를 활용
- begin, end는 생략 가능 (처음부터 끝까지)
- import : <c:import url="URL" charEncoding="캐릭터인코딩" var="변수명" scope="범위"> <c:param name="파라미터이름" value="파라미터값"/> </c:import>
- 특정 URL에 연결하여 결과를 지정한 변수에 저장
- url : 결과를 읽어올 URL
- charEncoding : 읽어온 결과의 인코딩 형식
- scope : 변수 저장 영역
- <c:param> : URL에 연결할 때 전송할 파라미터 입력
- redirect : <c:redirect url="URL"> <c:param name="파라미터이름" value="파라미터값"/> </c:redirect>
- 특정 URL로 리다이렉트 = response.sendRedirect()
- <c:param> : 리다이렉트한 페이지에 전달할 파라미터
<c:redirect url="/ifTag.jsp">
<c:param name="name" value="bk"/>
</c:redirect>
(3) 기타태그 - out
- out : <c:out value="value" escapeXml="{true|false}" default="defaultValue" />
- JspWriter에 데이터를 출력함
- value : 출력할 값. 대부분의 경우 String 활용. 만약 java.io.Reader의 한 종류라면 Reader에서 데이터를 읽어옴
- escapeXml : true인 경우 문자 변환 (태그로 인식X)
< (<) > (>) & (&) ' (') " (") - default : value 속성에서 지정한 값이 존재하지 않는 경우
- ++ 커스텀 태그