JSTL 과 EL(Expression Language)으로 다르게 "출력"해보자
▤ 목차
✔ EL(Expression Language)
jsp페이지에서 데이터를 출력하고 조작하는 간편한 방법을 제공한다.
EL은 주로 jsp 코드 내에서 사용되며 다양한 내장 객체를 통해 데이터를 접근하고 제어할 수 있다.
jsp 코드의 가독성을 높이고 유지보수를 용이하게 할 수 있다.
⌨ 기본 개념
1. 변수 접근
el을 사용하여 jsp 페이지의 범위(scope)에 있는 변수에 쉽게 접근할 수 있다.
예를 들어, ${user.name}으로 사용하면 user 객체에 name 속성에 접근할수 있다.
2. 컬렉션 접근
배열이나 리스트와 같은 컬렉션 객체의 요소에 접근할 때 유용하다.
${employees[0].name}과 같이 인덱스를 통해 접근할 수 있다.
3. 속성 접근
HTML 요소의속성에 접근이 가능하다.
<input type="text" value = "${user.name}"/>과 같이 사용이 가능하다.
📎주요 내장객체
내장 객체 | 설명 |
${pageScope} | 현재 페이지 범위에 있는 객체들에 접근할 수 있다. ${pageScope.user} 와 같이 사용하여 현재 페이지의 user 객체에 접근할 수 있다. |
${requestScope} | http 요청 범위에 있는 객체들에 접근할 수 있다. ${requestScope.paramName}과 같이 사용하여 HTTP 요청의 매개변수에 접근할 수 있다. |
${sessionScope} | 현재 사용자 세션 범위에 있는 객체들에 접근할 수 있다. ${sessionScope.user}와 같이 사용하여 사용자 세션에 저장된 user 객체에 접근할 수 있다. |
${applicationScope} | 웹 애플리케이션 범위에 있는 객체들에 접근할 수 있다. ${applicationScope.contexxtParam}과 같이 사용하여 웹 애플리케이션 초기화 매개변수에 접근할 수 있다. |
${parm} | http 요처어 매개변수에 접근할 수 있다. ${param.paramName}과 같이 사용하여 http 요청의 특정 매개변수에 접근할 수 있다. |
${header} | http 요청 헤더에 접근할 수 있다. ${header.userAgent}와 같이 사용하여 http 요청의 User-Agent 헤더에 접근할 수 있다. |
👏 중요
데이터를 "출력"하는데 유용하다. Jsp 코드를 더욱 간결하고읽기 쉽게 만들어 준다.
프론트엔트와 백엔드 로직을 효과적으로 분리하고 웹 애플리케이션의 유지보수성을 향상시킬 수 있다.
<%= %> 과 같은 표현식을 사용하지 않고 간편하게 출력하기 위한 도구이다.
✔ jsp scriptlet VS jsp 표현식(Expression) VS EL
요즘에는 EL이나 JSTL 을 많이 사용하여 더욱 간결한 코드를 작성한다.
💻 코드로 보기
✔ 여러 사용(연산자, 내장 객체)
🔦 isELIgnored
페이지 지시자 <%@ page 속성 = 값 %>이 있다.
페이지 지시자의 속성은 많은데( import, contentType, errorPage.. 등) el과 관련된 페이지 지시자도 있다.
<%@ page isELIgnored = "false"%>
이게 기본값인데 만약, 값은 true로 바꿔놓는다면 해당 페이지에 el은 무시된다. (문자 그대로 출력된다.)
기본값이기에 따로 적지않아도 된다.
👏 페이지 정의 부분?
jsp에서는 페이지 지시자가 있다. jsp는 servlet에서 service부분이라고 생각하면 편하다.
, 주로 사용하는 페이지 지시자에는
- include 지시자
다른 파일을 포함하여 현재 페이지에 삽입할 때 사용된다.
<%@ include file="파일명"%> 해당 파일에 html이 살아서 오는 것이다. 즉, 해당 코드가 그대로 삽입된다고 보면된다.
( => <jsp:include page=""/> : 이 경우는 html이 모두 적용이 되어 들어온다고 보면된다.)
- taglib 지시자
사용자 정의 태그 라이브러리를 정의할 때 사용된다.
<%@ taglib uri=" -- " prefix="접두사"%>
: 곧 배울 사용해볼 것이다.
📎\${ -- } : 하나의 el 무시하기
\${ }이렇게 el태그 앞쪽에 \ 를 붙이면 el 그대로 출력된다.
👏 연산자 사용
연산자 사용이 가능하다.
관계 연산자, 논리 연산자, 삼항 연산자 등 사용이 가능하다.
** div로 사용은 가능한데 eclipse에서 지원을 안해서 에러표시가 나오는것 같다.
결과는 잘 나온다.
📎내장 객체 ( 생존 범위 관련 )
이때, requestScope는 많이 사용되기때문에 객체를 붙이지 않고 사용할 수 있다.
el에서 .은 배열을 의미한다.
request, session, application은 각각 다른 범위(scope)에서 데이터를 저장하고 공유한다.
설명 | |
request | http 요청마다 생성되어 해당 요청에 대한 정보를 담고있다. 클라이언트가 서버에 요청을 보낼때마다 새로운 요청(request) 객체가 생성된다. 하나의 http 요청 내에서 유효하며 해당 요청과 관련된 모든 jsp 페이지 및 서블릿에서 접근할 수 있다. |
session | 객체는 특정 사용자의 세션을 관리한다. 동일한 사용자가 여러 페이지 간에 데이터를 공유할 수있도록 한다. 즉, 한 사용자의 모든 http 요청에 걸쳐 일관된 데이터를 유지할 수 있다. ex) 장바구니 관리, 로그인 상태 관 |
application | 웹 애플리케이션 전체에 유일한 객체이다. 모든 사용자가 공유할 수 있는 데이터를 저장한다. 이때, 범위는 웹 애플리케이션의 생명 주기 동안 유지된다. |
📎내장 객체 (컬렉션 객체)
이렇게 el로 출력하면된다. el에서 .은 배열을 의미한다.
✔ jstl (javaServer Pages Standard Tag Library)
jsp에서 자주 사용되는 태그들의 모음이다.
코드의 가독성을 높이고 재사용 가능한 컴포넌트를 제공하는 데 목적을 둔다.
xml기반의 태그 라이브러리이다.
jsp 페이지에서 반복문, 조건문, 데이터 포맷팅 등을 간편하게 할 수 있다.
HTML 태그 형태로 직관적인 코드를 지원하는 라이브러리이다.
일반적으로 el과 함께 사용한다.
📌 주요 태그 라이브러리
- Core 태그 ('<c: >')
<c:out> | 텍스트 출력을 담당하며, html 인코딩을 자동으로 처리한다. |
<c:set> | 변수를 설정하거나 속성 값을 저장할 때 사용한다 |
<c:remove> | 변수나 속성을 제거할때 사용한다. |
<c:if> | if 문으로 조건문을 표현한다. |
<c:choose> | java의 switch-case문과 비슷한 역할을 한다. 여러 주건중 하나를 선택할 때 사용한다. |
<c:when> | 태그의 조건을 지정하고 조건이 true인 경우 해당 블록의 내용이 실행된다 |
<c:otherwise> | 모든 when 조건이 false일 경우 실행되는 블록이다. |
<c:forEach> | 반복문을 통해 해당 컬렉션을순회한다. |
<c:import> | 외부 자원을 가져오거나 다른 jsp 페이지를 포함한다. |
- Formatting 태그 ('<fmt: >')
<fmt:formatDate> | 날짜 형식을 지정하여 날짜 데이터를 포맷팅한다. |
<fmt:formatNumber> | 숫자 형식을 지정하여 숙자 데이터를 포맷팅한다. |
<fmt:message> | 다국어 지원을 위해 리소스 번들(properties 파일)에서 메시지를 가져온다. |
- SQL 태그 (''<sql: >)
DB와 관련된 작업을 수행할때 사용한다.
주로 데이터베이스에서 데이터를 조회하고 수정하는 기능을 제공한다.
💻 코드로 보기
👏 추가 설명
숫자 : <fmt:formatNumber value="12345.67" pattern="#,##0.0"/><br>
숫자 : <fmt:formatNumber value="12345.67" type="currency"/><br>
#와 0의 차이
- # : 숫자가 있으면 숫자를 표시하고 없으면 생략.
- 0 : 숫자가 있든 없든 항상 표시
type 속성
number, currency, percent 말고도 더 있지만 주로 사용된다.
number | 일반 숫자 형식 포맷팅 |
currency | 통화 형식으로 포맷팅 |
percent | 백분율 형식으로 포맷팅 |
😊정리
EL과 JSTL을 배웠다.
JSP 표현식이 익숙해질만하니 새로운 출력방법을 배웠다.
개념적으로 어렵다기 보다 익숙하지 않아서인지 헷갈린다.
이 또한 자주 사용해야겠단 생각을 한다.
사용하지 않으면 금방 잊어버릴 것 같은 라이브러리이다.
"출력"과 관련된 작업이다.