JSTL (JSP 문서에서 많이 사용되는 EL 함수와 커스텀 태그를 제공)

woom·2023년 1월 26일
0

MVC

목록 보기
5/6
post-thumbnail

🌼 JSTL

  • JSTL : JSP 문서에서 많이 사용되는 EL 함수와 커스텀 태그를 제공하기 위한 라이브러리

    • JSP 문서에서 JSTL이 제공하는 EL 함수 또는 커스텀 태그를 사용하기 위해서는 라이브러리 파일을 다운로드 받아 프로젝트에 빌드 처리
    • https://tomcat.apache.org 사이트 참조
      (https://tomcat.apache.org >> Download >> Taglibs 메뉴 클릭 >>
      taglibs-standard-impl-1.2.5.jar,taglibs-standard-spec-1.2.5.jar, taglibs-standard-jstlel-1.2.5.jar,taglibs-standard-compat-1.2.5.jar 파일 다운로드 >> /WEB-INF/lib 폴더에 jar 파일 붙여넣기 : 프로젝트에 라이브러리 빌드 처리)
  • JSTL 구성 라이브러리

    • Core : EL 지원 태그, 프로그램의 흐름을 제어 태그, URL 주소 관리하는 태그등을 제공
    • Formatter : 숫자 또는 날짜와 시간의 형식을 변경 태그, 국제화 태그, 다국어 지원 태그등을 제공
    • SQL : 테이블에 대한 행 삽입,변경,삭제,검색 기능의 태그 제공
    • XML : XML 문서에 대한 처리 기능의 태그 제공
    • Functions : 문자열 처리 기능의 EL 함수 제공

💡 Core 태그 라이브러리 요약

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

💡 Core 태그 라이브러리 구분


📌 JSTL lib 다운로드

  1. https://tomcat.apache.org 접속

  2. 좌측 Download안의 Taglibs 클릭

  1. Jar Files안의 jar 파일 다운로드

  1. eclipse의 lib에 빌드처리


📕 Core-set 태그

  • taglib Directive를 이용하여 JSTL의 Core 태그 라이브러리를 JSP 문서에 포함해야만 커스텀 태그를 제공받아 사용 가능

    • prefix 속성값은 [c]로 설정
    • <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  • Core tag lib의 EL 지원 태그

  • set 태그 : 객체를 스코프(Scope) 속성값으로 저장(변경)하기 위한 태그

    • scope 속성 : page, request, session, application 중 하나를 속성값으로 설정

      • scope 속성을 생략한 경우 [page] 속성값을 기본값으로 사용)
    • var 속성 : 스코프 속성명을 속성값으로 설정

      • 스코프 속성명이 같은 경우 스코프 속성값 변경 처리
    • value 속성 : 스코프 속성값을 속성값으로 설정

      • value 속성 대신 태그내용으로 스코프 속성값 처리 가능
      • value 속성값으로 EL 사용 가능 (EL 표현식에서 EL 연산자 사용)
      • EL 표현식에 의해 제공받은 스코프 속성값이 Java 객체인 경우 자동으로 toString() 메소드 호출
  • set 태그를 이용하여 스코프 속성값으로 제공된 객체의 필드값 변경 가능 (Setter 메소드 자동 호출)

    • target 속성 : 필드값을 변경할 객체(스코프 속성값 - EL)를 속성값으로 설정
    • property 속성 : 필드값을 변경할 객체의 필드명을 속성값으로 설정
    • <c:set target="${student }" property="num" value="1000"/>
  • remove 태그 : 스코프 속성값을 속성명을 이용하여 삭제하는 태그

    • <c:remove var="student"/>

🐣 예제

<%@page import="xyz.itwill.el.Student"%>
<%@page import="java.util.Date"%>
<%@ 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>MVC</title>
</head>
<body>
	<h1>Core - EL 지원 태그</h1>
	<hr>
	<c:set var="su" value="10" scope="page"/>
	<p>su = ${su }</p>
	
	<%-- 스코프 속성명이 같은 경우 스코프 속성값 변경 처리 --%>
	<%-- value 속성 대신 태그내용으로 스코프 속성값 처리 가능 --%>
	<c:set var="su">20</c:set>
	<p>su = ${su }</p>
	
	<%-- value 속성값으로 EL 사용 가능 - EL 표현식에서 EL 연산자 사용 --%>
	<c:set var="tot" value="${su+10 }"/>
	<p>tot = ${tot }</p>
	
	<c:set var="name" value="홍길동"/>
	<p>name = ${name }</p>
	
	<c:set var="now" value="<%=new Date() %>"/>
	<%-- EL 표현식에 의해 제공받은 스코프 속성값이 Java 객체인 경우 자동으로 toString() 메소드 호출 --%>
	<p>now = ${now }</p>
	<p>now.getTime() = ${now.getTime() }</p>
	<p>now.time = ${now.time }</p>
	
	<c:set var="student" value="<%=new Student() %>"/>
	<%-- Student 클래스에 toString() 메소드가 오버라이드 선언되지 않아 Object 클래스의 toString() 메소드 호출 --%>
	<p>student = ${student }</p>
	<p>학번 = ${student.num }, 이름 = ${student.name }</p>
	
	<%-- set 태그를 이용하여 스코프 속성값으로 제공된 객체의 필드값 변경 가능 - Setter 메소드 자동 호출 --%>
	<%-- target 속성 : 필드값을 변경할 객체(스코프 속성값 - EL)를 속성값으로 설정 --%>
	<%-- property 속성 : 필드값을 변경할 객체의 필드명을 속성값으로 설정 --%>
	<c:set target="${student }" property="num" value="1000"/>
	<c:set target="${student }" property="name" value="홍길동"/>
	<p>학번 = ${student.num }, 이름 = ${student.name }</p>
	
	<%-- remove 태그 : 스코프 속성값을 속성명을 이용하여 삭제하는 태그 --%>
	<c:remove var="student"/>
	<p>student = ${student }</p>
