쭈쌤
쭈쌤 Hello World

[Spring] JSTL 요약

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Spring] JSTL 요약≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[Spring] JSTL 요약

JSP나 Spring등의 MVC 패턴에서 View를 구현할 경우 자주 사용되는 JSTL 표현법에 대해 정리했습니다.

1) 사용 설정하기

라이브러리 의존성 설정

pom.xml에 다음의 구문 추가 (Spring 설정 과정에서 이미 적용되어 있음)

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.5</version>
</dependency>

JSTL 파일 상단에 다음의 구문 추가

기본 문법 구성

1
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

확장함수 지원

1
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

포멧터 지원

1
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

2) 변수값 활용하기

변수값 출력

1
${변수이름}

간단한 수식 지원

1
2
${변수이름 + 123}
${변수이름1 - 변수이름2}

Beans객체 사용

멤버변수값 출력하기

멤버변수에 접근하는 것 같이 표기하지만 실제로는 getter 함수가 호출되는 것이므로 이름 규칙에 맞는 getter, setter가 정의되어 있어야 한다.

1
${객체이름.멤버변수이름}

멤버변수값 변경하기

setter 메서드가 호출되는 것이므로 이름 규칙에 맞는 setter 메서드가 정의되어 있어야 한다.

1
<c:set target="${객체이름}" property="멤버변수이름" value="할당할 값" />

3) 조건문

IF문

1
2
3
4
<!-- if (true) { ... } -->
<c:if test="true">
<h1>이 블록은 무조건 출력됩니다.</h1>
</c:if>
1
2
3
4
<!-- if (false) { ... } -->
<c:if test="false">
<h1>이 블록은 출력되지 않습니다.</h1>
</c:if>
1
2
3
4
<!-- if (member.age > 19) { ... } -->
<c:if test="${member.age > 19}">
<h1>${member.name}님은 성인 입니다.</h1>
</c:if>

CASE문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<c:choose>
    <c:when test="${point > 90 && point <= 100}">
        <h1>A학점 입니다.</h1>
    </c:when>

    <c:when test="${point > 80 && point <= 90}">
        <h1>B학점 입니다.</h1>
    </c:when>

    <c:when test="${point > 70 && point <= 80}">
        <h1>C학점 입니다.</h1>
    </c:when>

    <c:otherwise>
        <h1>F학점 입니다.</h1>
    </c:otherwise>
</c:choose>

4) 반복문

기본 반복

1
2
3
4
<!-- for (int i=1; i<=10; i+=2) -->
<c:forEach var="i" begin="1" end="10" step="2">
    <h1>${i}</h1>
</c:forEach>

변수값에 의한 반복 범위 설정

Controller

1
2
3
model.addAttribute("level", 3);
model.addAttribute("first", 1);
model.addAttribute("last", 9);

View

1
2
3
4
<!-- for (int i=first; i<=last; i++) -->
<c:forEach var="i" begin="${first}" end="${last}" varStatus="status">
    <p>[${status.count}/${last}] ${level} x ${i} = ${level * i}</p>
</c:forEach>

배열에 의한 반복

Controller

1
2
String[] language = {"C,C++", "JAVA", "PHP", "JSP", "Swift"};
model.addAttribute("langauge", language);

View

1
2
3
4
5
<!-- 배열을 스캔하여 각 아이템을 k에 저장한다 -->
<!-- status.index는 현재 배열 항목에 대한 인덱스 값 -->
<c:forEach var="k" items="${langauge}" varStatus="status">
    language[${status.index}] = ${k}<br/>
</c:forEach>

Map 객체에 의한 반복

Controller

1
2
3
4
5
6
7
8
9
10
11
// Collection Map 객체 생성
Map<String, Member> member = new HashMap<String, Member>();

// Map 객체에 JavaBeans의 객체를 이름표를 적용하여 추가한다.
member.put("PM", new Member("강사", 20));
member.put("backend", new Member("토마토", 19));
member.put("database", new Member("토토리", 18));
member.put("frontend", new Member("야옹이", 17));

// Map객체를 model객체에 등록한다.
model.addAttribute("member", member);

View

1
2
3
4
5
6
7
8
<!-- member객체를 스캔하면서 각 항목을 k에 저장한다 -->
<c:forEach var="k" items="${member}" varStatus="status">
    <!--
        status.index는 현재 반복되고 있는 인덱스 번호
        반복처리때 마다 k.key와 k.value에 라벨과 객체가 저장된다.
    -->
    member[${status.index}] ${k.key} = ${k.value.name}/${k.value.age}<br/>
</c:forEach>

List에 의한 반복

Controller

1
2
3
4
5
6
7
// ArrayList에 Beans객체 추가하기
List<Member> list = new ArrayList<Member>();
list.add(new Member("토토리", 19));
list.add(new Member("토마토", 18));
list.add(new Member("야옹이", 17));

model.addAttribute("list", list);

View

1
2
3
4
5
6
7
8
9
<!--
    list라는 이름으로 추가된 ArrayList를 스캔하는 반복처리
    각 반복시기마다 List에 추가된 객체는 "k"에 저장된다.
    status.index = 현재 반복중인 위치의 인덱스
-->
<c:forEach var="k" items="${list}" varStatus="status">
    <!-- 그냥 k를 호출할 경우 toString()가 호출된다. -->
    list[${status.index}] = ${k}<br/>
</c:forEach>

문자열을 구분자로 나누어 출력

Controller

1
2
3
// 콤마(,)로 구분된 문자열 생성
String list = "토토리,토마토,야옹이";
model.addAttribute("list", list);

View

1
2
3
4
<!-- String[] token = list.split(",") 처리 후 token의 항목 수 만큼 반복 -->
<c:forTokens var="token" items="${list}" delims=",">
    ${token}<br/>
</c:forTokens>

5) URL 처리

/프로젝트이름/study/list.do?keyword=JSP공부&page=1의 형식으로 URL을 생성한 뒤, next_url이라는 변수에 저장한다. 프로젝트이름은 자동으로 추가된다.

1
2
3
4
5
6
<c:url value="/study/list.do" var="next_url">
    <c:param name="keyword" value="JSP공부"></c:param>
    <c:param name="page" value="1"></c:param>
</c:url>

<a href="${next_url}">다음으로 이동하기</a>

6) 간단한 문자열 함수 지원

1
2
3
4
5
6
7
${fn:toUpperCase(url)}
${fn:toLowerCase(url)}
${fn:substring(url, 7, 21)}
${fn:substringBefore(url, "://")}
${fn:substringAfter(url, "://")}
${fn:replace(url, "LOCALHOST:8080", host)}
${fn:trim(url)}

7) 형식문자

숫자 세자리마다 콤마 추가하기

1
2
<fmt:formatNumber value="${변수명}" pattern="#,###" />
<fmt:formatNumber value="${객체명.멤버변수명}" pattern="#,###" />
Rating:

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Spring] JSTL 요약≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus