프로그래밍/JSP

JSP 7일차 - EL문과 JSTL

윤도ri 2022. 2. 5. 18:15

 우리가 HTML 내부에 자바코드를 사용할때 스크립트 태그를 하나하나 다 작성하는 불편함을 감수해야 했었다. 이 불편함을 해결해줄 선배님들 어디있나~ 하고 봤더니 이미 만들어진 라이브러리가 있다. 그게 바로 EL문이다. 지금부터 EL문에 대해 자세히 알아보자.

 

>EL문과 JSTL 

- 라이브러리로 자바 구문을 만들어 놓고 필요할 때마다 꺼내 쓰면 되기 때문에 유지보수에 편하다.

- JSP페이지 내에서 자바코드와 HTML코드(태그형태)가 섞여 있으면 가독성이 떨어진다. 그러나 EL문과 JSTL문을 같이 

사용하면 HTML과 태그형태로만 구성된 소스코드를 볼 수 있다. (가독성 향상)

 

1.EL문(Expression Language)

- 값을 간결하고 간편하게 출력할 수 있도록 해주는 언어(값을 출력, 표현만 해준다.)

                  JSP                                 EL 

              <%=name>                     ${name}

 

[연산자의 종류]

/         : div(* division 나누기)  ${10/3} == ${10 div 3}

%        : mod(* modulo 나머지)

&&      : and

||         : or
!         : not

>        : gt(greater than)

<        : lt(less than)

>=      : ge(greater or equal)

<=      : le(less or equal)

==      : eq(equals)

!=       : ne(not equals)

empty  : 뒤에 올 값이 비어있으면 true/ 아니라면 false  (not empty ==  !empty )

           ex) ${ empty data } : data의 값이 없으면 true  

 

*empty 응용하는 법

우리가 로그인한 유저의 정보를 DB에서 찾아서 사용자에게 돌려줄때 보통 조건식을 사용하여 null이 아니냐 라고 물어보게 된다.  if (  session.getAttribute("loginUser")!= null  ) 이라는 식을 사용해서 말이다. 매번 이렇게 세션에 담아서 getAttribute를 쓰는것이 코드도 길어지고 불편하다. 이때 empty를 사용하면 훨씬 편리해질 수 있다. ${not empty loginUser} 이 식을 쓰면 위와 같은 말인데 더 가독성 좋고 편하게 사용할 수 있다. 

 

이제부턴 직접 사용을 해보자. 한 변수에 값을 넣고 그걸 출력해보자. 

String data = "Hello"; 

${data} 라고 하면 값이 나올까? 답은 아니오이다.  EL문에서 data를 넣었을때는 이것이 변수명을 의미하는 것이 아니라 

setAttribute()할때의 key값을 찾는 것이다. 그래서 값이 안나오는 것이다. 그러므로 출력시 pageContext를 사용하고 

값을 전송시에는 session또는 request를 사용해주어야 한다. 

 

pageContext 는 JSP안의 내장객체이다.

<결론>

1.setAttribute()  할때의 key값을 찾는다는 사실을 명심할 것

2.우선순위: pageContext -> request -> session -> application

참고:https://victorydntmd.tistory.com/155(객체범위(scope)에 관련된 내용)

 

 위에서는 EL문을 이용해서 간단하게 값을 출력하는 법을 배웠다. 그런데 여기서 우리는 조금 더 고민해볼 필요가 있다. form의 경우에 제출후 값을 가져오게 될때 우리는 getParameter를 사용하게 된다. 그렇다면 그 값은 EL문을 사용해서 출력하기 어려운것일까? 아니다. 변수명 앞에 param.을 붙여주면 파라미터값을 가져오게 된다. 

form 생성
form의 파라미터를 이용한 다양한 출력 방법과 쿠키출력방법까지 알아보았다.

 

2.JSTL(JSP Standard Tag Library)

- JSP 표준 태그 라이브러리(여러 프로그램이 공통으로 사용하는 코드를 모아놓은 집합)의 약어

- 연산이나 조건문, 반복문을 편하게 처리할 수 있으며, JSP 페이지 내에서 자바코드를 사용하지 않고 로직을 구현할 수 있도록 하는 효과적인 방법을 제공한다. 

 if 문을 사용할때를 비교해보자. 

   [  case1.JSP  ]                                      [  case2.JSTL  ]

<%                                  

if(조건식){                                            <c: if test="조건식"> 

%>                                                            <p>결과</p>

      <p>결과</p>                                </c:if>

<%

}

%>

 JSTL을 사용할때가 코드가 더 깔끔하고 자바코드를 사용하지 않아서 가독성이 더 좋아진 것을 볼 수 있다. JSTL과 EL문을 적절하게 함께 잘 사용하면 위에서 설명한 바와 같이 유지보수가 편리해질 수 있다. 

 

 

