ProgrammingLang/JSP

[JSP] 5. EL(Expression Language) 과 JSTL(JSP Standard Tag Library)

jinkwon.kim 2018. 7. 24. 00:13
728x90
반응형

[JSP] 5. EL(Expression Language) 과 JSTL(JSP Standard Tag Library)



JSP 정리 목록

이전 글([JSP] 4. jsp의 scope 정리)

다음 글([JSP] 6. Maven 이란?)


1. EL(Expression Language)

  - JSP에서 값을 표현하는데 사용되는 스크립트 언어이다.

  - JSP에서의 기본 문법을 보완하는 역활을 한다.


2. EL 문법

  - ${expr} 

  - expr은 jsp에서 사용된는 변수가 될 수 있고 수식이 들어갈 수 있다. 


3. 사용 가능 위치

  - jstl같은 코드내부에서 사용가능 

    <jsp:include page="/module/${skin.id}/header.jsp" flush="true" />

  - 태그 사이에서 사용 가능 

<b>${sessionScope.member.id}</b> 환영.


4. expr에서 사용가능 한 것들

  1) 사용가능 한 리스트 

    A JSP의 스코프(scope)의 속성을 쉽게 출력 할수 있는 방법 제공

    B 집합 객체(Collection 등...)에 속해있는 객체 대해 쉽거 출력 할 수 있는 방법 제공

    C 수치 연산, 비교 연산자, 논리 연산자 제공

    D 자바 클래스 메소스 호출 기능 제공

    E 표현언어만의 기본 객체 제공


  1-A) JSP의 스코프(scope)의 속성을 쉽게 출력 할수 있는 방법 제공

    - requset Scope에서 attribute값을 사용하려면 

      >java코드의 경우

        request.getAttribute("name")

      >EL의 경우

        ${requestScope.name}


  1-B) 집합 객체(Collection 등...)에 속해있는 객체 대해 쉽거 출력 할 수 있는 방법 제

     - 문법 : ${<표현1>.<표현2>} 여기서 표현1은 리스트일경우 표현2는 리스트 번호가 된다.


  1-C) 수치 연산, 관계연산, 논리 연산자 제공   

     (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) 논리 연산자

 && 또는 and

 || 또는 or

 ! 또는 not


  1-D) 자바 클래스 메소스 호출 기능 제공

    - 클래스에서 getName함수로 호출 하는 값을 EL으로 간현하게 사용할수 잆다. 

    - ${student.name}


  1-E) 표현언어만의 기본 객체 제공

    - 다음 기본 객체는 EL에서 바로사용 가능한 객체들이다.


5. EL 예제 코드(출처 : edwith.org)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    pageContext.setAttribute("p1", "page scope value");
    request.setAttribute("r1", "request scope value");
    session.setAttribute("s1", "session scope value");
    application.setAttribute("a1", "application scope value");
%>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
pageContext.getAttribute("p1") : ${pageScope.p1 }<br>
request.getAttribute("r1") : ${requestScope.r1 }<br>
session.getAttribute("s1") : ${sessionScope.s1 }<br>
application.getAttribute("a1") : ${applicationScope.a1 }<br>
<br><br>
pageContext.getAttribute("p1") : ${p1 }<br>
request.getAttribute("r1") : ${r1 }<br>
session.getAttribute("s1") : ${s1 }<br>
application.getAttribute("a1") : ${a1 }<br>

</body>
</html>

JSTL(JSP Standard Tag Library)



1. JSTL(JSP Standard Tag Libray)

  - jsp 페이지에서 조거문 처리, 반복문 처리등을 html tag 형태로 작성할수 있게 도와준다. 

  - EL과의 차이점은 EL은 단순히 변수를 표현해 주는것이므로 다향한 형태로 jsp를 사용할수 없다.

  - JSTL의 상용 목적은 스크릿을 대체 하기 위함이다.

  - JSTL은 커스텀 Tag이다.

  

2. JSTL 사용법

  - JSTL은 추가 적인 jar 파일이 필요하다

  - http://tomcat.apache.org/download-taglibs.cgi  여기에서 다음의 파일 3개의 받은 후 WEB-INF/lib/ 에 복사하면된다



