고래씌

[JSP] 7-3. JSP Action Tag(include, forward, JSTL(CORE Library)) 본문

Server/JSP과 Servlet

[JSP] 7-3. JSP Action Tag(include, forward, JSTL(CORE Library))

고래씌 2023. 12. 18. 14:39

▶ JSP에서 이루는 구성인자

 

1. JSP스크립팅 원소 : JSP페이지에서 자바코드를 직접 기술할 수 있게 하는 기술.
   EX) 스클립틀릿, 선언문, 표현식 등.
   
2. 지시어 : JSP 페이지 정보에 대한 내용을 표현한다거나 다른 페이지를 포함할 때 사용
   EX) page 지시어, include 지시어, taglib 지시어(라이브러리 추가시 사용)
   
3. jsp 액션태그 : XML 기술을 이용해서 기존의 jsp 문법을 확장하는 기술을 제공하는 태그
   - 표준액션태그(Standard Action Tag) : jsp페이지에서 바로 사용 가능
   - 커스텀액션태그(Custom Action Tag) : jsp에서 바로 사용 불가능. 커스텀 액션태그는 모든 태그명안에 jsp:외의 다른 접두어가 붙는다(c:,cn,fmt,...). 제공되고 있는 대표적인 라이브러리(jstl)

 


0. JSP Action Tag란?

: XML기술을 이용해서 기존의 JSP문법을 확장시키는 기술을 제공하는 태그들

 

 

1. 표준 액션 태그

- JSP페이지에서 별도의 라이브러리 연동 없이 즉시 사용 가능하다. 태그앞에 jsp:접두어가 붙는다.

 

1) include

: 또 다른 페이지를 포함하고자 할 때 쓰이는 방식(정적 include 방식 == 컴파일시 포함되는 형태)

 

▶ footer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.Date, java.text.SimpleDateFormat"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String year = new SimpleDateFormat("yyyy").format(new Date());
	%>
	
	Copyright 1998-<%= year %> Whale Information Educational Institute All Right Reserved
	
	<br>
	
	전달받은 param : ${param.test}

</body>
</html>

 

 

▶ 01_include.jsp

<%@ include file="footer.jsp" %>
include 한페이지의 year변수값 : <%= year %>

 

특징 : include하고 있는 페이지상에 선언되어있는 변수를 현재 페이지에서도 사용 가능함

 

 

- 결과화면

 

 

 

1-1) JSP표준 액션태그를 이용한 include방식(동적 include방식 == 실행시 포함되는 형태)

01_include.jsp

<jsp:include page="footer.jsp" />

 

반드시 시작태그와 종료태그를 함께 써야함. 단, 시작태그와 종료태그 사이에 넣을 값이 없는 경우 시작태그에 /를 붙여서 표현함

☞ <jsp:include> </jsp:include> 태그를 함께써야하는데 이 안에 쓸 것이 없다면 /> 사용하여 닫아주어도 된다.

 

 

 

- 결과화면

 

 

※ 특징1 : include하고 있는 페이지에서 선언된 변수를 공유하지 않음

<% String year = "2002"; %>

 

- 결과화면

값을 가져오지못한다!!!!

 

 

※ 특징2 : 포함시 include하는 페이지로 내가 원하는 값을 전달할 수 있다.

<jsp:include page="footer.jsp">
     <jsp:param value="testvalue" name="test" />
</jsp:include>

<br>

<jsp:include page="footer.jsp">
     <jsp:param value="testvalue2" name="test2" />
</jsp:include>

 

 

 

- 결과화면

 

☞ 내가 원하는 값도 키 밸류 형태로 전달할 수 있다!

 


2) forward

- 이번에도 footer.jsp 이용하여 forward하여 가져오겠다!

 

▶ 02_forward.jsp

<jsp:forward page="footer.jsp" />

 

 

- 결과화면

 

☞ forward 특성상 url은 그대로고 화면만 바뀐다!

 


2. 커스텀 액션 태그

1) JSTL이란?

: JSP Standard Tag Library의 약자로 JSP에서 사용되는 커스텀 액션태그.
  공통적으로 사용되는 코드들의 집합을 보다 쉽게 사용할 수 있도록 태그화해서 표준으로 제공한다.

 

 

▶ 라이브러리 다운로드 후 추가(실습준비)

1) 인터넷을 통해 jstl.jar 파일 추가 
2) dv폴더에 추가
3) WEB-INF/lib에 추가하기 

 

 

https://mvnrepository.com/search?q=jstl

 

 

▶ JSTL 선언 방법

- JSTL을 사용하고자 하는 JSP 페이지 상단에 taglib 지시어를 사용해서 선언

- <@ taglib prefix="접두어" uri="라이브러리 파일상의 uri주소" %>

 

 

2) JSTL 분류

2-1) JSTL Core Library

: 변수선언, 조건문, 반복문 등과 관련된 문법을 제공

 

 

▶ core 라이브러리 사용하기 위해 맨 위에 추가

 

 

ⓐ 변수 선언