</body>
</html>





📕 Core-out 태그

  • out 태그 : 값(EL - 스코프 속성값)을 클라이언트에게 전달하기 위한 출력 태그

  • 스코프 속성값으로 HTML 태그가 포함된 문자열(String 객체) 저장

    • EL을 사용하여 HTML 태그가 포함된 속성값을 문자열로 제공받아 출력할 경우 HTML 태그로 처리되어 출력
    • out 태그를 사용하여 HTML 태그가 포함된 속성값을 문자열로 제공받아 출력할 경우 HTML 태그도 문자열로 처리되어 출력


🐣 예제

<%@ 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>MVC</title>
</head>
<body>
	<h1>Core - EL 지원 태그</h1>
	<hr>
	<c:set var="num" value="100"/>
	<p>정수값 = ${num }</p>
	<%-- out 태그 : 값(EL - 스코프 속성값)을 클라이언트에게 전달하기 위한 출력 태그 --%>
	<p>정수값 = <c:out value="${num }"/></p>
	<hr>
	<%-- 스코프 속성값으로 HTML 태그가 포함된 문자열(String 객체) 저장 --%>
	<c:set var="html" value="<font size='7' color='red'>안녕하세요.</font>"/>
	<%-- EL을 사용하여 HTML 태그가 포함된 속성값을 문자열로 제공받아 출력할 경우 HTML 태그로
	처리되어 출력 --%>
	<p>html = ${html }</p>
	<%-- out 태그를 사용하여 HTML 태그가 포함된 속성값을 문자열로 제공받아 출력할 경우 
	HTML 태그도 문자열로 처리되어 출력 --%>
	<p>html = <c:out value="${html }"/></p>
</body>
</html>





📙 Core-if 태그

  • if 태그 : 조건에 대한 결과에 따라 태그내용의 포함 여부를 선택하는 태그

    • test 속성 : false 또는 true 중 하나를 속성값으로 설정
    • test 속성값이 [false]인 경우 태그내용을 포함하지 않고 [true]인 경우에만 태그내용 포함
    • test 속성값으로 EL 연산자를 사용하여 false 또는 true 중 하나를 제공받아 사용 가능
    • test 속성값으로 EL로 제공받은 스코프 속성값 사용 가능
    • test 속성값으로 EL 사용시 EL 표현식에서 EL 연산자를 사용하여 false 또는 true 중 하나를 제공받아 사용 가능

🐣 예제

<%@ 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>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<c:if test="true">
		<p>test 속성값이 [true]인 경우 태그 내용 출력-1</p>
	</c:if>
	
	<c:if test="false">
		<p>test 속성값이 [true]인 경우 태그 내용 출력-2</p>
	</c:if>
	
	<c:set var="sw" value="true"/>
	<%-- test 속성값으로 EL로 제공받은 스코프 속성값 사용 가능 --%>
	<c:if test="${sw }">	
		<p>test 속성값이 [true]인 경우 태그 내용 출력-3</p>
	</c:if>
	<hr>
	<c:set var="num" value="10"/>
	<%-- test 속성값으로 EL 사용시 EL 표현식에서 EL 연산자를 사용하여 false 또는 true 중 
	하나를 제공받아 사용 가능 --%>
	<c:if test="${num%2!=0 }">${num } = 홀수</c:if>
	<c:if test="${num%2==0 }">${num } = 짝수</c:if>
	<hr>
	<c:set var="num" value="11"/>
	<c:if test="${num mod 2 ne 0 }">${num } = 홀수</c:if>
	<c:if test="${num mod 2 eq 0 }">${num } = 짝수</c:if>
	<hr>
	<c:set var="score" value="80"/>
	<c:if test="${score <= 100 && score >= 0 }">${score }점은 정상적인 점수입니다.</c:if>
	<c:if test="${score > 100 || score < 0 }">${score }점은 비정상적인 점수입니다.</c:if>
	<hr>
	<c:set var="score" value="800"/>
	<c:if test="${score le 100 and score ge 0 }">${score }점은 정상적인 점수입니다.</c:if>
	<c:if test="${score gt 100 or score lt 0 }">${score }점은 비정상적인 점수입니다.</c:if>
	<hr>
	<c:set var="name" value="홍길동"/>
	<c:if test="${empty(name) }">
		<p>name 속성명으로 저장된 속성값은 없습니다.</p>
	</c:if>
	<c:if test="${!empty(name) }">
		<p>name 속성명으로 저장된 속성값은 [${name }]입니다.</p>
	</c:if>
