본문 바로가기
멀티캠퍼스 풀스택 과정/백엔드

백엔드1-9. JSP-8: JSTL 기초(taglib를 사용한 <c:>태그사용)

by 이쟝 2022. 3. 5.
JSTL(Jsp Standard Tag Library: JSP 표준 태그 라이브러리)
여러 프로그램이 공통으로 사용하는 코드를 모아놓은 코드의 집합으로 자신만의 태그를 추가할 수 있는 기능을 제공한다.
주로 JSTL의 Core에서 c를 사용해서 <c:if> <c:forEach>등으로 사용한다.

 

JSTL 라이브러리 사용방법

  1. https://tomcat.apache.org/taglibs/standard/ 홈페이지 접속
  2.  

3.

4. jakarta-taglibs-standard-1.1.2.zip 다운(http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/)

 

5. 임의의 폴더에 압축을 풀고, 사용할 프로젝트의 WEB-INF/lib에 jstl.jar, standard.jar를 복사

6. 사용하고자 하는 JSP 파일에 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 정의 선언

tag library를 사용하여 지시부를 정의해야 한다. prefix는 접두어

JSTL 태그 종류 및  사용 예

c:out (prefix="c") 변수의 값을 출력
c:set (prefix="c") 변수에 값을 저장(변수 선언)
c:remove (prefix="c") 변수의 값을 삭제
c:if (prefix="c") if 조건문 수행(참일때만 실행되고 false일땐 실행xx, else문 xx): test 속성 사용 필수
c:choose (prefix="c")
<c:choose><c:when><c:otherwise> 
switch 조건문 수행(다중 if문): 속성을 사용하지 않는다.
when(case와 같은 역할로 test 속성 사용 필수) otherwise(default와 같은 역할)
c:forEach (prefix="c")
범위안에서 반복문 수행 for 역할 수행
begin: 시작값, end: 마지막 값,  step:증가 단위
c:forTokens (prefix="c") 특정 구분자로 분할해 반복문(Split이나 StringTokenizer)
c:url (prefix="c")

url 주소를 생성
contextPath를 자동으로 붙여서 url을 생성하기 때문에
contextPath가 달라져도 url 수정 불필요
c:redirect (prefix="c")
url 주소를 이동

 

 EL 표현식

EL(Expression Language)은 자바 빈의 프로퍼티, 값을 JSP의 표현식 <%= %>이나 액션 태그 <jsp:useBean>를 사용하는 것보다 쉽고 간결하게 꺼낼 수 있게 하는 기술

JSP에서는 주로 서블릿 보관소(JspContext, ServletRequest, HttpSession, ServletContext)에서 값을 꺼낼 때 사용
${ }
- JSP가 실행될 때 즉시 반영된다. (Immediate evaluation)
- 객체 프로퍼티 값을 꺼낼 때 주로 사용한다. 

<%
    num = 1234;
%>

<c:set name="num2" value="<%=num%>"></c:set>

num2 = ${num2}  <!--num2 = 1234-->​

 

JSTL 사용 예제

c:out 
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jstl_ex</title>
</head>
<body>
<c:out value="c:out은 출력"/><br/>
<c:out value="null" default="default실행 안됨"/><br/>
<c:out value="" default="default실행 안됨"/><br/>
</body>
</html>
더보기

value가 "" 일 때는 아예 실행 xx , value가 "null"은 문자열 null

 

c:set과 c:remove
<h3>변수의 선언, 출력, 삭제</h3>

<%	// JSP 블럭에서 변수 선언
	int num = 1234; 
	String hello = "안녕";	
%>

<c:set var="num2" value="<%=num%>"></c:set>  <%-- jsp 변수를 가져와서 num2로 설정 --%>
<c:set var="num3" value="${num2}"/>
<c:set var="hello2" value="<%=hello%>"/>

<h4>변수 출력</h4>
num = ${num}<br/> <%-- <c:set으로 값 설정을 안해도 오류 발생 xx --%>
hello = ${hello}<br/>
num2 = ${num2}<br/>
num3 = ${num3}<br/>
hello2 = ${hello2}<br/>

<c:set var="number" value="300+5"></c:set>
<c:set var="number2" value="${300+5}"></c:set>
<c:set var="number3" value="${300}"/>

<h4>변수 출력</h4>
number = ${number}<br/>
number2 = ${number2}<br/>
number3 = ${number3}

<c:set var="name">이름</c:set>
<c:set var="now" value="<%=new Date()%>"/> <%-- <%@ page import="java.util.Date"%> --%>

<h4>변수 출력</h4>
name = ${name}<br/>
now = ${now}<br/>

<h4>변수 삭제</h4>
<c:remove var="now"/>
now = ${now}

 

c:if와 c:choose, c:when, c:otherwise
<h3>조건문 사용</h3>
<c:if test="${true}">
	<p>test가 true여서 항상 실행된다.</p> <!-- HTML영역 -->
</c:if>

<!-- 변수 선언 -->
<c:set var="n" value="${1234}"/>
<c:set var="x" value="${1000}"/>
<c:if test="${n>x}">
	<p>${n}은 ${x}보다 큰 값입니다.</p>
</c:if> 

<h3>jstl에서 request하기</h3> <!-- jsp에서는 request.getParamter("변수") -->
<ul>
	<li>이름 : ${param.name}</li> <!-- param 객체는 요청한 매개변수의 값을 조회 -->
	<li>나이 : ${param.age}</li>
</ul>