>라이브러리 다운로드

archive.apache.org/dist/jakarta/taglibs/standard/binaries/ > jakarta-taglibs-standard-1.1.2zip 다운로드 >

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> (사용할 페이지 맨 위에 작성하기 ) 

[ core태그 ]

<c:set> 태그이름 태그설명 사용법 자바와의 차이

태그이름 태그설명
<c:set> 변수의 선언
<c:out> 변수의 출력
<c:if> 조건문(else는 없다)
<c:choose> switch문과 비슷하다
<c:when> case문(else if)
<c:otherwise> default(else)
<c:forEach> 반복문 

 

<c:set> Tag

- JSP의 setAttribute()와 같은 역할

<c:set var="key값(변수명)" 

        value="변수에 넣을 값"

        property="자바빈 객체 or Map 객체 값을 설정할 프로퍼티 명"

        scope="변수 세팅 범위" />

 

EL문에서는 값을 찾을때 setAttribute()에서의 key값을 찾는다. 마찬가지로 JSTL에서도 이와 같은 역할을 한다고 보면 된다. 

 

<c:out> Tag

- '<%=...>'와 같다. JSP의 표현식을 대체

<c:out value="${변수명}">  

<c:if> Tag

- 조건문

<c:if test="${조건식}"> 

 

<c:choose> <c:when> <c:otherwise> Tags

- Switch문과 동일, 여러개의 when 태그와 하나의 otherwise 태그를 가진다.

 (if else if else 라고 생각하면 쉽다.)

<c:choose> 

   <c:when test="${조건식}">

   </c:when> 

     .....

   <c:otherwise>

   </c:otheriwse> 

</c:choose>

  예제1. 사용자에게 아이디,비밀번호의 입력값을 받은 후 admin인 경우 관리자페이지임을 알리고 로그인에 성공했으면 어서오세요~ 뜨게하며 회원이 아닌경우에는 알럿창으로 비회원입니다 뜨게 만들기.

<c:forEach> Tag

- 객체 전체에 걸쳐 반복 실행에 사용한다.

<c:forEach var="현재 아이템의 변수명" 

              items="반복 데이터가 있는 아이템 Collection 명"

              begin="시작 값, 기본값은 0"

              end="종료 값" 

              step="증가 값"

              varStatus="반복 상태 값을 지닌 변수" />

 

* varStatus 는 foreach의 상태를 알 수 있는 값이 들어 있다. 

  • $(변수.current} : 현재의 인덱스
  • $(변수.index} : 0부터의 인덱스
  • $(변수.count} : 1부터의 인덱스
  • $(변수.first} : 현재 루프가 처음인지 확인
  • $(변수.last} : 현재 루프가 마지막인지 확인
  • $(변수.begin} : forEach문의 시작 값
  • $(변수.end} : forEach문의 끝 값
  • $(변수.step} : forEach문의 증가 값



JSTL에는 다양한 종류의 태그가 있는데 그 중 core태그, function태그를 많이 쓴다. function태그는 특히 length를 알고 싶을때 사용할 수 있다.  사용하기 위해서 위와 같이 taglib 정의를 추가로 해주어야 한다.

 

[function 태그]

- JSTL functions은 JSTL에서 제공하는 각종 함수를 사용해서 문자열이나, 컬렉션들을 처리한다.

- fn태그는 단독으로 사용할 수 없고 EL 표현식 내에서 사용한다.

 

ex1)문자열처리 

● boolean contains(String sting, String substring) : string이 substring을 포함하면 true값을  리턴 한다.

ex2)배열의 길이 

● int length(Object  item)

 : item이 배열이나 컬렉션이면 요소의 개수를, 문자열이면 문자의 개수를 리턴 한다.

 

 

 

 

오늘은 EL태그와 JSTL 에 대해서 배워보았다. 자바때 배운 개념들이 매우 중요하다는 것을 다시금 깨닫게 되는것 같다. 

hashmap 배열 for문 반복문.. 등 모두 다 자바때 기초개념으로 배웠던 것들이다. 결국 당연한 말이지만 기초가 잘 되어 있어야 응용도 되는것 같다. 자바 복습 필수!! 

 

 

 

 

출처: https://hackersstudy.tistory.com/42 [공대인들이 직접쓰는 컴퓨터공부방]

http://egloos.zum.com/cykor/v/1215160

 

'프로그래밍 > JSP' 카테고리의 다른 글

JSP 팀 프로젝트 끝, 느낀점  (0) 2022.04.19
JSP 6일차 - DBCP, JNDI,Mybatis  (0) 2022.01.27
JSP 5일차 - Session, Ajax  (0) 2022.01.24
JSP 4일차 - 내장객체, 쿠키  (0) 2022.01.21
JSP 3일차 - 액션태그  (0) 2022.01.20