EL&JSTL

천소진·2022년 12월 15일
0

Study

목록 보기
25/29

EL (Expression Language) : 표현 언어

: 변수의 값을 출력할 때 사용하는 스크립트 언어
: 4가지 영역에 저장된 값을 출력할 때 사용
: 사용법이 간결하고 예외와 형변환에 관대

기능

1) JSP 내장 객체의 영역에 담긴 속성 사용가능.
2) 산술, 비교, 논리 연산 가능
3) 자바클래스에 정의된 메소드 호출 가능
4) 표현 언어만의 객체를 통해 JSP와 동일한 기능 수행.

1. 기본 표현 ${속성}

  • 속성은 역억에 저장된 속성의 이름.
  • JSP에서 생성한 변수에 접근하려면 반드시 영역에 저장한 후에 사용.
    ex) request영역에 저장한 경우
    ${requestScope.속성이름}
  • HTML태그나 자바스크립트, CSS, 액션태그, JSTL의 속성값등 어디에서든 사용가능.
  • but JSP 스트립트요소(선언부, 표현식, 스크립틀릿)에는 사용 불가

2. 객체 표현 방식 ${param.속성이름} = ${param["속성이름"]} = ${param['속성이름']}
: 대괄호 사용시에는 " " 와 ' ' 모두 사용가능
: 속성이름에 특수기호나 한글이 포함된 경우에는 대괄호만 사용가능.

3. EL의 내장객체 : EL 표현식에서만 사용가능.

  • 영역객체
    1) pageScope : page 영역에 저장된 속성값을 읽어옴.
    2) requestScope : request 영역에 저장된 속성값을 읽어옴.
    3) sessionScope : session 영역에 저장된 속성값을 읽어옴.
    4) applicationScope : appplication영역에 저장된 속성값을 읽어옴.

  • 요청객체
    5) param : form값을 처리하기 위한 내장객체 = request.getParameter("매개변수이름");
    6) paramValues : form 값중 여러개의 값이 입력되는 checkbox의 입력값을 받을 때 사용. = request.getParameterValues("매개변수이름");

  • 헤더값
    7) header : 요청 헤더명의 정보는 단일값으로
    8) headerValues : 요청 헤더명의 정보를 배열로

  • 쿠키값
    9) cookies : 쿠키이름값 반환.

  • JSP내용
    10) pageContext : PageContext 객체를 참조할 때

  • 초기매개변수
    11) initParam : web.xml에 설정한 컨텍스트 초기화 매개변수를 읽을 때

4. 연산자

  • 할당 연산자 :변수에 값을 할당하면서 동시에 출력.
    ==> 할당만 하고싶다면 ; 과 ' '를 함께 사용.

ex)

${numberVar= 10} → 할당과 동시에 출력.
${numberVar= 10;''} → 할당만 되고 출력되지 않음.
  • 산술연산자
    : +, -, *, ( / | div), (% | mod)

  • 비교연산자
    : > gt , >= ge , < lt, <= le, == eq, != ne

  • 논리연산자
    : && and, || or, ! not

  • empty 연사자
    : 값이 없을때 true를 반환하는 연산자
    : null, 빈문자열, 길이가 0인 배열, size가 0인 컬렉션 등에 사용.

  • 삼항연산자
    : ${조건? "true 일때 선택" : "false일때 선택"}

  • null 연산
    : 자바에서는 null은 연산이 불가해서 NullPointException이 발생하지만 EL에서는 0으로 인식되어 연산이 가능하며 예외가 발생하지 않음.


JSTL (Java Standard Tag Library)

:JSP의 표준 태그 라이브러리
: 스크립틀릿을 사용하지 않고도 제어문, 반복문등을 사용할 수 있음.
: JSTL을 사용하려는 JSP 파일에서는 taglib 지시어를 추가해야함.(접두어,URI 사용)
==><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
==>사용설정
: https://mvnrepository.com/artifact/javax.servlet/jstl/1.2 에서 [jar]클릭해서 jstl-1.2.jar 파일 다운로드 → WEB-INF아래 lib 에 복사.

태그의 종류

1. Core태그 (c)

: 변수 선언, 조건문, 반복문, URL처리

  • set
    => <c:set var= "변수이름" value= "값" scope= "영역"/> 또는
    <c:set var = "변수이름" scope= "영역"> value 속성값 </c:set>
    : EL에서 사용할 변수나 자바빈즈를 생성
    : JSP의 setAttribute()와 같은 역할.
    : 자바빈즈(setter 와 getter를 갖는 클래스)나 컬렉션을 생성할 때는 target과 property 속성 사용.
    <c:set var="변수명" value="저장할 객체 혹은 컬렉션" scope="영역" />
    <c:set target="var로 설정한 변수명" property="객체의 속성명" value="속성값" />

ex)

