2013/09/23 - [Java/Java EE] - JSP Expression Language(표현 언어 또는 익스프레션 언어)

2013/09/23 - [Java/Java EE] - JSP JSTL(JSP Standard Tag Library) 라이브러리 추가


1. 코어 태그

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

- if-else 또는 변수 지정 같은 논리적인 처리를 위해 사용되는 스크립트 코드를 대체하기 위한 태그를 제공한다.

 기능분류

 태그 

 설명 

 변수 지원

 set

 JSP에서 사용될 변수를 설정한다. 

 remove 

 설정한 변수를 제거한다. 

 흐름 제어

 if 

 조건에 따라 내부 코드를 수행한다. 

 choose 

 다중 조건을 처리할 때 사용한다. 

 forEach

 컬렉션이나 Map의 각 항목을 처리할 때 사용한다. 

 forTokens

 구분자로 분리된 각각의 토큰을 처리할 때 사용한다. 

 URL 처리

 import

 URL을 사용하여 다른 자원의 결과를 삽입한다. 

 redirect

 지정한 경로로 리다이렉트 한다. 

 url

 URL을 재작성 한다. 

 기타 태그

 catch 

 익셉션 처리에 사용된다. 

 out 

 JspWriter에 내용을 알맞게 처리한 후 출력한다. 


1.1. 변수 지원 태그

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


1.1.1 <c:set> 태그

- 첫 번째 사용방법 EL 변수생성에 사용된다.

- <c:set var="변수명" value="값" [scope="영역"] />

- <c:set var="변수명" [scope="영역"]>값</c:set>

- var : 값을 지정할 EL 변수의 이름

- value : 변수의 값을 지정한다. 표현식, EL, 정적인 텍스트를 사용하여 값을 지정할 수 있다.

- scope : 변수를 저장할 영역을 지정한다. (page, request, session, applicaion 기본값은 page)

<!-- value 속성 사용 --> <c:set var="name" value="Gz" scope="page" /> <c:set var="name" value="<%=m.getName() %>" scope="request" /> <c:set var="name" value="${ m.Name } ${ m.Age }" scope="request" /> <!-- 태그의 몸체를 값으로 사용 --> <c:set var="name">Gz</c:set> <c:set var="name"><%= m.getName() %> <%= m.getAge() %></c:set> <c:set var="name">${ m.Name } ${ m.Age }</c:set>


- 두 번째 사용방법 객체의 프로퍼티 값을 설정할 때 사용된다.

- <c:set target="대상" property="프로퍼티이름" value="값" />

- <c:set target="대상" property="프로퍼티이름">값</c:set>

- target : 프로퍼티의 값을 설정할 대상 객체, 표현식이나 EL변수를 지정한다. (자바빈 객체나 Map)

- property : 설정할 프로퍼티 이름, target이 자바빈 객체인 경우 프로퍼티 이름에 해당하는 set 메서드를 제공해주어야 한다. Map인 경우 Map.put(프로퍼티이름, 값)

- value : 설장할 프로퍼티의 값

<% Member member = new Member(); %> <c:set target="<%= member %>" property="name" value="갱짱" /><!-- member.setName("갱짱")과 동일 --> <%= member.getName() %> <c:set var="m" value="<%= member %>" /> <c:set target="${ m }" property="name" value="갱짱" /><!-- member.setName("갱짱")과 동일 --> ${m.name} <% Map<String, String> memberMap = new HashMap<String, String>(); %> <c:set target="<%= memberMap %>" property="갱짱" value="01012345678" /><!-- memberMap.put("갱짱", "01012345678")과 동일 --> <%= memberMap.get("갱짱") %>


- 세 번째 사용방법 #{식} 형식의 Deferred Expression을 값으로 설정할때 사용된다.

- <c:set var="이름" value="#{식}" />

- var : 값을 지정할 EL 변수의 이름

- value : 변수의 값을 지정한다. 표현식, EL, 정적인 텍스트를 사용하여 값을 지정할 수 있다.

<!-- c_set_DeferredExpression.jsp -->

<%@page import="java.util.HashMap"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
	HashMap pref = new HashMap();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>c:set Deferred Expression</title>
</head>
<body>
	<c:set var="pref" value="<%= pref %>" />
	<c:set var="favorColor" value="#{ pref.color }"/>
	
	좋아하는 색 : ${ favorColor }
	
	<br>
	<br>
	
	<c:set target="${ pref }" property="color" value="red" />
	
	설정 이후 좋아하는 색 : ${ favorColor }
