고래씌
[JSP] 7-3. JSP Action Tag(include, forward, JSTL(CORE Library)) 본문
[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 방식
'Server > JSP과 Servlet' 카테고리의 다른 글
[JSP] 7-5. JSP Action Tag(JSTL Function Library) (0) | 2023.12.19 |
---|---|
[JSP] 7-4. JSP Action Tag(JSTL Formatting Library) (0) | 2023.12.19 |
[JSP] 7-2. Action Tag(EL 연산자) (0) | 2023.12.18 |
[JSP] 7-1. Action Tag (EL 기본 구문) (0) | 2023.12.18 |
[JSP] 6-4. 아이디 중복체크 기능, 댓글 기능 (0) | 2023.12.15 |