[JSP] 8.1 <jsp:include> 액션 태그를 이용한 페이지 모듈화

2022. 4. 8. 16:23JAVA/Servlet&JSP

<jsp:include> 액션태그 무엇인가?

<jsp:include> 액션태그는 지정한 페이지를 태그가 위치한 부분에 포함시킬 때 사용되는 액션태그입니다.

 

<jsp:include> 액션 태그의 동작 방식

  1. main.jsp가 웹 브라우저의 요청을 받음
  2. [출력 내용 A]를 출력 버퍼에 저장
  3. <jsp:include>가 실행되면 요청 흐름을 sub.jsp로 이동시킴
  4. [출력 내용 B]를 출력 버퍼에 저장
  5. sub.jsp의 실행이 끝나면 요청 흐름이 다시 main.jsp의 <jsp:include>로 돌아옴
  6. <jsp:include> 이후 부분인 [출력 내용 C]를 출력 버퍼에 저장
  7. 출력 버퍼의 내용을 응답 데이터로 웹 브라우저에게 전송

<jsp:include> 액션 태그는 포함할 JSP 페이지의 실행결과를 포함합니다.

 

1. <jsp:include> 액션 태그의 사용법

<jsp:include page="포함할 페이지" flush="true"/>
  • page - 포함할 페이지 주소 경로
  • flush - 지정한 JSP 페이지를 실행하기 전에 출력 버퍼의 플러시 여부를 지정한다. true이면 출력 버퍼를 비우고, false이면 하지 않음
    • flush=true이면 출력버퍼에 저장된 출력 내용A를 웹 브라우저에게 보내고 sub.jsp 페이지로 흐름이 이동됨

 

01_main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
main.jsp에서 생성한 내용
<jsp:include page="02_sub.jsp" flush="false"/>
include 이후의 내용
</body>
</html>

02_sub.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<p>
sub.jsp에서 생성한 내용
</p>

01_main.jsp를 실행한 결과로 생성된 HTML 코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 출력 내용 A -->
main.jsp에서 생성한 내용

<!-- 출력 내용 B -->
<p>sub.jsp에서 생성한 내용</p>

<!-- 출력 내용 C -->
include 이후의 내용
</body>
</html>

 

2. <jsp:include> 액션 태그를 이용한 중복 영역의 처리

일반적인 웹사이트는 아래 그림과 같이 상단 메뉴, 좌측 메뉴, 중앙 내용, 하단 메뉴 등의 요소로 구성되어 있는 것을 알 수 있습니다. 이들 구성 요소 중에는 상단 메뉴나 하단 메뉴처럼 모든 페이지에서 고정적인 것들이 있습니다.

공통 부분을 별도의 JSP 페이지로 작성한 후 <jsp:include>로 포함

 

layout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table width="400" border="1" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2">
	<jsp:include page="/Chapter08/module/top.jsp" flush="false"/>
</td>
</tr>

<tr>
<td width="100" valign="top">
	<jsp:include page="/Chapter08/module/left.jsp" flush="false"/>
</td>

<td width="300" valign="top">
	이 부분은 layout2.jsp가 생성한다.<br>
	레이아웃1
	<br><br><br>
</td>
</tr>
<td colspan="2">
	<jsp:include page="/Chapter08/module/bottom.jsp" flush="false"/>
</td>
<tr>
</tr>
</table>
</body>
</html>

05_layout2.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<table width="400" border="1" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2">
	<jsp:include page="/Chapter08/module/top.jsp" flush="false"/>
</td>
</tr>

<tr>
<td width="100" valign="top">
	<jsp:include page="/Chapter08/module/left.jsp" flush="false"/>
</td>

<td width="300" valign="top">
	<!-- 내용부분: 시작 -->
	레이아웃1
	<br><br><br>
	<!-- 내용부분: 끝 -->
</td>
</tr>
<td colspan="2">
	<jsp:include page="/Chapter08/module/bottom.jsp" flush="false"/>
</td>
<tr>
</tr>
</table>
</body>
</html>
  • layout.jsp 페이지와 공통 부분이 동일한 것을 볼 수 있습니다. (top,jsp, left.jsp, bottom.jsp)

 

3. 포함할 페이지에 값 전달하기

<jsp:include page="/moudle/top.jsp" flush="false">
	<jsp:param name="param1" value="value1"/>
    <jsp:param name="param2" value="value2"/>
</jsp:include>

 

06_info.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table width="100%" border="1" cellpadding="0" cellspacing="0">
<tr>
	<td>제품번호</td><td>XXXX</td>
</tr>
<tr>
	<td>가격</td><td>10,000원</td>
</tr>
</table>
<jsp:include page ="07_infoSub.jsp" flush="false">
	<jsp:param value="A" name="type"/>
</jsp:include>
</body>
</html>

07_infoSub.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String type = request.getParameter("type");	//info.jsp에서 전달한 type 파라미터의 값을 읽어온다.
	if(type != null){
%>
<br>
<table width="100%" border="1" cellpadding="0" cellspacing="0">
<tr>
	<td>타입</td>
	<td><b><%=type %></b></td>
</tr>
<tr>
	<td>특징</td>
	<td>
	<% if(type.equals("A")){ %>
	강한 내구성
	<% }else if(type.equals("B")){ %>
	뛰어난 대처 능력
	<%} %>
	</td>
</tr>
</table>

<% 	}%>

 

 

References

source code : https://github.com/yonghwankim-dev/JSP2.0/tree/master/jsp2/src/main/webapp/Chapter08
JSP 2.0 프로그래밍 기초부터 중급까지