우리가 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를 사용해주어야 한다.

<결론>
1.setAttribute() 할때의 key값을 찾는다는 사실을 명심할 것
2.우선순위: pageContext -> request -> session -> application
참고:https://victorydntmd.tistory.com/155(객체범위(scope)에 관련된 내용)
위에서는 EL문을 이용해서 간단하게 값을 출력하는 법을 배웠다. 그런데 여기서 우리는 조금 더 고민해볼 필요가 있다. form의 경우에 제출후 값을 가져오게 될때 우리는 getParameter를 사용하게 된다. 그렇다면 그 값은 EL문을 사용해서 출력하기 어려운것일까? 아니다. 변수명 앞에 param.을 붙여주면 파라미터값을 가져오게 된다.


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문의 증가 값


[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 |