<c:set var="변수명" value="리터럴" scope="스코프 영역을 지정(생략가능)">

 

변수를 선언하고 초기값을 대입해두는 기능을 제공.
- 해당 변수를 어떤 scope에 담아둘껀지 지정 가능함(기본값은 pageScope)

 

☞ 즉, 해당 scope영역에 setAttribute함수를 이용해서 key+value형태로 데이터를 담아놓는 형태다.
=> c:set을 통해 선언된 변수는 EL로 접근해서 사용할 수 있다.

※ 주의사항

- 변수의 타입(자료형)을 별도로 지정하지 않음
- 반드시 해당 변수의 담아두고자하는 초기값 속성을 무조건 추가시켜줘야함.(선언과 동시에 초기화해줘야함)

 

 

 

- 결과화면

 

 

ⓑ 변수 삭제

<c:remove var="제거하고자하는 변수명" scope="스코프영역지정(생략가능)">

 

- 해당 변수를 scope에서 찾아서 제거하는 태그
- scope지정 생략시 모든 scope에서 변수명과 일치하는 값을 다 제거함
☞ 즉, 해당 scope에 removeAttribute메소드를 이용해서 제거하는 것

 

 

 

- 결과화면

 

 

③ 변수 출력

<c:out value="출력하고자 하는값" default="기본값(생략가능)" escapeXml="true/false"(기본값 true, 생략가능)) >

 

- 데이터를 출력하고자할 때 사용하는 태그
- 기본값 : value에 출력하고자하는 값이 없을 경우 기본값으로 출력할 내용물을 기술(생략가능)
- escapeXml : 태그로써 해석할지 여부(생략가능)

 

 

 

escapeXml 생략시 기본값 true == 태그로써 해석안됨(문자열로 취급)

 

 

- 결과화면

 

 


2-2) 조건문 - if 

<c:if test='조건식'>

 

- JAVA의 단독 IF문과 비슷한 역할을 하는 태그
- 조건식을 test라는 속성에 속성값으로 작성하는데, 무조건 el구문으로 작성해야한다.

 

 

 

- 결과화면

 

 

2-3) 조건문 - choose

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

 

- java의 if-else, if-else if 또는 switch 문과 비슷한 역할을 하는 태그
- 조건식들을 c:choose의 하위요소로 c:when에 작성한다.

 

 

 

- 결과화면

 

 

2-4) 반복문 - forEach

▶ for loop문

<c:forEach var="변수명" begin="초기값" end="종료값" step="증감식">

 

 

▶ 향상된 for문

<c:forEach var='변수명' items='순차적으로 접근할 컬렉션' varStatus='현재 접근된 요소의 상태값을 보관할 변수명'>

 

=> step : 미지정시 기본값은 1
=> varStatus : 생략가능

 

 

- for loop문

 

 

- c:forEach를 활용한 반복문

 

- 결과확인

 

 

<%
	ArrayList<Person> list = new ArrayList();
	list.add(new Person("홍길동", 20, "남자"));
	list.add(new Person("김길동", 30, "남자"));
	list.add(new Person("민길동", 15, "남자"));
	
	request.setAttribute("pList",list);
%>
	<table border='1'>
		<thead>
			<tr>
				<th>순번</th>
				<th>이름</th>
				<th>나이</th>
				<th>성별</th>
			</tr>
		</thead>
		<tbody>
		<%if(!list.isEmpty()){ %>
			<%for(Person p : list) { %>
				<tr> .
			<%} %>
		<%} %>
		<c:choose>
			<c:when test="${empty pList }">
				<tr>
					<td colspan='4'> 조회결과 없습니다. </td>
				</tr>
			</c:when>
			<c:otherwise>
				<c:forEach var="p" items="${pList}" varStatus="s">
					<tr align="center">
						<td>${s.count}</td> <!-- index : 0부터 시작, count : 1부터 시작  -->
						<td>${p.name}</td>
						<td>${p.age}</td>
						<td>${p.gender}</td>
					</tr>
				</c:forEach>
			</c:otherwise>
		</c:choose>

		</tbody>
	</table>

 

- 결과화면

 

 

 

2-5) 반복문 - forTokens

<c:forTokens var="각 값을 보관할 변수" items="분리시키고자하는 문자열" delims="구분자">

 

- 구분자를 통해서 분리된 각각의 문자열에 순차적으로 접근하면서 반복 수행.
- Java의 split("구분자") 또는 StringTokenizer와 비슷한 역할

 

 

 

 

- 결과화면

 

 

 

 

2-6) 쿼리스트링 관련 태그 - url, param

<c:url var="변수" value="요청할url주소" >
      </c:parm name='키값' value='밸류값' >
      </c:parm name='키값' value='밸류값' >
      ....
</c:url>


     
- url 경로를 생성해주고, 쿼리스트링을 정의할 수 있는 태그
- 넘겨야할 쿼리스트링이 길 경우 사용하면 편리함

 

 

- 기존방식

 

 

- core 방식