반응형
1. 액션 태그의 개념
- 액션 태그(Action Tag): JSP의 표준 태그로, 페이지 사이에서 이동을 제어하거나 자바빈 생성 시 주로 사용됨
- 특별한 선언 없이, <jsp:태그명 /> 형태로 사용 (태그처럼 사용하지만 이 뒤에서는 JSP가 수행됨)
- JSP 코드와 마찬가지로 웹 애플리케이션 서버(WAS)에서 처리된 후 결과만 출력되어, 웹 브라우저에서 소스 보기를 했을 때 이 태그가 보이지 않음
- 용도별 액션 태그
<jsp:include> | 외부 jsp 파일을 현재 jsp 파일에 포함시킴 |
<jsp:forward> | 요청(request)을 다른 페이지로 넘김 |
<jsp:useBean>, <jsp:setProperty>, <jsp:getProperty> | 자바빈즈를 생성하고 값을 설정/추출함 |
<jsp:param> | 다른 페이지로 매개변수를 전달함 (<jsp:include>, <jsp:forward> 와 함께 사용함) |
2. <jsp:include>
1) include 지시어와 <jsp:include> 액션 태그 이해하기
- 둘 다 외부 jsp 파일을 현재 jsp 파일에 포함시키는 기능을 하는데, 동작 방식이 다름
지시어 | 액션 태그 | |
형식 | <%@ include file=”포함할 파일의 경로” %> | <jsp:include page=”포함할 파일의 경로” /> |
표현식 | 사용 불가 | 사용 가능 |
포함 방식 | 페이지 자체를 현재 페이지에 포함시킴 (이후 컴파일 → 실행) | ‘실행의 흐름’을 포함시킬 페이지로 이동한 후, 실행한 결과를 현재 페이지에 포함시킴 |
변수 | 포함시킨 파일에서 생성한 변수 - 사용 가능 | 포함시킨 파일에서 생성한 변수 - 사용 불가 |
page 영역 | 공유됨 | 공유되지 않음 |
request 영역 | 공유됨 | 공유됨 |
(1) include 지시어의 동작 매커니즘 그림
- 페이지를 원본 그대로, 현재 페이지에 먼저 포함시킨 후 컴파일함
→ JSP 코드만 서로 다른 페이지로 모듈화(부품화)하므로, 동일한 페이지로 인식됨
(2) <jsp:include> 액션 태그의 동작 매커니즘 그림
- 포함시킬 페이지로 ‘요청의 흐름’이 이동되어 컴파일을 진행한 후, 그 결과물(컴파일된 것)을 현재 페이지에 삽입
→ 포함시킬 페이지에서 생성한 변수 현재 페이지에서 사용 불가, page 영역이 공유되지 않음
(다른 페이지로 인식하기 때문)
→ 이때 웹 서버에서 컴파일된 JSP 코드는 모두 단순한 HTML 형태로 변환됨
2) 포함될 외부 파일들 준비
- WebContent 폴더에 ActionTag 폴더 생성 → 하위에 inc 폴더 생성
*inc 폴더에 OuterPage1.jsp, OuterPage2.jsp 파일 생성
- OuterPage1.jsp
// WebContent/ActionTag/inc/OuerPage1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>OuterPage</title>
</head>
<body>
<h2>외부 파일 1</h2>
<%
String newVar1 = "고구려 세운 동명왕"; //1.
%>
<ul>
//2.(아래 코드 2줄)
<li>page 영역 속성 : <%= pageContext.getAttribute("pAttr") %></li>
<li>request 영역 속성 : <%= request.getAttribute("rAttr") %></li>
</ul>
</body>
</html>
- String 타입 변수를 하나 선언함
- page와 request 내장 객체 영역에서 속성을 읽어와 출력
- OuterPage2.jsp - OuterPage1.jsp과 똑같고, String 변수의 이름과 값만 다름
// WebContent/ActionTag/inc/OuerPage2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>OuterPage</title>
</head>
<body>
<h2>외부 파일 2</h2>
<%
String newVar2 = "백제 온조왕";
%>
<ul>
<li>page 영역 속성 : <%= pageContext.getAttribute("pAttr") %></li>
<li>request 영역 속성 : <%= request.getAttribute("rAttr") %></li>
</ul>
</body>
</html>
3) 포함 방식에 따른 차이 확인
- 앞의 두 외부 파일을 지시어와 액션 태그로 각각 인클루드하여 차이 확인
(1) WebContent → ActionTag 폴더에서 IncludeMain.jsp 파일 생성
// WebContent/ActionTag/IncludeMain.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1.포함할 파일의 경로
String outerPath1 = "./inc/OuterPage1.jsp";
String outerPath2 = "./inc/OuterPage2.jsp";
//2.page 영역과 request 영역에 속성 저장
pageContext.setAttribute("pAttr", "동명왕");
request.setAttribute("rAttr", "온조왕");
%>
<html>
<head><title>지시어와 액션 태그 동작 방식 비교</title></head>
<body>
<h2>지시어와 액션 태그 동작 방식 비교</h2>
<!-- 지시어 방식 -->
<h3>지시어로 페이지 포함하기</h3>
<%@ include file="./inc/OuterPage1.jsp"%> //3.
<%--@ include file="<%=outerPath1OuterPage1%>" --%> //4.
<p>외부 파일에 선언한 변수 : <%=newVar1%></p> //5.
<!-- 액션 태그 방식 -->
<h3>액션 태그로 페이지 포함하기</h3>
<jsp:include page="./inc/OuterPage2.jsp" /> //6.
<jsp:include page="<%=outerPath2%>" /> //7.
<p>외부 파일에 선언한 변수 : <%--=newVar2 --%></p> //8.
</body>
</html>
- 외부 파일을 포함할 두 파일의 경로를 변수에 저장함 (4.와 7.에서 표현식 사용 가능 여부를 확인해보기 위한 용도의 변수들
- page 영역과 request 영역에 속성을 저장함 (여기서 설정한 속성을, 포함할 두 파일에서 읽어올 수 있는지 확인하기 위한 용도
- include 지시어로 OuterPage1.jsp 파일을 포함시킴
- 3.을 표현식으로 잘못 나타낸 사례 (include 지시어는 표현식을 지원하지 않음
- OuterPage1.jsp에서 선언한 newVar1 변수 출력 (지시어 방식은 실행 전에 파일을 포함시켜 컴파일을 진행하므로, Outer1.jsp/Outer2.jsp 파일이 같은 페이지로 인식되기 때문)
- 액션 태그로 페이지를 포함시키는 코드
- 액션 태그로 페이지를 포함시키는 코드 - 표현식을 썼지만, 액션 태그는 표현식을 지원하므로 문제없이 실행됨
- OuterPage2.jsp에서 선언한 newVar2 변수 출력 (주석 해제 후 실행 시 ‘선언되지 않은 변수’라는 에러 발생
→ 액션 태그 방식은 실행의 흐름만 이동시켜, 실행된 결괏값만 가져와서 포함시키기 때문)
(2) IncludeMain.jsp 파일 실행 결과
- 외부 파일 1은 OuterPage1.jsp를 의미함
- page 영역과 request 영역에 저장된 속성값을 정상적으로 가져와서 출력함
- 외부 파일에서 선언한 변수의 값도 잘 출력됨
- 외부 파일 2는 OuterPage2.jsp를 의미함
→ 액션 태그에서는 표현식을 사용할 수 있으므로 파일이 두 번 포함되어, 출력도 두 번 됨 - page 영역에 설정한 속성은 null
→ 실행한 IncludeMain.jsp와 인클루드된 OuterPage2.jsp는 서로 다른 페이지로 처리되므로 page 영역은 공유되지 않기 때문 - 외부 파일에서 선언한 변수 부분은 아무것도 출력되지 않음
→ 외부 파일의 변수를 가져오려 하면 컴파일 자체가 되지 않으므로, 주석으로 처리했기 때문
반응형
'자바(JAVA) > JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)' 카테고리의 다른 글
JAVA/JSP 21. 액션 태그(Action Tag) - <jsp:param> (1) | 2023.12.23 |
---|---|
JAVA/JSP 20. 액션 태그(Action Tag) - <jsp:forward>, <jsp:useBean>, <jsp:setProperty>, <jsp:getProperty> (0) | 2023.12.07 |
JAVA/JSP 18. 세션(Session) - 세션과 DB를 이용한 로그인 구현, 쿠키 vs 세션 (1) | 2023.11.30 |
JAVA/JSP 17. 세션(Session) - 세션이란, 세션 설정/확인/삭제 (1) | 2023.11.22 |
JAVA/JSP 16. 데이터베이스 - 커넥션 풀로 성능 개선, 간단한 쿼리 작성 및 실행 (1) | 2023.11.12 |