</body>
</html>





📙 Core-choose 태그

  • choose 태그 : 조건에 대한 결과에 따라 태그내용의 포함 여부를 선택하기 위한 상위태그

  • 하위태그를 이용하여 태그내용의 포함 여부 선택

    • 하위태그 : when 태그(1개 이상), otherwise 태그(0개 또는 1개)
    • choose 태그에는 하위태그외에 다른 코드가 존재할 경우 에러 발생 - JSP 주석 예외
  • when 태그 : 조건에 대한 결과에 태그내용의 포함 여부를 선택하기 위한 태그

    • test 속성 : false 또는 true 중 하나를 속성값으로 설정
    • test 속성값이 [false]인 경우 태그내용을 포함하지 않고 다음 when 태그 또는 otherwise 태그로 이동
    • test 속성값이 [true]인 경우 태그내용을 포함 후 choose 태그 종료
  • otherwise 태그 : when 태그의 모든 조건이 거짓(false)인 경우 태그내용을 무조건 포함하기 위한 태그


🐣 예제

<%@ 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>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<c:set var="choice" value="4"/>
    <c:choose>
		<c:when test="${choice == 1 }">
			<p>수성으로 이동합니다.</p>
		</c:when>
		<c:when test="${choice == 2 }">
			<p>금성으로 이동합니다.</p>
		</c:when>
		<c:when test="${choice == 3 }">
			<p>화성으로 이동합니다.</p>
		</c:when>
		<%-- otherwise 태그 : when 태그의 모든 조건이 거짓(false)인 경우 태그내용을 무조건 포함하기 위한 태그 --%>
		<c:otherwise>
			<p>지구로 이동합니다.</p>
		</c:otherwise>
	</c:choose>
	<hr>
	<c:set var="num" value="10"/>
	<c:choose>
		<c:when test="${num % 2 != 0 }">${num } = 홀수</c:when>
		<c:otherwise>${num } = 짝수</c:otherwise>
	</c:choose>
</body>
</html>





🎀 연습문제 (학점계산)


🐣 form

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<form action="core_choose_action.jsp" method="post">
		점수입력 : <input type="text" name="score">
		<button type="submit">전송</button>
	</form>
</body>
</html>





🐣 action

<%@ 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>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<c:choose>
		<c:when test="${!empty(param.score) }">
			<p>입력점수 = ${param.score }점</p>
			<c:choose>
				<c:when test="${param.score<=100 && param.score>=90 }">
					<c:set var="grade" value="A"/>
				</c:when>
				<c:when test="${param.score<=89 && param.score>=80 }">
					<c:set var="grade" value="B"/>
				</c:when>
				<c:when test="${param.score<=79 && param.score>=70 }">
					<c:set var="grade" value="C"/>
				</c:when>
				<c:when test="${param.score<=69 && param.score>=60 }">
					<c:set var="grade" value="D"/>
				</c:when>
				<c:otherwise>
					<c:set var="grade" value="F"/>
				</c:otherwise>
			</c:choose>
			<p>${param.score }점은 ${grade }학점입니다.</p>
		</c:when>
		<c:otherwise>
			<p style="color: red;">입력페이지에서 점수를 반드시 입력해 주세요.</p>
			<a href="core_choose_form.jsp">입력페이지 이동</a>
		</c:otherwise>
	</c:choose>
</body>
</html>





📙 Core-forEach 태그

  • forEach 태그 : 태그내용을 반복적으로 포함하기 위한 태그

    • var 속성 : 스코프 속성명을 속성값으로 설정
    • begin 속성 : 스코프 속성값으로 저장된 시작값(Integer)을 속성값으로 설정
    • end 속성 : 스코프 속성값으로 저장된 종료값(Integer)을 속성값으로 설정
    • step 속성 : 스코프 속성값의 증가값(Integer)을 속성값으로 설정

🐣 예제