3. JSTL 라이브러리 종류 및 기능

   (출처: http://youssol.tistory.com/8 [초인, 초월이네 이야기])

라이브러리 

 하위 기능

접두어

관련 URI 

 코어

 변수 지원, 흐름 제어, URL 처리

 c

 http://java.sun.com/jsp/jstl/core

 XML

 XML 코어, 흐름제어, XML 변환

 x

 http://java.sun.com/jsp/jstl/xml 

 국제화

 지역, 메세지 형식, 숫자 및 날짜 형식

 fmt

 http://java.sun.com/jsp/jstl/fmt

 데이터베이스

 SQL

 sql

 http://java.sun.com/jsp/jstl/sql

 함수

 콜렉션 처리, String 처리

 

 http://java.sun.com/jsp/jstl/functions


4. Core(코어) 라이브러리에서 사용 할 수 있는 기능


5. JSTL 상용 하기 위한 설정 

  - JSTL을 사용하기 위해서는 새로운 지시자를 만들어아햔다

  - Core라이브러리의 접수어는 c이므로 prefix를 c로 해준다.

  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


6. JSTL 태그 사용법

 ==================================== 변수 지원 ====================================

  1) set 

      <c:set var="varnname" scope="request" value="someValue"/>

                               또는

      <c:set var="varnname" scope="request">

some value

 </c:set>

 - scope : 변수를 저장할 영역


  2) remove
      <c:remove var="varname" scope="request"/>
     - scope : 변수가 저장된 영역

 ==================================== 흐름 제어 ====================================
  3) if 
      <c:if test="조건">
...
...  
 </c:if>

  4) choose
      <c:choose>
   <c:when test="조건1">
      ....
   </c:when>
   <c:when test="조건2">
 ....
   </c:when>

        <c:otherwise>

 ...

   </c:otherwise>

</c:choose>


  5) forEach

    <c:forEach var="변수" items="아이템(배열또는 맵이 들어간다)" [begin="시작번호"] [end="끝번호"]>

      ${변수}

    </c:forEach>


  6) forToken

   <c:forTokens items="123-456-789" delims="-" var="sel">

       ${sel}

   </c:forTokens>

   - items : 자를 문자열 

   - delims : 구분 문자열

   - val : 자른 문자열이 저장될 변수


 ==================================== url 처리  ====================================

  7) import 

   <c:import url="URL" charEncoding="캐릭터인코딩" var="변수명" scope="범위">

     <c:param name="파라메터이름" value="파라메터값"/>

   </c:import>

   - URL : 결과를 읽어올 URL

   - charEncoding : 읽어온 결과를 저장할때 사용하는 캐릭터 인코딩

   - var : 읽어온 결과를 저장할 변수명

   - scope : 변수를 저장할 영역

   - <c:param> 태그는 url 속성에 지정한 사이트에 연결 할때 전송할 파라메터 정보 


  8) redirect

   <c:redirect url="redirect할 URL">

<c:param name="파라메터이름" value="파라메터값"/>

   </c:redirect>

   - url : redirection 할 주소

   - <c:param> 태그는 url 속성에 지정한 사이트에 연결 할때 전송할 파라메터 정보 


  9) ur

   <c:url var="URL 저장 변수" value="URL" scope="변수 공유 범위" />

<c:param name="keyword" value="${searchTerm}"/> <c:param name="month" value="02/2003"/>
</c:url>

   - var : 생성한 URL을저 장할 변수명

   - value : 생성할 URL

   - scope : 변수를 저장할 영역

   - <c:param> 태그는 url 속성에 지정한 사이트에 연결 할때 전송할 파라메터 정보 


 ==================================== 기타 태그 ====================================

  10) catch

    <c:catch var ="catchException">

       <% int x = 5/0;%>

     </c:catch>


     <c:if test = "${catchException != null}">

      <p>The exception is : ${catchException} <br />

      There is an exception: ${catchException.message}</p>

     </c:if>

    - var : 예외처리 결과가 저장될 변수명


  11) out

    <c:out value="value" escapeXml="{true|fale|" default="default value"/>

    - value : JspWrite에 출력할 값을 나타낸다. 일반적으로 value속성의 값을 String과 같은 문자열이다. 만약 value의 값이 java.io.Reader의 한 종류라면 out 태그는 Reader로 부터 데이터를 읽어와서 JspWrite에 값을 출력한다.

    - escapeXml : true일 경우 아래 와같이 문자를 변경한다.

 문자

변경될 형태 

 < 

 &lt; 

 > 

 &gt; 

 &

 &amp; 

 '

 &#039;

 "

 &#034;


    - default : value 속성에 지정한 값이 존재하지 않을때 상용될 값을 지정한다.



JSP 정리 목록

이전 글([JSP] 4. jsp의 scope 정리)

다음 글([JSP] 6. Maven 이란?)

728x90
반응형

'ProgrammingLang > JSP' 카테고리의 다른 글

[JSP] 7. Maven에서 JDBC를 이용한 DB연결 방법  (0) 2018.08.12
[JSP] 6. Maven 이란?  (0) 2018.08.09
[JSP] 4. jsp의 scope 정리  (0) 2018.06.24
[JSP] 3. redirect 와 forward  (0) 2018.06.24
[JSP] 2. jsp 기본 문법  (0) 2018.06.23