<!-- taglib c를 이용해서 변수 directVar에 100을 저장 -->
<c:set var= "directVar" value= "100"/>

<!-- taglib c를 이용해서 변수 elVar에 directVar값을 5로 나눈나머지를 값으로 저장 -->
<c:set var = "elVar" value= "${directVar mod 5}"/>

<!-- taglib c를 이용해서 변수 expVar에 현재 날짜를 값으로 저장 -->
<c:set var="expVar" value="<%=new Date() %>" />
<c:set var="betweenVar">태그사이에 변수값 설정 가능</c:set>
  • remove
    <c:remove var= "변수이름" scope= "영역"/>
    : <c:set>태그로 설정할 변수를 제거할때 사용.
    : JSP의 removeAttribute()와 같은 역할.
    ex)
<!--세션 영역에서 삭제하기-->
<c:remove var= "scopeValue" scope= "session"/>
<!--전체 영역에서 삭제하기-->
<c:remove var= "scopeValue"/>
  • if
    <c:if test= "조건" var = "변수이름" scope= "영역"> 조건이 true일 때 출력할 문장</c:if>
    : test 속석의 조건식의 결과가 var에 저장.
    : test 에 EL이 아닌 일반 값이 오면 무조건 false ("true"가 오는 경우 제외.)
    : EL을 통해 조건식을 쓸때 공백이 삽입되면 무조건 false (공백도 값으로 처리하기 때문.)

ex)

<c:if test= "${number mod 2 eq 0 }" var="result">   <!-- result가  true여야만 결과 출력. -->
		${number}은 짝수입니다.<br/>
</c:if>
<c:if test ="${not result}">  <!-- test에는 반드시 EL로작성 -->
		${number}은 홀수입니다.
</c:if>
  • choose, when, otherwise
    => <c:choose>
    <c:when test="조건1">조건1을 만족하는 경우</c:when> if
    <c:when test="조건2">조건2을 만족하는 경우</c:when> else if
    <c:otherwise>아무 조건도 만족하지 않는 경우</c:otherwise> else
    </c:choose>
    : 다중조건을 통해 판단해야 하는경우에 사용.
    : 하위 태그로 <c:when> , <c:otherwise>를 함께 사용.
    : <c:when>의 조건식은 <c:if>의 test와 동일하게 작성하고 작성 조건에 모두 해당되지 않는경우 <c:otherwise>사용.

ex)

<c:set var= "num" value= "100"/>
<c:choose>
	<c:when test="${num mod 2 eq 0}">
		${num}은 짝수입니다.
	</c:when>
	<c:otherwise>
		${num}은 홀수입니다.
	</c:otherwise>
</c:choose>
  • forEach
    : 자바의 for문과 마찬가지로 두가지 형태로 쓰임
    => 일반 for 문 : <c:forEach var = "변수이름" begin= "시작값" end= "끝값" step= "증가값"/>
    => 순회 for 문 : <c:forEach var = "변수이름" items= "컬렉션 or배열"/>

ex)

<!--일반 for 형태 -->
<c:forEach begin= "1" end= "3" step= "1" var= "i">
<p>반복 ${i}</p>
</c:forEach>

<!--Map계열 -->
<%
Map<String, Person> map = new HashMap<String, Person>();
map.put("1위",new Person("BTS",21));
map.put("2위",new Person("아이유",26));
map.put("3위",new Person("빅뱅",30));
%>
<c:set var= "ranking" value= "<%=map %>"/>
<c:forEach items= "${ranking}" var= "rank">
      <ul>
	<li>Key= ${rank.key}<br/>
    	value= 이름 : ${rank.value.name }, 나이 : ${rank.value.age }
	</li>
      </ul>
</c:forEach>
  • forTokens
    : 구분자로 분리된 토큰처리 할 때 사용. = StringTokenizer
    => <c:forTokens var="변수" items="문자열" delims="구분자"/>

  • import
    : <jsp:include>와 같이 외부 파일을 현재 위치에 삽입.
    : 같은 웹앱에 있지 않은 외부 페이지도 삽입가능.
    => <c:import var="변수" url="페이지 경로 or URL" scope= "영역"/>

  • redirect
    : 지정한 경로로 이동 = sendRedirect()
    => <c:redirect url="이동할 경로 or URL"/>

  • url
    : 경로 설정.
    => <c:url var="변수" value="설정한 경로" scope= "영역"/>

  • out
    : 출력
    => <c:out value="출력할 변수" default= "기본값" escapeXml= "특수문자 처리유무"/>

  • catch
    : 예외처리
    => <c:catch var="변수"> 실행코드 </c:catch>

2. Formatting태그 (fmt)

: 숫자, 날짜, 시간 지정

3. XML 태그 (x)

: XML 파싱

4. Function 태그 (fn)

: 컬렉션, 문자열 처리

5. SQL 태그 (sql)

: DB연결및 쿼리 실행

0개의 댓글