<%@ 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>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<c:forEach var="i" begin="1" end="5" step="1">
		<p>${i }번째 출력되는 내용입니다.</p>
	</c:forEach>
	<hr>
	<%-- 1~100 범위의 정수들의 합계를 계산하여 출력 --%>
	<c:forEach var="i" begin="1" end="100" step="1">
		<c:set var="tot" value="${tot+i }"/>
	</c:forEach>
	<p>1~100 범위의 정수들의 합계 = ${tot }</p>
	<hr>
	<%-- 구구단을 표(Table) 형식으로 출력 --%>
	<table>
		<c:forEach var="i" begin="1" end="9" step="1">
			<tr>
			<c:forEach var="j" begin="2" end="9" step="1">
				<td width="100">${j} * ${i} = ${i*j }</td>
			</c:forEach>		
			</tr>
		</c:forEach>
	</table>
</body>
</html>





📙 향상된 forEach 태그

  • forEach 태그를 사용하여 스코프 속성값으로 제공된 배열 또는 콜렉션 객체의 요소를 하나씩 얻어와 반복 처리하는 기능 제공

    • var 속성 : 배열 또는 콜렉션 객체의 요소값을 제공받아 저장하기 위한 스코프 속성명을 속성값을 설정
    • items 속성 : 반복 처리할 배열 또는 콜렉션 객체를 속성값으로 설정 (EL 사용)

🐣 form

<%@page import="java.util.ArrayList"%>
<%@page import="xyz.itwill.el.Student"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String[] nameArray={"홍길동","임꺽정","전우치","일지매","장길산"};
	request.setAttribute("nameArray", nameArray);
	
	List<Student> studentList=new ArrayList<Student>();
	studentList.add(new Student(1000,"홍길동"));
	studentList.add(new Student(2000,"임꺽정"));
	studentList.add(new Student(3000,"전우치"));
	studentList.add(new Student(4000,"일지매"));
	studentList.add(new Student(5000,"장길산"));
	request.setAttribute("studentList", studentList);
	
	request.getRequestDispatcher("core_forEach_two.jsp").forward(request, response);
%>





🐣 출력 예제

  • forEach 태그를 사용하여 스코프 속성값으로 제공된 배열 또는 콜렉션 객체의 요소를 하나씩 얻어와 반복 처리하는 기능 제공

    • var 속성 : 배열 또는 콜렉션 객체의 요소값을 제공받아 저장하기 위한 스코프 속성명을 속성값을 설정
    • items 속성 : 반복 처리할 배열 또는 콜렉션 객체를 속성값으로 설정 (EL 사용)

<%@ 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>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<ul>
		<li>${nameArray[0] }</li>
		<li>${nameArray[1] }</li>
		<li>${nameArray[2] }</li>
		<li>${nameArray[3] }</li>
		<li>${nameArray[4] }</li>
	</ul>
	<hr>
	<ul>
	<c:forEach var="i" begin="0" end="4" step="1">
		<li>${nameArray[i] }</li>
	</c:forEach>		
	</ul>
	<hr>
	<ul>
	<c:forEach var="name" items="${nameArray }">	
		<li>${name }</li>
	</c:forEach>
	</ul>
	<hr>
	<c:forEach var="student" items="${studentList }">
		<div>학번 = ${student.num }, 이름 = ${student.name }</div>
	</c:forEach>
</body>
</html>





📙 Core-forTokens 태그

  • forTokens 태그 : 스코프 속성값으로 저장된 문자열(String 객체)을 특정 문자열로 분리하여 반복 처리하는 태그 (구분자로 분리된 각각의 토큰 처리)

    • items 속성 : 분리 처리하기 위한 문자열을 속성값으로 설정 (EL 사용 가능)
    • delims 속성 : 문자열을 분리하기 위한 구분자를 속성값으로 설정
    • var 속성 : 분리된 문자열을 하나씩 얻어와 스코프 속성값으로 저장하기 위한 스코프 속성명을 속성값으로 설정

🐣 예제

<%@ 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>MVC</title>
</head>
<body>
	<h1>Core - 흐름 제어 태그</h1>
	<hr>
	<c:set var="phone" value="010-1234-5678"/>
	<p>전화번호 = ${phone }</p>
	<hr>
	<c:forTokens items="${phone }" delims="-" var="num">
		<div>${num }</div>
	</c:forTokens>
</body>
</html>





📒 Core-import 태그

  • import 태그 : 다른 웹프로그램을 요청하여 결과를 응답받아 포함하는 태그

    • JSP의 include 태그와 유사한 기능
    • url 속성 : 요청 웹프로그램의 URL 주소를 속성값으로 설정
  • JSP의 include 태그는 현재 서버의 웹프로그램만 요청하여 실행 결과를 응답받아 포함하지만 import 태그는 다른 서버의 웹프로그램을 요청하여 실행 결과를 응답받아 포함 가능

    • HTML의 iframe 태그와 유사한 기능을 제공
  • URL 관리 태그에서는 param 태그를 하위태그로 사용하여 값 전달 가능

    • param 태그 : 요청 웹프로그램에게 값을 전달하기 위한 태그
    • URL 관리 태그의 종속 태그
    • URL 관리 태그에 param 태그를 제외한 코드가 존재할 경우 에러 발생 (JSP 주석 예외)

🐣 응답 form