</body>
</html>

<!-- 
	실행결과
	
	좋아하는 색 : 

	설정 이후 좋아하는 색 : red
 -->



1.1.2. <c:remove> 태그

- set 태그로 지정한 변수를 삭제할 때 사용된다.

- <c:remove var="var명" scope="영역" />

- var속성과 scope속성은 set 속성과 동일한 의미를 갖는다.

- scope 영역을 지정하지 않으면 동일한 이름의 변수를 모두 삭제된다.


1.2. 흐름 제어 태그

- JSTL 태그를 사용하여 흐름을 제어 처리한다.


1.2.1. <c:if> 태그

- 자바에서의 if 문과 비슷한 기능을 제공한다.

- <c:if test="조건"> . . . </c:if>

- test 속성에는 true나 false를 리턴하는 조건문이 오고 true일 경우 <c:if>태그의 몸체 내용이 처리된다. true 또는 false 그리고 EL 또는 정적 문자열을 가질 수 있다.

- <c:if test="조건" var="결과를 저장할 변수명" />

- var 속성에 지정한 변수에 test 속성에 계산 결과를 저장할 수 있다.

<!-- c_if.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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>c:if</title>
</head>
<body>
	<c:if test="true">
		항상 실행된다.<br>
	</c:if>
	
	<c:if test="false">
		항상 실행되지않는다.<br>
	</c:if>
	
	<c:if test="true 나 false 값이 아닌 텍스트">
		항상 실행되지않는다.<br>
	</c:if>
	
	<c:if test="${ param.name == 'bk' }">
		EL 결과 값이 true 일 때 실행된다.<br>
		name 파라미터의 값 : ${ param.name}<br>
	</c:if>
	
	<% Boolean flag = true; %>
	<c:if test="<%= flag %>">
		표현식 결과값이 true 인 경우 실행된다.<br>
	</c:if>
</body>
</html>

<!-- 
	실행결과
	
	항상 실행된다.
	표현식 결과값이 true 인 경우 실행된다.
 -->
 
 <!-- 
 	파라미터 값 추가 /c_if.jsp?name=bk
 	
 	실행결과
 	
 	항상 실행된다.
	EL 결과 값이 true 일 때 실행된다.
	name 파라미터의 값 : bk
	표현식 결과값이 true 인 경우 실행된다.
  -->



1.2.2. <c:choose>, <c:when>, <c:otherwise> 태그

- 자바에서의 switch 구문과 if - else 블록을 혼합한 형태이다.

<c:choose>

<c:when test="조건1">

. . .

</c:when>

<c:when test="조건2">

. . .

</c:when>

<c:when test="조건3">

. . .

</c:when>

<c:otherwise>

. . .

</c:otherwise>

</c:choose>

- <c:when> 태그의 test 속성의 결과값이 true인 첫번째 태그의 내부 블럭을 수행하고 그 이후의 <c:when> 태그는 실행되지 않는다.

- <c:when> 태그의 test 결과 값이 false면 <c:otherwise> 태그가 실행된다. <c:otherwise> 태그는 필수는 아니다.

<!-- c_choose.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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>c:choose</title>
</head>
<body>
	<ul>
	<c:choose>
		<c:when test="${ param.flag == 0 }">
			<li>파라미터 flag 의 값은 0 입니다.
		</c:when>
		<c:when test="${ param.flag == 1 }">
			<li>파라미터 flag 의 값은 1 입니다.
		</c:when>
		<c:when test="${ param.flag == 2 }">
			<li>파라미터 flag 의 값은 2 입니다.
		</c:when>
		<c:otherwise>
			<li>파라미터 flag 의 값은 0,1,2 중에 하나를 입력해주세요.
		</c:otherwise>
	</c:choose>
	</ul>
</body>
</html>

<!-- 
	/c_choose.jsp?flag=0 실행결과
	
	파라미터 flag 의 값은 0 입니다.
 -->
 
<!-- 
	/c_choose.jsp?flag=1 실행결과
	
	파라미터 flag 의 값은 1 입니다.
 -->
 
<!-- 
	/c_choose.jsp?flag=2 실행결과
	
	파라미터 flag 의 값은 2 입니다.
 -->
 
