include 디렉티브 vs include 액션태그

include 디렉티브와 include 액션은 다른 페이지를 현재 페이지에 포함시킬 수 있는 기능을 가지고 있다.

그러나 이 둘은 사용 방식과 처리 방식이 다르다.

 

include 디렉티브

<%@ include file = "포함될 페이지" %>
  • 다른 파일의 소스코드를 현재 위치에 삽입시킨 후에 jsp파일을 servlet으로 변환하고 컴파일하는 방식
  • 단순하게 소스코드를 복사해서 텍스트에 붙여넣기하여 하나의 파일로 합치는 정적인 방식
  • include 디렉티브는 주로 조각 코드를 삽입할 때 사용한다.

[ex04_includeDirective.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h1>ex04_includeDirective 페이지입니다</h1>
<p>
    include 디렉티브를 이용해서 ex03_gugudan.jsp 페이지를 아래에 포함시킵니다.
    <br>
    include 지시어는 다른 파일(ex03_gugudan.jsp)의 소스코드를 현재 위치에
    삽입한 후, jsp파일을 servlet으로 변환하고 컴파일하는 방식입니다.
</p>
<hr color="red">
<!-- 구구단 페이지를 포함 (소스코드가 포함됨) -->
<%@ include file="ex03_gugudan.jsp" %>
<hr color="orange">
<!-- ex01.jsp 페이지를 포함 (소스코드가 포함됨) -->
<%@ include file="ex01.jsp" %>
<hr color="blue">
<%
    //삽입된 페이지와 변수명이 중복되어서는 안된다.
    //String a = "지역변수"; //error ex01.jsp에 int a = 10; 변수 선언되어 있음
    String astr = "지역변수"//현재 페이지의 지역변수
    out.println("astr: " + astr + "<br>");
    out.println("str: " + str + "<br>"); //ex01.jsp의 멤버변수
    out.println("a: " + a + "<br>"); //ex01.jsp의 지역변수
%>
cs

실행 결과


include 액션태그

<jsp:include page = "포함될 페이지" />
  • 다른 jsp로 흐름을 이동시켜 그 결과물을 현재 위치에 포함시키는 방식
  • 포함될 페이지의 결과가 원래 페이지의 결과와 합쳐서 보이게 된다.
  • include 액션태그는 주로 페이지를 모듈화할 때 사용한다.
  • 포함될 페이지의 소스코드가 포함되지 않아서 가볍다.

[ex05_includeAction.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h1>ex05_includeAction 페이지입니다</h1>
<p>
  include 액션 태그를 통해 다른 페이지를 여기에 포함시킬 수 있어요
  <br>
  include 액션은 실행결과를 포함시키는 방식이다.
  jsp의 흐름을 ex03_gugudan.jsp로 이동시켜 그 실행 결과문을 현재 위치에 포함시킨다.
</p>  
<hr color='red'>
<!-- include action으로 구구단 페이지 포함시키기 -->
<!-- 소스코드가 들어가지 않아서 가볍다. -->
<jsp:include page="ex03_gugudan.jsp" />
<br>
cs

실행 결과

 


forward 액션태그

<jsp:forward page = "포워딩할 페이지" />
  • 하나의 JSP 페이지에서 다른 JSP 페이지로 요청 처리를 전달할 때 사용된다. (다른 페이지로 이동)
  • 브라우저로 하여금 리디렉트로 지정한 경로를 다시 요청하면서 브라우저의 URL을 리디렉트한 URL로 변경하는 리디렉트(redirect) 방식과는 다르게, forward 액션태그는 서버 내부에서 페이지 이동을 한다. 따라서 브라우저는 이동한 페이지의 URL이 아니라 이전 페이지의 URL을 유지한다.

[ex06_forwardAction.jsp - 포워딩 전]

1
2
3
4
5
6
7
8
9
10
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h1>ex06_forwardAction 페이지입니다</h1>
<p>
    forward 액션태그를 이용해 ex01.jsp페이지로 이동할 예정입니다. <br>
    서버 내부에서 페이지 이동을 한다. 따라서 브라우저는 이동한 페이지의 url이 아니라
    이전 페이지의 url을 유지한다. <br>
    (url: http://localhost:9090/MyWeb/example/ex06_forwardAction.jsp 유지)
</p>
<hr color="red">
cs

실행 결과


[ex06_forwardAction.jsp - 포워딩 후]

1
2
3
4
5
6
7
8
9
10
11
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h1>ex06_forwardAction 페이지입니다</h1>
<p>
    forward 액션태그를 이용해 ex01.jsp페이지로 이동할 예정입니다. <br>
    서버 내부에서 페이지 이동을 한다. 따라서 브라우저는 이동한 페이지의 url이 아니라
    이전 페이지의 url을 유지한다. <br>
    (url: http://localhost:9090/MyWeb/example/ex06_forwardAction.jsp 유지)
</p>
<hr color="red">
<jsp:forward page="ex01.jsp" />
cs

실행 결과: URL이 이전 페이지와 동일하다. (http://localhost:9090/MyWeb/example/ex06_forwardAction.jsp)

 

1
<jsp:forward page="ex01.jsp" />
cs

이 부분은 아래와 동일하다.

1
2
RequestDispatcher disp = request.getRequestDispatcher("ex01.jsp");
disp.forward(request, response);
cs

 

+ Recent posts