<%@ 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>MVC</title>
</head>
<body>
	<h1>Core - URL 관리 태그</h1>
	<hr>
	<p>core_import_source.jsp 문서의 응답 결과입니다.</p>
	
	<%-- <c:import url="core_import_target.jsp"/> --%>
	
	<%-- JSP의 include 태그는 현재 서버의 웹프로그램만 요청하여 실행 결과를 응답받아 포함하지만 
	import 태그는 다른 서버의 웹프로그램을 요청하여 실행 결과를 응답받아 포함 가능 --%>
	<%-- => HTML의 iframe 태그와 유사한 기능을 제공 --%>
	<%-- <c:import url="https://www.naver.com"/>  --%>
	
	<%-- URL 관리 태그에서는 param 태그를 하위태그로 사용하여 값 전달 가능 --%>
	<c:import url="core_import_target.jsp">
		<%-- param 태그 : 요청 웹프로그램에게 값을 전달하기 위한 태그 --%>
		<%-- => URL 관리 태그의 종속 태그 --%>
		<%-- => URL 관리 태그에 param 태그를 제외한 코드가 존재할 경우 에러 발생 - JSP 주석 예외 --%>
		<c:param name="name" value="홍길동"/>
	</c:import>
</body>
</html>





🐣 import된 form

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Core - URL 관리 태그</h1>
	<hr>
	<p>core_import_target.jsp 문서의 응답 결과입니다.</p>
	<p>${param.name }님, 안녕하세요.</p>
</body>
</html>





📒 Core-redirect 태그

  • redirect 태그 : 클라이언트에게 URL 주소를 전달하여 재요청하도록 응답 처리하는 태그

    • url 속성 : 클라이언트에게 전달하여 재요청하기 위한 URL 주소를 속성값으로 설정

🐣 입력값 전달 form

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Core - URL 관리 태그</h1>
	<hr>
	<form action="core_redirect_action.jsp" method="post">
		이름 : <input type="text" name="name">
		<button type="submit">전송</button>
	</form>
</body>
</html>





🐣 응답 처리

<%@ 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>MVC</title>
</head>
<body>
	<h1>Core - URL 관리 태그</h1>
	<hr>
	<c:choose>
		<c:when test="${!empty(param.name) }">
			<p>${param.name }님, 안녕하세요.</p>
		</c:when>
		<c:otherwise>
			<%-- redirect 태그 : 클라이언트에게 URL 주소를 전달하여 재요청하도록 응답 처리하는 태그 --%>
			<%-- url 속성 : 클라이언트에게 전달하여 재요청하기 위한 URL 주소를 속성값으로 설정 --%>
			<c:redirect url="core_redirect_form.jsp"/>
		</c:otherwise>
	</c:choose>
</body>
</html>





📒 Core-URL 태그

  • 웹자원을 상대경로로 표현하여 제공

    • 상대경로 : 현재 요청 웹프로그램의 경로를 기준으로 웹자원의 경로를 표현하는 방법
    • <img src="images/Koala.jpg" width="200">
    • 문제점) MVC 디자인 패턴을 이용한 JSP Model-2 방식으로 웹프로그램 작성시 요청 웹프로그램(컨트롤러)의 경로와 응답 웹프로그램(뷰)의 경로가 다른 경우 404 에러 발생
    • 해결법) 웹자원의 경로를 절대경로로 표현하여 제공
  • 절대경로 : 최상위 디렉토리를 기준으로 웹자원의 경로를 표현하는 방법

    • CSL(HTML, CSS, JavaScript 등)에서는 서버의 디렉토리를 최상위 디렉토리로 처리
    • <img src="/mvc/jstl/images/Koala.jpg" width="200">
    • 문제점) 컨텍스트 이름이 변경될 경우 컨텍스트 경로가 변경되어 404 에러 발생
    • 해결법) request 객체의 메소드를 호출하여 컨텍스트 경로를 반환받아 사용
  • request.getContextPath() 메소드를 호출하여 컨텍스트 경로를 반환받아 절대경로로 표현

    • <img src="<%=request.getContextPath() %>/jstl/images/Koala.jpg" width="200">
  • EL 표현식에서 pageContext 내장객체를 사용하여 컨텍스트 경로를 제공받아 절대경로로 표현

    • <img src="${pageContext.request.contextPath }/jstl/images/Koala.jpg" width="200">
  • url 태그 : 컨텍스트 경로가 포함된 웹자원의 절대경로를 제공하는 태그

    • value 속성 : 컨텍스트 경로를 제외한 웹자원의 절대경로를 속성값으로 설정
    • <img src="<c:url value="/jstl/images/Koala.jpg"/>" width="200">

🐣 예제


