프로그래밍 언어/jsp

<JSP> JSTL 설치부터 사용까지 총정리

창조적생각 2021. 9. 27. 16:25

목차

1. 개요

2. 상세

(1) 선언부

(2) tag 상세

core

sql

functions

formatting


<JSP Standard Tag Library>

1.개요

 

JSTL은 코드의 복잡함을 해결하기 위한 일종의 사용자 정의 태그의 표준입니다.

 

태그  
Core 태그 변수선언, 삭제 등 변수와 관련된 작업 및 if 문, for 문과 같은 제어기능, URL 처리로 페이지 이동 기능을 제공
Formatting 태그 문자열이나 컬렉션을 처리하는 함수 태그로 숫자, 날짜, 시간 등을 형식화하는 기능. 국제화, 다국어 지원기능 제공
Sql 태그 데이터베이스와 상호작용하기 위해 사용하는 태그로 데이터베이스의 데이터 삽입, 수정, 삭제, 조회 기능 제공
Function 태그 문자열을 처리하는 함수를 제공

 

(1) JSTL 라이브러리 설치하기

 

https://mvnrepository.com/artifact/javax.servlet/jstl

위의 링크를 따라 들어가시면 아래와 같은 화면이 나옵니다.

화살표가 가리키는 jar(404kb)를 클릭하셔서 다운받으시면 됩니다.

다운 받으신 jstl-1.2.jar 파일을 현재 사용하고 싶은 프로젝트 web-inf 안의 lib에 넣어주시면 바로 사용이 가능합니다.

new_project_jstl에 WEB-INF 안의 lib 폴더에 jstl-1.2jar 파일을 넣어줬습니다. 그리고 webapp안에 jstl_practice.jsp파일을 만들어 실행을 해보면 잘 실행되는 것을 볼 수 있습니다.

[실행결과]

2. 상세

(1) 선언하기

 

jstl을 jsp에서 사용을 하기 위해서는 현재 이 라이브러리를 사용한다는 것을 미리 선언을 해줘야 합니다.

선언을 하는 방법은 아래와같습니다.

1
2
3
4
<%@taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix ="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@taglib prefix ="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@taglib prefix ="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
cs

여기에서 prefix는 파이선에서의 as와 같은 역할을 합니다. 식별자에서 불어온 기능을 jsp파일에서 사용할 때

prefix된 이름으로 불러와서 사용하겠다는 뜻입니다.

그리고 uri, 식별자 안의 값들은 라이브러리에서 불러오는 기능들입니다.

 

(2)태그별 기능

 

  core 태그

태그  
<c:out> 출력
<c:set> 사용할 변수를 설정
<c:remove> 설정한 변수 제거
<c:catch> 예외 처리
<c:if> 조건문 처리
<c:choose> 다중 조건문 처리
<c:when> <choose>의 서브태그로 조건문 참일 때 수행
<c:otherwise> <choose>의 서브태그, 조건문 거짓일 때 수행
<c:import> 다른 리소스의 결과 삽입
<c:forEach> 반복문을 처리하는데 사용
<c:forTokens> 구분자로 분리된 각각의 토큰 처리
<c:param> url 관련 태그의 파라미터 설정
<c:redirect> 설정한 경로로 이동하는데 사용
<c:url> url 재작성

[예제]

① 숫자의 홀,짝 구분

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action = "number.jsp" method ="post">
        <p>숫자:<input type = "text" name="number">
        <p><input type ="submit" value="전송">
    </form>
    <% String number = "";
    if (request.getParameter("number") == null){
        number = "0";
        
    }
    else number = request.getParameter("number");
    %>
    <c:set var = "number" value="<%=number %>"/>
    <c:choose>
        <c:when test="${number%2==0 }">
            <c:out value="${number}"/> : 짝수입니다.
        </c:when>
    </c:choose>
    <c:choose>
        <c:when test="${number%2!=0 }">
            <c:out value="${number }"/> : 홀수입니다.
        </c:when>
    </c:choose>
