[필수용어 실무 4편] JSP 데이터 처리 & EL/JSTL 실무활용 25선

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

JSP 및 JSTL 등 실무용어

JSP 데이터 처리 이해하기

먼저 앞편에서 다루었던 JSP에 대해 한번 내용을 상기시키고 이어가겠습니다. 여러분도 잘 아시다시피 JSP는 단순 HTML 페이지가 아니라, 서버에서 데이터를 받아 화면에 표시하는 역할을 합니다.

JSP에서 데이터를 출력하려면 일반적으로 다음 흐름을 이해해야 합니다.

  1. 사용자가 브라우저에서 요청
  2. Controller가 요청 처리 후 데이터를 Model에 담음
  3. JSP는 Model 데이터를 받아 EL(Expression Language) 또는 JSTL로 화면에 출력

즉, Controller → Model → JSP → HTML 출력이라는 MVC 패턴의 마지막 단계(View)가 JSP입니다.

JSP의 내용이 헷갈리거나 잘 모르겠다면? [필수용어 실무 3편] JSP & MVC 패턴 실무 흐름 완전정복 25선


EL(Expression Language) 이해하기

ELJSP에서 데이터를 출력할 때 사용하는 간단한 문법입니다.

<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) 이해하기

JSTLJSP에서 자주 쓰는 조건문, 반복문, 포맷 등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에 담긴 객체 usergetName() 호출
  • ${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로 데이터 출력

&lt;h2>회원 정보&lt;/h2>
&lt;p>이름: ${user.name}&lt;/p>
&lt;p>이메일: ${user.email}&lt;/p>
&lt;p>나이: ${user.age}세&lt;/p>

Tip) EL을 사용하면 JSP에서 직접 Java 코드를 쓰지 않아도 됩니다.


참고자료


마무리

JSP에서 화면에 데이터를 출력할 때는 EL로 간단히 값을 가져오고, JSTL로 반복과 조건을 처리합니다.
이 25가지 항목을 익히면, 입문자도 실무 JSP 화면 구성과 데이터 처리 로직을 충분히 이해할 수 있습니다.

다음 편 예고

다음 편에는 [필수용어 실무 5편] JSP + AJAX 비동기 데이터 통신 완전정복 25선 실시간 데이터 갱신과 비동기 요청 흐름까지 한 번에 정리합니다! 이 부분 또한 실무에서 데이터 저장 시 중복체크 혹은 데이터를 참조해서 사용자에게 새로고침 없이 실시간으로 보여줄 때 굉장히 많이 쓰입니다. 기대해 주세요!

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