<%@ 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>MVC</title>
</head>
<body>
	<h1>Core - URL 관리 태그</h1>
	<hr>
	<%-- 상대경로 : 현재 요청 웹프로그램의 경로를 기준으로 웹자원의 경로를 표현하는 방법 --%>
	<img src="images/Koala.jpg" width="200">
	
	<%-- 절대경로 : 최상위 디렉토리를 기준으로 웹자원의 경로를 표현하는 방법 --%>
	<img src="/mvc/jstl/images/Koala.jpg" width="200">
	
	<%-- request.getContextPath() 메소드를 호출하여 컨텍스트 경로를 반환받아 절대경로로 표현 --%>
	<img src="<%=request.getContextPath() %>/jstl/images/Koala.jpg" width="200">
	
	<%-- EL 표현식에서 pageContext 내장객체를 사용하여 컨텍스트 경로를 제공받아 절대경로로 표현 --%>
	<img src="${pageContext.request.contextPath }/jstl/images/Koala.jpg" width="200">
	
	<%-- url 태그 : 컨텍스트 경로가 포함된 웹자원의 절대경로를 제공하는 태그 --%>
	<%-- value 속성 : 컨텍스트 경로를 제외한 웹자원의 절대경로를 속성값으로 설정 --%>
	<img src="<c:url value="/jstl/images/Koala.jpg"/>" width="200">
</body>
</html>





📗 Formatter-formatDate 태그

  • taglib Directive를 이용하여 JSTL의 Formatter 태그 라이브러리를 JSP 문서에 포함해야만 커스텀 태그를 제공받아 사용 가능

    • prefix 속성값은 [fmt]로 설정
  • formatDate 태그 : Date 객체에 저장된 날짜와 시간을 원하는 형식의 문자열로 변환하여 제공하는 태그

    • SimpleDateFormat 클래스 참조
    • value 속성 : Date 객체를 속성값으로 설정 (EL 사용 가능)
    • type 속성 : date(날짜), time(시간), both(날짜와 시간) 중 하나를 속성값으로 설정
  • 속성값이 [date]인 경우 기본적으로 [yyyy.M.d.] 형식의 문자열로 변환되어 제공

    • dateStyle 속성 : full 또는 short 중 하나를 속성값으로 설정
    • dateStyle 속성값이 [full]인 경우 [yyyy년 M월 d일 E요일] 형식의 문자열로 변환되어 제공
    • dateStyle 속성값이 [short]인 경우 [yy.M.d.] 형식의 문자열로 변환되어 제공
  • 속성값이 [time]인 경우 기본적으로 [a h:mm:ss] 형식의 문자열로 변환되어 제공

    • timeStyle 속성 : full 또는 short 중 하나를 속성값으로 설정
    • timeStyle 속성값이 [full]인 경우 [a h시 mm분 ss초 z] (z : time zone) 형식의 문자열로 변환되어 제공
    • timeStyle 속성값이 [short]인 경우 [a h:mm] 형식의 문자열로 변환되어 제공
  • 속성값이 [both]인 경우 기본적으로 [yyyy.M.d. a h:mm:ss] 형식의 문자열로 변환되어 제공
  • pattern 속성 : 날짜와 시간을 변환하기 위한 패턴문자가 포함된 문자열을 속성값으로 설정
    • <fmt:formatDate value="${now }" pattern="yyyy-MM-dd HH:mm:ss"/>
  • timeZone 태그 : 타임존(TimeZone)을 변경하는 태그

    • value 속성 : 변경할 타임존(대륙/도시)을 속성값으로 설정
    • <fmt:timeZone value="Asia/Hong_Kong"/>