<!-- 
	/c_choose.jsp 실행결과 or 그 외에 flag 값 실행결과
	
	파라미터 flag 의 값은 0,1,2 중에 하나를 입력해주세요.
 -->



1.2.3. <c:forEach> 태그

- 자바의 for, do-while 형태이다.

- array, Collection, Map 에 저장되어 있는 값들을 순차적으로 처리할 때 사용할 수 있는 태그이다.

- <c:forEach var="변수" items="아이템" begin="시작값" end="끝값" step="증가값"> ${ 변수 } </c:forEach>

- item : array, Collection, Map 등이 올수 있다.

- begin : 초기값

- end  : 끝값

- step : 증가값

- 단, Iterator, Enumeration, Map의 경우 삽입한 순서와 읽어오는 순서가 일치하지 않을 수 있기 때문에 begin, step, end 속성은 잘 쓰지 않는다.

- varstatus : 루프 정보를 담는 LoopTagStatus 객체를 저장할 변수명을 값으로 갖는다.

- index : 루프 실행에서 현재 인덱스

- count : 루프 실행 회수

- begin : begin 속성 값

- end : end 속성 값

- step : step 속성 값

- first : 현재 실행이 첫 번째 실행인 경우 true

- last : 현재 실행이 루프의 마지막 실행인 경우 true

- current : 컬렉션 중 현재 루프에서 사용할 객체

<!-- c.forEach.jsp --> <%@page import="java.util.HashMap"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <% String[] sports = { "축구", "야구", "농구", "골프", "수영", "볼링"}; HashMap map = new HashMap(); map.put("name", "Gz"); map.put("age", "25"); map.put("tel", "010-1234-5678"); map.put("date", new java.util.Date()); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Ic:forEach</title> </head> <body> <h1>1부터 100까지의 홀수의 합 : <c:set var="sum" value="0" /> <c:forEach var="i" begin="1" end="100" step="2"> <c:set var="sum" value="${ sum + i }" /> </c:forEach> ${ sum }</h1> <hr><!-- ------------------------------------------------ --> <h1>구구단</h1> <c:forEach var="i" begin="1" end="9"> <c:forEach var="j" begin="1" end="9"> ${ i } * ${ j } = ${ i * j }<br> </c:forEach> <br> </c:forEach> <hr><!-- ------------------------------------------------ --> <h1>스포츠 배열 2번째 값부터 3개만 출력</h1> <c:set var="sportsArray" value="<%= sports %>" /> <c:forEach var="i" items="${ sportsArray }" begin="1" end="3" step="1" varStatus="status"> i 값 : ${ i }<br> 루프 실행 현재 인덱스 값 : ${ status.index }<br> 루프 실행 횟수 : ${ status.count }<br> begin 값 : ${ status.begin }<br> end 값 : ${ status.end }<br> step 값 : ${ status.step }<br> <br> </c:forEach> <hr><!-- ------------------------------------------------ --> <h1>Map</h1> <c:set var="memberMap" value="<%= map %>" /> <c:forEach var="i" items="${ memberMap }"> ${ i.key } : ${ i.value }<br> </c:forEach> </body> </html> <!-- 실행결과 1부터 100까지의 홀수의 합 : 2500 --------------------------------------------------------- 구구단 1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5 1 * 6 = 6 1 * 7 = 7 1 * 8 = 8 1 * 9 = 9 2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27 . . . 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 8 * 9 = 72 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81 --------------------------------------------------------- 스포츠 배열 2번째 값부터 3개만 출력 i 값 : 야구 루프 실행 현재 인덱스 값 : 1 루프 실행 횟수 : 1 begin 값 : 1 end 값 : 3 step 값 : 1 i 값 : 농구 루프 실행 현재 인덱스 값 : 2 루프 실행 횟수 : 2 begin 값 : 1 end 값 : 3 step 값 : 1 i 값 : 골프 루프 실행 현재 인덱스 값 : 3 루프 실행 횟수 : 3 begin 값 : 1 end 값 : 3 step 값 : 1 --------------------------------------------------------- Map tel : 010-1234-5678 age : 25 name : Gz date : Wed Sep 25 17:10:45 KST 2013 -->



1.2.4. <c:forTokens> 태그

- 자바의 Tokenizer와 같은 기능을 제공하는 태그이다.

<c:forTokens var="token" items="문자열" delims="구분자"> ${ token } </c:forTokens>