</body>
</html>
cs

[실행결과]

② 구구단 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>구구단</h3>
<table>
<c:forEach var ="i" begin="1" end="9">
<tr>
<c:forEach var ="j" begin = "1" end="9">
<td>${i }*${j } = ${i*j }</td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
cs

[실행결과]

 

 sql 태그

 

태그  
<sql:setDataSource> DataSource를 설정하는데 사용
<sql:query> 조회 커리문 실행
<sql:update> 삽입,수정,삭제 쿼리문 실행
<sql:dateParam> 쿼리문에 문자열 형식의 파라미터 설정
<sql:param> 쿼리문에 날짜 형식의 파라미터 설정
<sql:transaction> 트랜잭션 구현 사용

 

functions 태그

 

태그  
contains() 검색 대상 문자열의 포함 여부를 확인
containsignoreCase() 대,소문자와 상관없이 검색대상문자열 포함 여부 확인
startsWith() 특정 문자열로 시작하는지 확인
endWith 특정 문자열로 끝나는지 여부 확인
escapeXml() 문자열에 포함된 특수문자를 특정 코드로 변환
indexOf() 검색대상문자열의 첫위치값 반환
split() 문자열을 설정한 구분자로 분리하여 배열 형태로 반환
join() 배열 형태의 문자열을 설정한 구분자로 연결하여 반환
length() 문자열의 길이 반환
substring() 특정 위치의 문자열을 반환
substringAfter() 설정한 문자열 이후의 부분에 있는 문자열 반환
substringBefore() 설정한 문자열 이전의 부분에 문자열 반환
replace() 검색 대상 문자열을 설정한 문자열로 변경하여 반환
toLowerCase() 소문자로 변환
toUpperCase() 대문자로 변환
trim() 문자열 앞위의 공백 제거하여 반환

예제

① 문자열 검색하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix ="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>문자열 검색
<p> Hello Java Server Pages! => ${fn:contains("Hello Java Server Pages!","java")}
<p> Hello Java Server Pages! => ${fn:containsIgnoreCase("Hello Java Server Pages!","java")}
</body>
</html>
cs

[실행결과]

② 문자열 분리하고 연결하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix ="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <c:set var="texts" value = "${fn:split('Hello Java Server Pages!',' ') }"/>
    <c:forEach var="i" begin="0" end="${fn:length(texts)-1}">
        <p>text[${i }] = ${texts[i] }
    </c:forEach>
    <p><c:out value="${fn:join(texts,'-') }"/>
</body>
</html>
cs

[실행결과]

formatting 태그

태그  
setLocale 로케일을 설정
requestEncoding 요청 파라미터의 문자 인코딩 설정
bundle 사용할 리소스번들 설정
message 리소스번들에서 로케일에 맞는 메세지 불러와 출력
setBundle 리소스번들을 특정 변수에 저장
formDate 날짜 형식을 표현
parseDate 문자열에서 원하는 패턴의 날짜 형식으로 변환
parseNumber 문자열에서 원하는 패턴의 숫자형식으로 변환
formatNumber 숫자형식 표현
setTimeZone 특정 범위의 시간대 설정
timeZone 시간대를 설정

①숫자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix ="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>숫자 : <fmt:formatNumber value="1900.733" type="number"/>
<p>통화 : <fmt:formatNumber value="1900.733" type="currency" currencySymbol ="원화"/>
<p>퍼센트 : <fmt:formatNumber value="1900.733" type="percent"/>
<p>패턴 : <fmt:formatNumber value="1900.733" pattern=".00"/>
</body>
</html>
cs

②날짜

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix ="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="now" class="java.util.Date" />
<p>date 형식 : <fmt:formatDate value="${now }" type="date"/>
<p>time 형식 : <fmt:formatDate value="${now }" type="time"/>
<p>both 형식 : <fmt:formatDate value="${now }" type="both"/>
</body>
</html>
cs

 

 

728x90