🐣 예제

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%-- taglib Directive를 이용하여 JSTL의 Formatter 태그 라이브러리를 JSP 문서에 포함해야만
커스텀 태그를 제공받아 사용 가능 - prefix 속성값은 [fmt]로 설정 --%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Formatter - 날짜와 시간 변환 태그</h1>
	<hr>
	<%-- 서버 시스템의 현재 날짜와 시간이 저장된 Date 객체를 생성하여 스코프 속성값으로 저장 --%>
	<c:set var="now" value="<%=new Date() %>"/>
	<%-- Date 객체의 toString() 메소드를 호출하여 Date 객체에 저장된 날짜와 시간을 문자열로 제공받아 출력 --%>
	<p>now = ${now }</p>
	
	<%-- formatDate 태그 : Date 객체에 저장된 날짜와 시간을 원하는 형식의 문자열로 변환하여 제공하는 태그 --%>
	<%-- => SimpleDateFormat 클래스 참조 --%>
	<%-- value 속성 : Date 객체를 속성값으로 설정 - EL 사용 가능 --%>
	<%-- type 속성 : date(날짜), time(시간), both(날짜와 시간) 중 하나를 속성값으로 설정 --%>
	<%-- => 속성값이 [date]인 경우 기본적으로 [yyyy.M.d.] 형식의 문자열로 변환되어 제공 --%>
	<p>now(날짜) = <fmt:formatDate value="${now }" type="date"/>

	<%-- dateStyle 속성 : full 또는 short 중 하나를 속성값으로 설정 --%>
	<%-- => dateStyle 속성값이 [full]인 경우 [yyyy년 M월 d일 E요일] 형식의 문자열로 변환되어 제공 --%>
	<%-- => dateStyle 속성값이 [short]인 경우 [yy.M.d.] 형식의 문자열로 변환되어 제공 --%>
	<p>now(날짜) = <fmt:formatDate value="${now }" type="date" dateStyle="full"/>
	<p>now(날짜) = <fmt:formatDate value="${now }" type="date" dateStyle="short"/>

	<%-- type 속성 : date(날짜), time(시간), both(날짜와 시간) 중 하나를 속성값으로 설정 --%>
	<%-- => 속성값이 [time]인 경우 기본적으로 [a h:mm:ss] 형식의 문자열로 변환되어 제공 --%>
	<p>now(시간) = <fmt:formatDate value="${now }" type="time"/>

	<%-- timeStyle 속성 : full 또는 short 중 하나를 속성값으로 설정 --%>
	<%-- => timeStyle 속성값이 [full]인 경우 [a h시 mm분 ss초 z] 형식의 문자열로 변환되어 제공 --%>
	<%-- => timeStyle 속성값이 [short]인 경우 [a h:mm] 형식의 문자열로 변환되어 제공 --%>
	<p>now(시간) = <fmt:formatDate value="${now }" type="time" timeStyle="full"/>
	<p>now(시간) = <fmt:formatDate value="${now }" type="time" timeStyle="short"/>

	<%-- type 속성 : date(날짜), time(시간), both(날짜와 시간) 중 하나를 속성값으로 설정 --%>
	<%-- => 속성값이 [both]인 경우 기본적으로 [yyyy.M.d. a h:mm:ss] 형식의 문자열로 변환되어 제공 --%>
	<p>now(날짜와 시간) = <fmt:formatDate value="${now }" type="both"/>
	<p>now(날짜와 시간) = <fmt:formatDate value="${now }" type="both" dateStyle="full" timeStyle="full"/>
	<p>now(날짜와 시간) = <fmt:formatDate value="${now }" type="both" dateStyle="short" timeStyle="short"/>
	
	<%-- pattern 속성 : 날짜와 시간을 변환하기 위한 패턴문자이 포함된 문자열을 속성값으로 설정 --%>
	<p>now(패턴) = <fmt:formatDate value="${now }" pattern="yyyy-MM-dd HH:mm:ss"/>
	
	<%-- timeZone 태그 : 타임존(TimeZone)을 변경하는 태그 --%>
	<%-- value 속성 : 변경할 타임존(대륙/도시)을 속성값으로 설정 --%>
	<fmt:timeZone value="Asia/Hong_Kong">
		<p>홍콩의 현재 날짜와 시간 = <fmt:formatDate value="${now }" pattern="yyyy-MM-dd HH:mm:ss"/>
	</fmt:timeZone>
</body>
</html>





📗 Formatter-formatNumber 태그

  • formatNumber 태그 : 숫자값을 원하는 형식의 문자열로 변환하여 제공하는 태그

    • DecimalFormat 클래스 참조
    • value 속성 : 변환할 숫자값을 속성값으로 설정 (EL 사용 가능)
    • 속성값으로 숫자가 아닌 문자가 포함된 경우 NumberFormatException 발생
    • type 속성 : number(숫자) 또는 currency(화폐) 중 하나를 속성값으로 설정
    • type 속성을 생략한 경우 [number] 속성값을 기본값으로 사용하여 처리
  • type 속성값이 [number]인 경우 숫자 3자리마다 [,]기호를 삽입된 문자열로 변환되어 제공

    • <p>가격 = <fmt:formatNumber value="${price }" type="number"/>원</p>
  • type 속성값이 [currency]인 경우 앞부분에 화폐단위가 포함되고 숫자 3자리마다 [,]기호를 삽입된 문자열로 변환되어 제공

    • <p>가격 = <fmt:formatNumber value="${price }" type="currency"/></p>
  • pattern 속성 : 숫자값을 변환하기 위한 패턴문자가 포함된 문자열을 속성값으로 설정

    • <p>가격 = <fmt:formatNumber value="${price }" pattern="$##,###,###,##0.00"/></p>
    • # : 숫자가 없을 시 공백으로 출력, 0 : 숫자가 없을 시 0으로 출력

🐣 예제