- item 속성으로 전달받은 문자열을 delims에 구분자를 이용해서 나눈뒤 var 변수에 저장한다.


<!-- c_forTokens.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <% String text = "축구,야구,농구,배구,골프,수영"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>c:forTokens</title> </head> <body> <c:set var="text" value="<%= text %>"/> <c:forTokens var="sports" items="${ text }" delims=","> ${ sports } &nbsp; </c:forTokens> <hr><!-- ---------------------------------------------------- --> <c:forTokens var="fruit" items="토마토^귤^포도^오렌지^복숭아" delims="^"> ${ fruit } &nbsp; </c:forTokens> </body> </html> <!-- 실행결과 축구 야구 농구 배구 골프 수영 -------------------------------------------- 토마토 귤 포도 오렌지 복숭아 -->



1.3. URL 처리 태그

- 내부/외부 자원의 삽입(<c:import>), URL 생성(<c:url>), 리다이렉트 처리(<c:redirect>) 세가지 기능을 제공한다.


1.3.1. <c:import> 태그

- 특정 URL의 결과를 읽어와 현재 위치에 삽입하거나 EL 변수에 저장할때 사용한다.

- 동일한 웹 어플리케이션 뿐만 아니라 외부의 다른 자원을 읽어와 포함시킨다.

<c:import url="URL" var="변수명" scope="영역" charEncoding="캐릭터셋"></c:import>

- var 속성을 명시하면 해당 URL에서 읽어온 데이터를 scope에 지정된 영역의 var 속성에 명시한 EL변수에 저장한다.

- var 속성을 지정하지 않으면 태그의 위치에 URL로부터 읽어온 데이터 결과를 출력한다.

- url 속성은 절대URL(완전한 URL) 또는 상대URL(웹 어플리케이션 내에서의 절대 경로 또는 현재 JSP에 대한 상대 경로)을 입력할 수 있다.

- 절대URL

- java.net.URL 그리고 java.net.URLCOnnection 을 이용해서 데이터를 읽어온다.

- charEndoing 속성 값을 지정했다면 명시된 캐릭터 인코딩 이용

- URLConnection.getContentType() 메서드가 리턴한 값이 인코딩을 포함하고 있으면 이용

- 그렇지 않다면 ISO-8859-1 을 이용

- 상대URL

- <jsp:include> 액션 태그와 동일한 방식으로 동작한다.

<jsp:include> 액션 태그와는 달리 웹 어플리케이션에 속한 자원의 결과를 변수에 보관한 뒤 필요에 따라 처리를 할 수 있다.

- 요청 파라미터는 URL에 직접 입력 또는 <c:param> 태그를 이용하는 방식이 있다.

<!-- c_import.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <% request.setCharacterEncoding("UTF-8"); %> <c:choose> <c:when test="${ param.type == 'java' }"> <c:import url="http://gangzzang.tistory.com/category/Java/Java%20SE" />

</c:when> <c:when test="${ param.type == 'jsp' }"> <c:import url="http://gangzzang.tistory.com/category/Java/Java%20EE" />

</c:when> <c:when test="${ param.type == 'youtube' }"> <c:import url="http://www.youtube.com/results"> <c:param name="search_query" value="독도" /> </c:import> </c:when> <c:otherwise> <c:import url="c_import_help.jsp"> <c:param name="message" value="파라미터 값을 붙여주세요~!" /> </c:import> </c:otherwise> </c:choose>





<!--c_import_help.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>?type=값</title>
</head>
<body>
	<h1>${ param.message }</h1>
	<hr>
	<ul>
		<li>갱짱.study Java 카테고리 : /c_import.jsp?type=java</li>
		<li>갱짱.study JSP 카테고리 : /c_import.jsp?type=jsp</li>
		<li>유튜브 독도 검색 : /c_import.jsp?type=youtube</li>
	</ul>
</body>
</html>



1.3.2. <c:url> 태그

- URL을 생성해주는 기능을 한다.

- <c:url value="URL" var="변수명", scope="영역"> <c:param name="이름", value="값"> </c:url>

- var과 scope 속성은 생략이 가능하다. var 속성이 지정되지 않으면 현재 위치에 생성한 URL을 출력하고 지정되면 해당 영역 변수에 URL을 할당한다.

- <c:param> 태그를 이용해서 URL에 파라미터를 추가할 수 있다.

