본문 바로가기

IT

17.JSP - JSTL(JSP Standard Tag Library)

* JSTL(JSP Standard Tag Library)

- JSP의 경우 HTML 태그와 같이 사용되어 전체적인 코드의 가독성이 떨어진다. , (<% 매번 블록 처리를 해줘야하는 문제)

- 그래서 이런 단점을 보완하고 만들어진 것이 JSTL이다.

- JSTL을 사용하면 자바의 제어문을 HTML태그화 시킬 수 있다.

- JSTL의 경우 우리가 사용하는 Tmocat 기본 컨테이너에 포함되어 있지 않으므로, 별도의 라이브러리를 설치하고 사용한다.

- 설치방법: http://jakarta.apache.org 접속

 

* JSTL Core Library

-Core 라이브러리는 기본적인 라이브러리로 출력, 제어문, 반복문 같은 기능이 포함되어 있다.

- 코어 라이브러리를 사용하기 위해서 반드시 JSP 파일 내의 지시자 태그로 

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

 

1.출력 태그

<c:out value="출력값">

 

2. 변수 선언 태그

- 변수 태그는 JSTL이 지원하는 태그에서 사용할 수 있는 변수를 설정하기 위해 사용한다. EL변수를 생성합니다.

-  <c:set var="변수명" value="설정값" scepe="범위">

- a. var: 값을 저장할 EL 변수의 이름을 지정함.

- b. value : 변수의 값을 지정함.표현식, EL, 텍스트를 사용하여 지정가능

- c scope: 변수를 저장할 영역을 지정함. page, request, session, application 중 하나를 지정해야 하며 지정하지 않을 경우 page를 기본 값으로 사용.

 

3. 변수 제거 태그 

- <c:remove var="변수명" scope="범위">

- remove 태그를 사용할 때 주의점은 삭제할 변수의 scope을 지정하지 않으면 동일한 이름으로 저장된 모든 영역의 변수를 삭제한다.

 

4. 조건문(if) 태그

-if 태그는 자바 언어의 if블록과 비슷한 기능을 제공한다. 중첩된 if~else 문과 같은 효과를 낼 수는 없지만 단순한 if블록을 쉽게 대처할 수 있기 때문에 많이 사용한다.

-<c:if test="조건식" var="조건 처리 변수명">

 

5. 조건문(choose) 태그

-choose 태그는 자바의 swith 구문과 if~else 구문을 혼합한 형태로 다수의 조건문을 하나의 블록에서 수행할 때 사용한다.

-<c:choose>

       <c:when test="조건식"> 처리 내용 </c:when>

       <c:when test="조건식"> 처리 내용 </c:when>

       <c:otherwise> 처리 내용 </c:otherwise>

</c:choose>

 

6. 반복문 태그

- <c:forEach item="객체명" begin="시작값" end="끝 값" step="증감값" var="변수명">

- forEach 태그는 배열, 컬렉션 또는 맵에 저장되어 있는 값들을 순차적으로 처리할때 사용한다.

-  배열의 경우는 객체의 배열뿐만 아니라 기본 데이터 타입의 배열도 알맞게 처리를 하며 기본 데이터 타입은 래퍼 클래스를 통해 처리한다.

 

 

 

 

Taglibs클릭

 

 

zip파일을 받으면 된다.

 

lib폴더 안에 jstl과 standard.jar를 넣어주자.


lib폴더 안에 jstl과 standard.jar를 넣어주자.

실습.

 

1. 조건문(if) 태그

jstl_if.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 페이지 안에서 JSTL태그를 사용하려면 디렉티브를통해 taglib선언을 해야한다. --%>
<%@ 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>

<c:if test="${param.name=='홍길동'}"> 
	<p>name파라미터의 값은${param.name}입니다.
</c:if>
<c:if test="${param.name=='이순신'}">
	<p>name파라미터의 값은${param.name}입니다.
</c:if>

<%-- 아래의 코드를 EL & JSTL을 이용해서 간략하게 변경해보자.
<%
	String name = request.getParameter("name");
	if(name.equals("홍길동")) {
%>
<p>name파라미터의 값은 홍길동입니다.</p>
<% 		
	}
	if(name.equals("이순신")) {
%>
<p>name파라미터의 값은 홍길동입니다.</p>		
<% } %>	
	
 --%>
