티스토리 뷰

반응형

<jsp:include> 액션 태그

 

보통 하나의 웹 사이트를 구성하는 페이지들은 동일한 상단, 좌측 메뉴, 하단을

구성 합니다. 그래서 만약 모든 웹 페이지마다 이런 공통 요소들에 대해서

코드를 작성하게 되면 코드 중복이 발생하게 됩니다. 게다가 이러한 공통

요소에 수정 사항이 발새하게되면 모든 페이지마다 수정 사항을 고쳐야

합니다. 이러한 코드 중복을 해결 할 수 있는게 바로 <jsp:include> 태그입니다.

 

<jsp:include>가 위치하는 곳에 지정한 페이지를 포함 시킬 수 있습니다.

 

<jsp:include> 사용법은 다음과 같습니다.

 

[

  <jsp:include page ="포함할페이지" flush="true">

<jsp:param name = "param1" value="value1">

<jsp:param name = "param2" value="value2">

  </jsp:include>

]

 

page 속성에는 포함할 페이지의 경로가 오게 되고 flush는 지정한 페이지를 실행

하기 전에 버퍼의 내용을 플러시할지 여부를 지정하는 것 입니다.

 

<jsp:param> 태그를 통해서는 지정한 페이지에 파라미터 값을 넘겨 줄 수 있습

니다. name 속성은 고유의 이름으로 파라미터 값을 읽어 들일 때 사용하며

value 속성에는 실제로 넘겨주는 값을 지정 해줍니다.

  

실제로 예제를 통해서 <jsp:include>태그를 활용하는 법을 살펴 보겠습니다.

 

 

예제

 

예제는 레이아웃을 구성하는 웹 페이지에 대해서 상단, 좌측, 하단과 같은 공통적인

구성 요소에 대해서 따로 jsp로 작성을 하고 <jsp:include> 액션 태그를 통해서

페이지를 포함 시키는 예제입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<%@ page contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <table width="300" border="1">
        <tr>
            <td colspan="2">
                <jsp:include page="top.jsp">
                    <jsp:param name="param1" value="1"/>
                </jsp:include>
            </td>
        </tr>
        
        <tr>
            <td>
                <jsp:include page="left.jsp">
                    <jsp:param name="param1" value="2"/>
                </jsp:include>
            </td>
            <td>
                본문 레이아웃
                <br><br><br>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <jsp:include page="bottom.jsp">
                    <jsp:param name="param1" value="3"/>
                </jsp:include>                
            </td>
        </tr>
    </table>
 
</body>
</html>

먼저 레이아웃을 구성하는 MainLayout.jsp 입니다. 테이블 태그를 통해 레이아웃을 구성하고 상단, 좌측, 하단에 대해서 <jsp:include> 태그를 통해 다른 jsp 페이지를 포함하게 됩니다. 동시에 <jsp:param> 태그를 통해 파라미터 값을 넘겨주고 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%=request.getParameter("param1") %>. 상단 
</body>
</html>

공툥 구성 중 상단에 해당하는 top.jsp 페이지 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%=request.getParameter("param1") %>. 좌측메뉴 
</body>
</html>

공통 구성 요소 중 left.jsp 페이지 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%=request.getParameter("param1") %>. 하단
</body>
</html>

 

공통 구성 요소 중 bottom.jsp 페이지 입니다. 즉 3개의 공통 구성 요소를 따로 페이지를 구성을 하고 MainLayout에서 <jsp:include>를 통해 페이지를 포함하는 방식을 사용하고 있습니다. 추가적으로 MainLayout에서 넘겨 준 파라미터 값을 getParameter()를 통해 얻어와서 사용하고 있습니다.

 

 

 

 

include 디렉티브

 

include 디렉티브도 <jsp:include> 액션 태그처럼 지정한 페이지를 현재 위치에 포함시키는 기능을 제공합니다. 다만, 페이지를 포함시키는 방식의 차이가 있습니다. <jsp:include>태그는 다른 jsp로 실행 흐름을 이동시켜 실행 결과를 현재 위치에 포함 시키는 반면에 include 디렉티브 방식은 다른 파일의 내용을 현재 위치에 포함 시킨 후에 jsp파일을 자바 파일로 변환하고 컴파일하는 방식입니다.

 

따라서 include 디렉티브와 <jsp:include>태그는 활용 방식에 차이가 있습니다. include 디렉티브는 모든 jsp 페이지에서 사용하는 변수를 지정하거나 저작권 표시와 같은 모든 페이지에서 중복되는 간단한 문장을 쓸 때 사용합니다.

 

사용하는 방식은 다음과 같습니다.

 

<%@ include file="포함할 파일" %>

 

간단한 예제를 통해서 사용하는 방식을 살펴 보겠습니다.

 

예제

 

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <% int data = 10; %>
</body>
</html>

Main.jsp 입니다. 포함 되어 질 page이며 정말로 변수를 공유하는지 확인하기 위한 data 변수를 선언 하였습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file= "Main.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%=data %>
</body>
</html>

include 디렉티브를 통해서 Main.jsp 페이지를 포함 시킵니다. 표현식을 통해 data 변수값을 출력하고 있는 Sub.jsp에는 존재하지 않는 변수임에도 오류가 발생하지 않습니다.

 

 

 

 

 

 

 

 

 

 

반응형