본문 바로가기
인천일보아카데미/- 학습일지

[학습일지]JAVA교육일지 66일차 (SERVER)⭐

by w1z 2022. 7. 7.

1. 표준 액션 태그

2. 확장 액션 태그(EL, JSTL)


1. 표준 액션 태그

[ 정의 ]

- XML 기술을 이용해서 기존의 JSP 문법을 확장해준 매커니즘으로 JSP 규격서에 정의되어 있는 기술이다.

- XML 태그 형태를 띄기 때문에 액션태그(action tag)라고도 부르며, 간단히 액션(action)이라고 한다. 왜냐하면 이런 태그가 어떤 동작(action)을 수행하는 역할을 하기 때문이다.

- <jsp:include>, <jsp:forward>

 

[ 표준 액션 태그 예시 ]

<!-- <%@ include file="/*.jsp" %> 랑 동일하다. -->
<jsp:include page="/*.jsp"></jsp:include>
		
<!-- pageContext.forward("*.jsp);랑 동일하다. -->
<jsp:forward page="*.jsp"></jsp:forward>

 

2. 확장 액션 태그(EL, JSTL)

[ 정의 ]

- JSP 표준 액션 태그의 버전업

- 추가 설치가 필요하다. ( JSTL )

- JSP 페이지에서 자바 구문을 사용하지 않기 위해서 만들어 졌다.

- 달러 표시로 내장 객체를 나타낸다. 

- $ { }

 

[ EL, Expression Language ]

- 표현식 언어

- 내장 객체(pageContext, request, session, application)에 들어있는 데이터를 HTML 소스에 출력하는 언어이다.

 

[ EL 예제 - 자바 표현식과 EL 표현식의 비교 ]

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    
<%
	// 평범한 지역 변수
	int a = 10;

	// 내장 객체 변수
	pageContext.setAttribute("b", 20);
	request.setAttribute("c", 30);
	session.setAttribute("d", 40);
	application.setAttribute("e", 50);

%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
	
	<h2>Java 표현식</h2>
	<div>평범한 지역 변수 a: <%= a %></div>
	<div>내장 객체 변수 b: <%= pageContext.getAttribute("b") %></div>
	<div>내장 객체 변수 c: <%= request.getAttribute("c") %></div>
	<div>내장 객체 변수 d: <%= session.getAttribute("d") %></div>
	<div>내장 객체 변수 e: <%= application.getAttribute("e") %></div>
	
	<hr />
	
	<h2>EL 표현식</h2>
	<div>a: ${a}</div>
	<div>b: ${b}</div>
	<div>c: ${c}</div>
	<div>d: ${d}</div>
	<div>e: ${e}</div>
	
</body>
</html>

 

- 결과

EL 표현식은 내장 객체 변수만 출력하므로 지역 변수인 a는 출력 X

 

[ EL 표현식으로 할 수 있는 것들 ]

- EL 표현식으로 각종 연산을 할 수 있다.

- Java Object 및 HashMap을 EL 표현식으로 활용해서 출력을 지원할 수 있다.

- empty 연산자를 이용해서 데이터 유무를 확인 할 수 있다. ( 데이터가 있다면 false, 없다면 true ) 

 

[ JSTL ]

- 추가 설치가 필요하다. 

- <c:XXX> 형식

- 프로그래밍 기능을 하는 태그이다.

- JSTL 변수는 내장 객체의 pageContext에만 추가되는 변수(속성)이다. (나머지는 X)

- JSTL에서 내장 객체 변수를 접근하려면 반드시 EL ( ${} )표현식을 사용한다.

 

[ JSTL 문법 ]

- JSTL은 XML 문법을 준수한다.(문법이 엄격하다.)

- ' / ' 코드 끝에 슬래쉬를 꼭 붙여줘야 한다.

[ 올바른 문법 ]
<c:set var="test" value="300"></c:set>
<c:set var="test" value="300" />
			
[ 에러 문법 ]
<c:set var="test" value="300">

 

[ JSTL 기본 예제 - 내장 객체의 변수인지 확인하기 ]

- <c:set>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!-- JSTL 설치 (Ctrl+Space 3번째 항목 core) -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>

	<h2>JSTL 변수 내장객체 확인 예제</h2>

	<c:set var="a" value="30" /> // JSTL 변수 'a' 생성
    
	<div>a: ${ a }</div>

	<div>pageContext: <%= pageContext.getAttribute("a") %></div>
	<div>request: <%= request.getAttribute("a") %></div>
	<div>session: <%= session.getAttribute("a") %></div>
	<div>application: <%= application.getAttribute("a") %></div>
</body>
</html>

 

- 결과

JSTL 변수는 pageContext에 추가되는 변수(속성)인 것을 확인할 수 있다.

 

[ JSTL 변수 삭제 예제 ]

- <c:remove>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!-- JSTL 설치 (Ctrl+Space 3번째 항목 core) -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>

	<h2>변수 삭제(웹 요소 삭제)</h2>

	<c:set var="c" value="30" /> // JSTL 변수 'c' 생성
	<c:remove var="c" /> // JSTL 변수 'c' 삭제
    
	<div>c: ${ c }</div> <!-- 아무것도 안보임 (삭제됨) -->
	<div>c: ${ empty c }</div> <!-- 좀더 정확히 확인을 위해 empty함수 사용 (true = 없음) -->
    
</body>
</html>

 

- 결과

삭제 됬는지 정확한 확인을 위해 empty를 사용했다.

 

[ JSTL 조건문 예제 ]

- <c:if>

- <c:choose>, <c:when>, <c:otherwise>

<c:set var="num" value="10" />

<h3>if문</h3>		
<c:if test="${ num  > 0 }">
<div>숫자 ${ num }는 양수 입니다.</div>
</c:if>

<c:if test="${ num <= 0 }">
<div>숫자 ${ num }는 양수가 아닙니다.</div>
</c:if>

<h3>switch case문 + 다중 if문</h3>
<c:choose>
	<c:when test="${ num > 0 }">양수입니다.</c:when>
	<c:when test="${ num < 0 }">음수입니다.</c:when>
	<c:otherwise>0입니다.</c:otherwise>
</c:choose>

 

- 결과

 

[ JSTL 반복문 예제 ]

- <c:forEach var="" begin="" end="" step="">

- var 에는 c:set과 동일한 pageContext 내장 객체 변수이다.

- step 에는 양수가 들어가지 못한다.

<c:forEach var="i" begin="0" end="10" step="1">
<div>item ${ 10 - i }</div>
</c:forEach>

 

-  결과

 

[ JSTL 향상된 for문 예제 ]

- <c:forEach var="" items="$ { }">

<%
	String[] color = { "빨강", "주황", "노랑", "초록", "파랑", "남색", "보라색" };
	pageContext.setAttribute("color", color);
%>

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

 

- 결과