- 라이브러리로 자바 구문을 만들어 놓고 필요할 때마다 꺼내 쓰면 되기 때문에 유지보수에 편하다.
- JSP 페이지 내에서 자바 코드와 HTML 코드(태그 형태)가 섞여 있으면 가독성이 떨어진다.
- EL문과 JSTL문을 사용하면 HTML과 태그 형태로만 구성된 일관된 소스코드를 볼 수 있다.
1. EL문
- Expression Language
- 값을 간결하고 간편하게 출력(표현)할 수 있도록 해주는 언어
- EL 문은 ${} 안에 있는 변수는 필드를 찾아오는 게 아니라 getter를 찾아가는 것이다. - 그래서 우리가 만드는 객체를 사용하고 싶으면 setter, getter로 해야 한다.
JSP(자바)
EL
<%=name%>
${name}
* setAttribute를 할 수 있는 4가지
① pageContext : 현재 페이지
② request : 요청
③ session : 세션
④ application : 전체
연산자 - EL문에서 연산자를 문자열로 나타낼 수 있다. - ${empty data} : data의 값이 없으면 ture
연산자
문자열
연산자
문자열
/
div
<
lt
%
mod
>=
ge
&&
and
<=
le
||
or
==
eq
!
not
!=
ne
>
gt
empty
뒤에 오는 값이 비어있으면 true / 아니라면 false
예시 1 - 자바 변수를 사용하기 위해서는 <%= %> 문을 사용할 수 밖에 없다. - EL문은 변수를 찾는 것이 아니라 setAttribute로 한 키값을 찾으러 가는 것이다. - 그래서 EL문을 사용하기 위해서는 setAttribute("키","값")을 사용해야 한다. - 만약 키의 값이 중복 되어 들어간다면 찾는 attribute 순서는 다음과 같다. pageContext > request > session > application - 우리가 원하는 곳에서 찾기 위해서는 ${~~~~~Scope.키값} 으로 하면 된다.
예시 2 - 위에서 보았듯이 attribute로 넘어왔으면 ${} 안에다가 키 값을 그냥 적으면 된다. - parameter로 넘어온다면 EL문에서는 ${param.name}으로 하면 된다. - checkbox처럼 배열로 값이 넘어오는 parameter는 ${paramValues.name[n]}으로 사용하면 된다. - 쿠키를 사용하기 위해서는 배열을 선언해서 사용했지만 EL문을 사용하면 ${cookie.키값.value}로 하면 값을 쉽게 얻을 수 있다.
2. JSTL
- JSP Standard Tag Library
- 연산이나 조건문, 반복문을 편하게 처리할 수 있으며, JSP 페이지 내에서 자바 코드를 사용하지 않고 로직을 구현할 수 있는 효과적인 방법을 제공한다.
> jakarta-taglibs-standard-1.1.2.zip 다운로드 > lib 안에 있는 jar파일 두 개 WEB-INF 안에 lib에 삽입
> 사용할 페이지에 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 작성 > 함수를 사용할 거면 <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 작성 ${fn:함수} 로 사용 : ex) ${fn:length(arData)} -> arData 길이 반환
예시 1(JSTL 변수) - EL문에서 ${} 안에 것을 세팅하기 위해서는 setAttribute를 하면 된다. - 하지만 JSTL의 <c:set var="키" value="값"> 으로 편하게 사용 가능하다. - 내용을 반환하는 <c:out>이 있지만 EL문을 사용하면 되므로 거의 쓰지 않는다. - <c:set>을 할 때 속성으로 scope="위치" 를 하게 되면 저장할 위치도 지정할 수 있다.
예시 2(조건문) - 조건문은 자바에서 처럼 여러가지로 나뉜다. - <c:if test="조건문"> 내용 <c:if> 는 그냥 자바에서 if문 ~ if문을 의미한다. - <c:choose></c:choose> 는 switch라고 생각하면 되고 그 안에는 <c:when>과 <c:otherwise>를 사용할 수 있다. - <c:when>은 case문 또는 if ~ else if ~ else 라고 생각하면 된다. - <c:otherwise>는 default 또는 else 라고 생각하면 된다.
예시 3(반복문)
- 반복문도 역시 자바처럼 여러가지로 나뉜다. - <c:forEach var="변수" begin="초기값" end="끝값" step="올라가는 수"> 내용 </c:forEach>로 사용할 수 있다. - 보이는 대로 변수를 초기값부터 끝값까지 step에 따라 증가하는 것이다.(초기값 포함 끝값 포함 이다.) - 위 예시 처럼 <c:set>을 배열로 세팅할 수 있는데, for문에서 끝값을 배열의 길이로 설정하는 경우가 많다. - JSTL문에서 어떤 것의 길이를 구하기 위해서는 위에 fn에 대한 설정을 적어주고, fn을 사용하면 된다. - ${fn:함수()} 로 사용하면 되는데, 다양한 함수들이 존재한다. - 빠른 for문도 역시 사용할 수 있는데, <c:forEach var="변수" items="배열 또는 컬렉션"> 내용 </c:forEach>로 사용하면 된다. - items에서 하나씩 변수로 넘어와 사용하면 된다. - 마지막으로 HashMap도 빠른 for문으로 편하게 값을 반환할 수 있다. - HashMap을 선언해 세팅해주고 빠른 for문을 사용하면 변수에 entry 형태로 넘어오게 되있다. - 원래는 getkey, getvalue를 해야하지만 EL문은 필드명만 써도 알아서 getter를 찾아가므로 이렇게 entry.key, entey.value 를 사용해도 된다.