- value 속성은 절대URL(완전한 URL) 또는 상대URL(웹 어플리케이션 내에서의 절대 경로 또는 현재 JSP에 대한 상대 경로)을 입력할 수 있다.

<!-- c_url.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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>c:url</title> </head> <body> <!-- 파라미터의 이름과 값의 인코딩은 contentType의 명시된 캐릭터 셋으로 처리 --> <c:url value="http://search.daum.net/search" var="searchUrl"> <c:param name="w" value="blog" /> <c:param name="q" value="독도" /> </c:url> <ul> <li>${ searchUrl }</li><!-- 절대URL --> <li><c:url value="/c_url.jsp" /></li><!-- 상대URL - 절대경로 --> <li><c:url value="./c_url.jsp" /></li><!-- 상대URL - 상대경로 --> <li><c:url value="../c_url.jsp" /></li><!-- 상대URL - 상대경로 --> </ul> </body> </html> <!-- 실행결과 http://search.daum.net/search?w=blog&q=%eb%8f%85%eb%8f%84 /JSPStandardTagLibrary/c_url.jsp ./c_url.jsp ../c_url.jsp -->



1.3.3. <c:redirect> 태그

- response.sendRedirect() 메서드처럼 지정한 페이지로 리다이렉트 시켜주는 기능을한다.

- <c:redirect url="URL" context="컨텍스트경로"> <c:param name="이름" value="값"> </c:redirect>

- URL 속성 값이 슬래시로 시작할 경우 컨텍스트 경로가 추가된다.

- 다른 컨텍스트 경로로 리다이렉르 할때는 context 속성에 컨텍스트 경로를 명시한다.

- <c:redirect> 태그가 실행되면 그 이후의 태그는 실행되지 않는다.

<c:redirect url="http://gangzzang.tistory.com/" />

<c:redirect rul="http://search.daum.net/search">
	<c:param name="w" value="blog" />
	<c:param name="q"	 value="독도" />
</c:redirect>



1.4. 기타 코어 태그


1.4.1. <c:out> 태그

- JspWriter에 데이터를 출력할 때 사용한다.

- <c:out value="값" escapeXml="boolean" default="기본값" />

<c:out value="값" escapeXml="boolean" > 기본 값 </c:out>

- value 속성은 출력할 값을 나타낸다. 문자열을 주로 값으로 쓴다. 값이 java.io.Reader의 한 종류라면 out 태그는 Reader로 읽어와 출력한다.

- default 속성에는 value 속성에 값이 존재하지 않을 때 기본값을 지정한다.

- escapeXml 속성이 true일 경우 아래 표에 해당하는 문자를 이스케이프 시퀀스로 변경한다. 생략할 경우 기본값은 true이다.


 문자

 변환된 형태 

 < 

 &lt; 

 > 

 &gt; 

 & 

 &amp; 

 ' 

 &#039; 

 " 

 &#034; 


<!-- c_out.jsp -->

<%@page import="java.io.IOException"%>
<%@page import="java.io.FileReader"%>
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>c:out</title>
</head>
<body>
	<c:out value="<font size=7>갱짱</body>폰트 태그의 출력" escapeXml="true"/>
	<br>
	<br>
	<c:out value="<font size=7>갱짱</body>" escapeXml="false" />
</body>
</html>

<!-- 
	실행결과
	
	<font size=7>갱짱</body>폰트 태그의 출력 

	갱짱
 -->



1.4.2. <c:catch> 태그

- 발생된 익셉션을 EL 변수에 저장할 때 사용된다.

- <c:catch var="변수명"> . . . 익셉션이 발생할 수 있는 코드 . . . </c:catch> ${ 변수명 } 

<!-- c.catch.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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>c:catch</title>
</head>
<body>
	<c:catch var="exception">
		name 파라미터 값 : <%= request.getParameter("name") %><br>
		<%
			if (request.getParameter("name").equals("test")) {
		%>
				${ param.name }은 test 입니다.
		<%
			}
		%>
	</c:catch>
		<hr>
		<c:if test="${ exception != null }">
			익셉션이 발생하였습니다.<br>
			${ exception }
		</c:if>
</body>
</html>

<!-- 
	실행결과
	
	name 파라미터 값 : null
	---------------------------------------------
	익셉션이 발생하였습니다.
	java.lang.NullPointerException
 -->


+ Recent posts