<h3>choose, when, otherwise 사용하기</h3>
<c:choose>
	<c:when test="${param.name=='pumpkin'}">
		당신의 이름은 ${param.name}입니다.
	</c:when>
	<c:when test="${param.age>=10}">
		당신의 나이는 10세 이상입니다.
	</c:when>
	<c:otherwise>
		당신의 이름은 pumpkin도 아니고 나이도 10세이상이 아닙니다.
	</c:otherwise>
</c:choose>
더보기
  • param객체 -> 요청한 매개변수의 값을 조회한다. ${param.매개변수명}
    • 매개변수를 요청할 때는 url 주소에 파일명?변수=변수값&변수=변수값을 추가한다.

 

 

c:forEach

배열, 컬렉션(List, Map)을 이용해서 반복문 처리를 할 수도 있다.
<h3>forEach 반복문</h3>
<c:set var="gugudan" value="${3}"/> <!-- 구구단 변수로 2단출력하기 -->
<c:forEach var="i" begin="1" end="9" step="1"> <!-- step 생략하면 1씩 증가 -->
	${gugudan} * ${i} = ${gugudan*i}<br/>
</c:forEach>

<h3>배열을 이용한 반복문</h3>
<c:set var="arr" value="<%= new int[]{10,20,30,40,50} %>"/> <!-- 변수에 자바배열넣기 -->
<c:forEach var="data" items="${arr}">
	${data} [${data}] <br/>
</c:forEach>

<h3>컬렉션을 이용한 반복문</h3>
<%
	// <%@page import="java.util.List"%
	// <%@page inport="ArrayList" %
	List<String> list = new ArrayList<String>(); 
	
	// 자바에서 데이터 발생
	list.add("강동구");
	list.add("강서구");
	list.add("강남구");
	list.add("강북구");
	list.add("송파구");
%>
<c:set var="city" value="<%=list%>"/> <!-- city변수는 컬렉션을 데이터로 받음 -->
<c:forEach var="cityData" items="${city}">
	${cityData}
</c:forEach>

<ol>
<c:forEach var="cityData1" items="${city}">
	<li>${cityData1}</li>
</c:forEach>
</ol>

<ul>
<c:forEach var="cityData2" items="<%=list%>">
	<li>${cityData2}</li>
</c:forEach>
</ul>

<h3>HashMap의 컬렉션으로 반복문 처리 </h3>
<%
	// <%@page import="java.util.HashMap"%	
	HashMap<String, String> hmap = new HashMap<String, String>();
	hmap.put("userid", "hobak");
	hmap.put("username", "pumpkin");
	hmap.put("tel", "010-1234-5678");
	hmap.put("addr", "서울시 용산구");
%>
<c:set var="info" value="<%=hmap%>"/>
<c:forEach var="infoData" items="${info}">
	${infoData.key} : ${infoData.value}<br/>
</c:forEach>

 

forTokens
<h3>forTokens 사용</h3>

<c:forTokens var="color" items="red,orange,yellow,green" delims=","> <!--delims는 구분자-->
	${color}<br/>
</c:forTokens>

<c:forTokens var="lang" items="Korean/English/Chinese" delims="/">
	<p>${lang}</p>
</c:forTokens>

 

c:url
<c:url var="home" value="../home.jsp"/>
<a href="${home }">홈으로 이동하기</a> <!--홈으로 이동하기를 누르면 home.jsp로 이동-->
<!--jstl_ex.jsp-->
<h3>사원등록폼(emp테이블사용)으로 이동하기(데이터 표시)</h3>
<c:url var="empFrm" value="../J02_response_jdbc/empForm.jsp">
	<c:param name="no" value="1004"/>  <!-- param으로 파일이 이동된다음에 넣을 값 설정-->
	<c:param name="name" value="천사"/>
</c:url>
<a href="${empFrm}">사원등록폼</a>

<!--J02_response_jdbc/empForm.jsp-->
<!-- jstl을 사용하기 위해서 taglib 추가 -->
<!-- value값으로 매개변수 설정 -->
사원번호 : <input type="text" name="empno" value="${param.no}"/><br/>
사원명 : <input type="text" name="ename" value="${param.name}"/><br/>
연봉 : <input type="text" name="sal" value="${param.sal}"/><br/>

2022.03.03 - [멀티캠퍼스 풀스택 과정/백엔드] - 백엔드1-5. JSP-4 : JAVA와 DB의 연동(emp테이블사용)-1

 

c:redirect

자동으로 페이지 이동
frront-end  back-end
html -> meta 태그 / java script -> location jsp -> response.sendRedirect( ) / jstl -> <c:redirect>

사용법
<c:redirect url="url경로" context="컨텍스트 경로"/>

예제
<c:redirect url="/J02_response_jdbc/empForm.jsp" context="/webJSP"/>
이 태그가 실행되면 /webJSP/J02_response_jdbc/empForm.jsp 페이지로 자동으로 이동된다.

파라미터를 전달할 경우
<c:redirect url="/J02_response_jdbc/empForm.jsp" context="/webJSP"/>
     <c:param name="name" value="이아무개"/>
</c:redirect>

c:url 예제에서 사용한 것 똑같이 사용하기 
<!--jstl_ex.jsp-->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:redirect url="../J02_response_jdbc/empForm.jsp">
	<c:param name="no" value="1020"/>
	<c:param name="name" value="MZ세대"/>
</c:redirect>
더보기

jstl_ex.jsp 파일을 실행하면 바로 empForm.jsp로 이동하게 되는데 이때 param을 통해서 값이 클라이언트에게 바로 자동 입력된다. (response)