<%@ 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Formatter - 숫자 변환 태그</h1>
	<hr>
	<c:set var="price" value="1000000000"/>
	<p>가격 = ${price }원</p>
	
	<%-- formatNumber 태그 : 숫자값을 원하는 형식의 문자열로 변환하여 제공하는 태그 --%>
	<%-- value 속성 : 변환할 숫자값을 속성값으로 설정 - EL 사용 가능 --%>
	<%-- => 속성값으로 숫자가 아닌 문자가 포함된 경우 NumberFormatException 발생 --%>
	<%-- type 속성 : number(숫자) 또는 currency(화폐) 중 하나를 속성값으로 설정 --%>
	<%-- => type 속성을 생략한 경우 [number] 속성값을 기본값으로 사용하여 처리 --%>
	<%-- => type 속성값이 [number]인 경우 숫자 3자리마다 [,]기호를 삽입된 문자열로 변환되어 제공 --%>
	<%-- => type 속성값이 [currency]인 경우 앞부분에 화폐단위가 포함되고 숫자 3자리마다 [,]기호를 삽입된 문자열로 변환되어 제공 --%>
	<p>가격 = <fmt:formatNumber value="${price }" type="number"/></p>
	<p>가격 = <fmt:formatNumber value="${price }" type="currency"/></p>
	
	<%-- pattern 속성 : 숫자값을 변환하기 위한 패턴문자가 포함된 문자열을 속성값으로 설정 --%>
	<p>가격 = <fmt:formatNumber value="${price }" pattern="$##,###,###,##0.00"/></p>
</body>
</html>





📘 Functions 태그

  • taglib Directive를 이용하여 JSTL의 Functions 태그 라이브러리를 JSP 문서에 포함해야만 EL 함수를 제공받아 사용 가능

    • prefix 속성값은 [fn]로 설정
  • split 함수 : 문자열을 구분자로 분리하여 배열로 반환하는 함수

    • ${fn:split(phone,'-') }
  • substring 함수 : 문자열을 시작첨자(포함)와 종료첨자(미포함)를 사용해 분리하여 반환하는 함수

    • ${fn:substring(phone,0,3) }
  • replace 함수 : 문자열에서 원하는 문자열을 검색하여 치환 문자열로 변환하여 반환하는 함수

    • ${fn:replace(content,'\\n','<br>') }
  • escapeXml 함수 : 속성값으로 제공된 문자열에 태그 관련 문자가 있는 경우 회피문자로 변환하여 반환하는 함수

    • HTML 태그가 포함된 문자열이 저장된 속성값을 EL로 제공받아 출력할 경우 HTML 태그가 적용된 문자열로 출력
    • HTML 태그가 포함된 문자열이 저장된 속성값을 out 태그로 제공받아 출력할 경우 HTML 태그도 문자열로 적용되어 출력
    • HTML 태그가 포함된 문자열이 저장된 속성값을 escapeXml 함수로 제공받아 출력할 경우 HTML 태그도 문자열로 적용되어 출력
    • ${fn:escapeXml(html) }

🐣 예제

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%-- taglib Directive를 이용하여 JSTL의 Functions 태그 라이브러리를 JSP 문서에 포함해야만
EL 함수를 제공받아 사용 가능 - prefix 속성값은 [fn]로 설정 --%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<h1>Functions - EL 함수</h1>
	<hr>
	<c:set var="phone" value="010-1234-5678"/>
	<p>전화번호 = ${phone }</p>
	<hr>
	<%-- split 함수 : 문자열을 구분자로 분리하여 배열로 반환하는 함수 --%>
	<c:set var="array" value="${fn:split(phone,'-') }"/>
	<c:forEach var="num" items="${array }">
		<div>${num }</div>	
	</c:forEach>
	<hr>
	<%-- substring 함수 : 문자열을 시작첨자(포함)와 종료첨자(미포함)를 사용해 분리하여 반환하는 함수 --%>
	<div>${fn:substring(phone,0,3) }</div>
	<div>${fn:substring(phone,4,8) }</div>
	<div>${fn:substring(phone,9,13) }</div>
	<hr>
	<c:set var="content" value="안녕하세요.\n반갑습니다."/>
	<div>${content }</div>
	<%-- replace 함수 : 문자열에서 원하는 문자열을 검색하여 치환 문자열로 변환하여 반환하는 함수 --%>
	<div>${fn:replace(content,'\\n','<br>') }</div>
	<hr>
	<c:set var="html" value="<font size='7' color='red'>안녕하세요.</font>"/>
	<%-- HTML 태그가 포함된 문자열이 저장된 속성값을 EL로 제공받아 출력할 경우 HTML 태그가 
	적용된 문자열로 출력 --%>
	<div>${html }</div>
	<%-- HTML 태그가 포함된 문자열이 저장된 속성값을 out 태그로 제공받아 출력할 경우 
	HTML 태그도 문자열로 적용되어 출력 --%>
	<div><c:out value="${html }"/></div>
	<%-- escapeXml 함수 : 속성값으로 제공된 문자열에 태그 관련 문자가 있는 경우 회피문자로
	변환하여 반환하는 함수 --%>
	<%-- HTML 태그가 포함된 문자열이 저장된 속성값을escapeXml 함수로 제공받아 출력할 경우 
	HTML 태그도 문자열로 적용되어 출력 --%>
	<div>${fn:escapeXml(html) }</div>
</body>
</html>





profile
Study Log 📂

0개의 댓글