</body>
</html>

처음 창을 띄우면 에러 500이 뜬다. url에 값을 주면된다.

 

2.조건문(choose) 태그

if-else을 사용하기 위해선 이방법을 써야한다.

<%@ 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>

<c:choose>
	<c:when test="${param.name == '김철수'}">
		<p>당신의 이름은 김철수입니다.</p>
	</c:when>
	<c:when test="${param.age > 19}">
		<p>당신은 성인입니다.</p>
	</c:when>
	<c:otherwise>
		<p>당신의 이름은 김철수가 아니고 미성년자입니다.</p>
	</c:otherwise>
</c:choose>


<%-- 
<%
	String name = request.getParameter("name");
	int age = Integer.parseInt(request.getParameter("age"));
	
	if(name.equals("김철수")) {
%>
	<p>당신의 이름은 김철수입니다.</p>
<%
	} else if(age > 19) {
%>
	<p>당신은 성인입니다.</p>
<%
	} else {
%>	
	<p>당신의 이름은 김철수가 아니고 미성년자입니다.</p>
<%
	}
%>
 --%>

</body>
</html>

 

3. 조건문(choose) 태그(2)

jstl_choose_testform.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<form action="jstl_choose_test.jsp">
		# 점수를 입력하세요: 
		<input type="text" name="point" size="5"/>점
		<input type="submit" value="확인" />
	</form>

</body>
</html>

jstl_choose_test.jsp

<%@ 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>
	<%--
		jstl choose태그와 EL을 활용하여 90점이 넘으면 
		"당신의 학점은 A입니다."를 출력,
		80점 이상이면 B, 70점 이상이면 C,
		 60점 이상이면 D, 그 이외에는 F를 출력하세요.
		--%>
	<c:choose>
		<c:when test="${param.point >= 90}">
			<h4>당신의 학점은 A입니다.</h4>
		</c:when>
		<c:when test="${param.point >= 80}">
			<h4>당신의 학점은 B입니다.</h4>
		</c:when>
		<c:when test="${param.point >= 70}">
			<h4>당신의 학점은 C입니다.</h4>
		</c:when>
		<c:when test="${param.point >= 60}">
			<h4>당신의 학점은 D입니다.</h4>
		</c:when>
		<c:otherwise>
			<h4>당신의 학점은 F입니다.</h4>
		</c:otherwise>
	</c:choose>
</body>
</html>

 

 4. 반복문 태그 

jsti_foreach.jsp

<%@ 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>

<%--
	int sum = 0;
	for(int n=1; n<=100; n++)
		sum += n;
	out.print("<h4>1부터 100까지 누적합: "+ sum +"</h4>");
--%>
<h4>1부터 100까지의 합</h4><hr/>
<%-- jstl변수 선언태그 c:set -> EL변수로 활용가능 --%>
<c:set var="sum" value="0" /> <%-- 변수 선언 --%>
<c:forEach var="n" begin="1" end="100" step="1">
	<c:set var="sum" value="${sum + n}" />
</c:forEach>
<p>1~100까지의 누적합: ${sum}</p>

<h4>구구단 4단</h4> <hr/>
<c:forEach var="hang" begin="1" end="9">
	4 x ${hang} = ${4*hang} <br/>
</c:forEach>

<%--
	for(int dan=2; dan<=9; dan++) {
		for(int hang=1; hang<=9; hang++) {
			out.println(dan + "x" 
			+ hang + "=" + dan*hang + "<br/>");
		}
	}
 --%>
<%-- 모든 구구단을 jstl태그로 출력하세요. --%>
<hr/>
<c:forEach var="dan" begin="2" end="9">
	구구단 ${dan}단 <hr/>
	<c:forEach var="hang" begin="1" end="9">
		${dan} x ${hang} = ${dan*hang} <br/>
	</c:forEach>
	<hr/>
</c:forEach>

<h4>배열이나 컬렉션 내부값 출력</h4> <hr/>

<c:set var="arr" value="<%= new int[] {1,3,5,7,9} %>" />
<c:forEach var="i" items="${arr}">
	${i} &nbsp;
</c:forEach>
<%--
	int[] arr = new int[] {1,3,5,7,9};
	for(int i : arr) 
		out.print(i + "&nbsp;");
--%>


</body>
</html>