지난 시간에 이어 이번 글에서는 JSP 화면에서 데이터를 출력하고, JSTL과 EL을 활용해 화면 단에서 데이터를 깔끔하게 표시하는 방법을 상세하게 다룹니다. 초심자, 비전공자도 이해할 수 있도록 예제와 함께 순서대로 설명합니다. 잘 읽어보시고 천천히 따라오시길 바랍니다.

JSP 데이터 처리 이해하기
먼저 앞편에서 다루었던 JSP에 대해 한번 내용을 상기시키고 이어가겠습니다. 여러분도 잘 아시다시피 JSP는 단순 HTML 페이지가 아니라, 서버에서 데이터를 받아 화면에 표시하는 역할을 합니다.
JSP에서 데이터를 출력하려면 일반적으로 다음 흐름을 이해해야 합니다.
- 사용자가 브라우저에서 요청
- Controller가 요청 처리 후 데이터를 Model에 담음
- JSP는 Model 데이터를 받아 EL(Expression Language) 또는 JSTL로 화면에 출력
즉, Controller → Model → JSP → HTML 출력이라는 MVC 패턴의 마지막 단계(View)가 JSP입니다.
JSP의 내용이 헷갈리거나 잘 모르겠다면? [필수용어 실무 3편] JSP & MVC 패턴 실무 흐름 완전정복 25선
EL(Expression Language) 이해하기
EL은 JSP에서 데이터를 출력할 때 사용하는 간단한 문법입니다.
<p>회원 이름: ${user.name}</p>
<p>회원 나이: ${user.age}</p>
${user.name}→ Model에 담긴user객체의getName()호출${user.age}→user.getAge()호출- 장점: 코드가 짧고 깔끔하며, NullPointerException 걱정이 적음
Tip) 기존 <%= request.getAttribute("userName") %> 방식보다 훨씬 읽기 쉽습니다.
JSTL(JSP Standard Tag Library) 이해하기
JSTL은 JSP에서 자주 쓰는 조건문, 반복문, 포맷 등을 HTML 태그처럼 사용할 수 있게 만든 라이브러리입니다.
EL과 함께 사용하면 JSP 코드가 훨씬 읽기 쉽고 유지보수가 편해집니다.(실제 웹개발에서 굉장히 다양하게 사용합니다)
JSTL 기본 사용법
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
위 내용으로 EL과 JSTL의 기본 내용을 이해하셨다면 다음은 활용입니다.
입문 및 초급 개발자 분들은 유심히 읽어주세요. 실무에 분명히 도움이 될겁니다.
1. EL 기본 출력
<p>이름: ${user.name}</p>
<p>나이: ${user.age}</p>
${user.name}→ Model에 담긴 객체user의getName()호출${user.age}→getAge()호출- 장점: 코드가 짧고 읽기 쉽고, NullPointerException 발생 확률이 낮음
2. EL 산술 연산
<p>총 금액: ${item.price * item.quantity}원</p>
- EL 안에서
+ - * /연산 가능 - JSP에서 간단한 계산을 바로 화면에 출력할 수 있음
3. EL 논리 연산
<c:if test="${user.age >= 20 && user.active}">
<p>성인 회원이며 활동 중입니다.</p>
</c:if>
- AND(
&&), OR(||), NOT(!) 연산 가능
4. EL 기본 함수
<p>문자 길이: ${fn:length(user.name)}</p>
fn:length()→ 문자열 길이- JSTL 함수 라이브러리 필요:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
5. JSTL 반복문 (<c:forEach>)
<c:forEach var="u" items="${userList}">
<p>${u.name} (${u.age}세)</p>
</c:forEach>
- 리스트, 배열, Map 반복 처리 가능
- 반복 인덱스 접근:
${status.index}
6. JSTL 조건문 (<c:if>)
<c:if test="${user.age >= 20}">
<p>성인 회원입니다.</p>
</c:if>
- 단일 조건 처리
- EL과 함께 쓰면 화면 조건 제어가 간단해짐
7. JSTL 선택문 (<c:choose>)
<c:choose>
<c:when test="${user.age >= 20}">성인</c:when>
<c:otherwise>미성년자</c:otherwise>
</c:choose>
- 다중 조건 처리
- if-else 구조와 동일
8. <c:out> 안전 출력
<c:out value="${user.name}" default="이름 없음"/>
- 값이 null이면 기본값 표시
- HTML 이스케이프 자동 처리
9. Map 데이터 반복 처리
<c:forEach var="entry" items="${userMap}">
<p>${entry.key}: ${entry.value}</p>
</c:forEach>
Map객체의 key/value 반복 가능
10.반복문 인덱스 활용
<c:forEach var="item" items="${itemList}" varStatus="status">
<p>${status.index + 1}. ${item.name}</p>
</c:forEach>
varStatus로 반복 횟수, 첫/마지막 여부 확인
11. 반복문 조건 필터
<c:forEach var="item" items="${itemList}">
<c:if test="${item.price > 10000}">
<p>${item.name} (고가)</p>
</c:if>
</c:forEach>
- 반복 안에서 조건 필터 가능
12. Null 값 처리
<p>닉네임: ${user.nickName != null ? user.nickName : '닉네임 없음'}</p>
- 삼항 연산자를 활용해 기본값 표시 가능
13. 문자열 비교
<c:if test="${user.role eq 'ADMIN'}">
<p>관리자 페이지 접근 가능</p>
</c:if>
- EL에서 문자열 비교 시
eq,ne,gt,lt사용
14. 날짜 포맷
<fmt:formatDate value="${user.joinDate}" pattern="yyyy-MM-dd"/>
- JSTL
fmt태그 사용 - 날짜 형식 변환
15. 숫자 포맷
<fmt:formatNumber value="${item.price}" pattern="#,###원"/>
- 1,000 단위 쉼표 추가
- 통화 표시
16. JSP 폼 데이터 출력
<input type="text" name="name" value="${user.name}">
- EL로 JSP 폼 필드에 데이터 자동 세팅
17. Session 데이터 출력
<p>환영합니다, ${sessionScope.loginUser.name}님!</p>
- 로그인 정보, 장바구니 등 유지
18. Request 데이터 출력
<p>검색어: ${requestScope.keyword}</p>
- 한 번의 요청 동안만 유지되는 데이터
19. Application 범위 데이터
<p>총 방문자 수: ${applicationScope.totalCount}</p>
- 서버 전체에서 공유하는 데이터
20. 반복문 중첩 처리
<c:forEach var="order" items="${orderList}">
<p>주문번호: ${order.id}</p>
<c:forEach var="item" items="${order.items}">
<p> - ${item.name} ${item.quantity}개</p>
</c:forEach>
</c:forEach>
- 중첩된 리스트 처리 가능
21. JSTL import
<c:import url="/header.jsp"/>
- 공통 헤더/푸터 포함 가능
- 코드 재사용성 증가
21. URL 파라미터 사용
<p>페이지: ${param.page}</p>
<p>검색: ${param.keyword}</p>
- GET 요청 파라미터 출력
23. JSP include 동적 데이터
<jsp:include page="footer.jsp" flush="true"/>
- include 시점에 데이터를 전달 가능
24. 반복문 + 조건 + 포맷 결합
<c:forEach var="product" items="${productList}">
<c:if test="${product.stock > 0}">
<p>${product.name} - <fmt:formatNumber value="${product.price}" pattern="#,###원"/></p>
</c:if>
</c:forEach>
- 실제 쇼핑몰 목록 페이지 구조와 동일
25. 예제
Controller에서 Model에 데이터 담기
@RequestMapping("/user/detail")
public String userDetail(Model model) {
UserDTO user = new UserDTO("홍길동", "hong@test.com", 30);
model.addAttribute("user", user);
return "user/userDetail";
}
JSP에서 EL로 데이터 출력
<h2>회원 정보</h2>
<p>이름: ${user.name}</p>
<p>이메일: ${user.email}</p>
<p>나이: ${user.age}세</p>
Tip) EL을 사용하면 JSP에서 직접 Java 코드를 쓰지 않아도 됩니다.
참고자료
마무리
JSP에서 화면에 데이터를 출력할 때는 EL로 간단히 값을 가져오고, JSTL로 반복과 조건을 처리합니다.
이 25가지 항목을 익히면, 입문자도 실무 JSP 화면 구성과 데이터 처리 로직을 충분히 이해할 수 있습니다.
다음 편 예고
다음 편에는 [필수용어 실무 5편] JSP + AJAX 비동기 데이터 통신 완전정복 25선 실시간 데이터 갱신과 비동기 요청 흐름까지 한 번에 정리합니다! 이 부분 또한 실무에서 데이터 저장 시 중복체크 혹은 데이터를 참조해서 사용자에게 새로고침 없이 실시간으로 보여줄 때 굉장히 많이 쓰입니다. 기대해 주세요!