티스토리 뷰

Web/JSP

[JSP]include 와 forward 의 페이지 이동

쩨리쩨리 2018. 4. 13. 01:40
반응형

include와 forward에 대해서 설명해 보겠다. include는 액션 태그를 이용한 방법이 있고, java를 사용하여 include 디렉티브를 이용한 방법이 있다. 이번 포스팅은 include 는 디렉티브를 이용한 페이지 이동 방법을 설명하고, forward는 액션 태그를 이용한 페이지 이동 방법을 설명하겠다.

 

 

 

 

* include 디렉티브

 

하나의 웹 사이트를 구성할때 페이지들은 동일한 메뉴를 갖는다. 이런 공통 구성 요소를 위한 코드를 모든 jsp 페이지마다 작성한다면 코드 중복이 발생하게 되는데, 이때 코드 중복 문제를 없애기 위해 include를 사용한다. include는 내 위치 페이지를 포함한다.

 

 

include 디렉티브는 다른 파일의 내용을 현재 위치에 삽입한 후에 jsp 파일을 자바 파일로 변환하고 컴파일 하는 방식이다.

 

 

페이지 모양으로 보자면 하나의 페이지 안에 여러개의 jsp 파일들이 안에 있는 모양으로 보이는 것이다. 여러개의 jsp 파일들이 한 페이지 안에 들어가 있지만 그 페이지의 실제 위치는 include를 실행시킨 jsp 페이지로 설정된다.

 

 

1
<%@ include file="포함할 "%>
cs

 

include 디렉티브 사용 방법은 위 코드와 같다.

 

file 속성은 include 디렉티브를 사용해서 포함할 파일의 경로를 지정한다. include 디렉티브를 사용하면, jsp 파일을 자바 파일로 변환하기 전에 include 디렉티브에서 지정한 파일의 내용을 해당 jsp 문서에 삽입하고, 그 뒤 자바 파일을 컴파일 한다.

 

 

 

 

 

* 아래 코드를 보고 include를 이해해보자

 

1. main.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
25
26
<%@ page language="java" 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">
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <center>
        <h2>include 지시어 테스트</h2>
        <hr>
        <%@ include file="menu.jsp"%>
        <p>
        <table border=0 cellpadding=5 cellspacing=1>
            <tr>
                <td><font size=-1><%@ include file="news.jsp"%>></font></td>
                <td width="30">&nbsp;</td>
                <td><font size=-1><%@ include file="shopping.jsp"%>></font></td>
            </tr>
        </table>
    </center>
</body>
</html>
cs

 

 

main.jsp의 코드를 봤을때 맨위 상단은 menu.jsp 화면이 보이도록 include를 연결하고

 

하단은 news.jsp와 shopping.jsp 문서 두화면이 보이도록 연결하였다.

 

 

 

2. menu.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" 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>
 
검색:
<input type=text value="검색어" name=put>
<input type=submit name=btn value="검색">
 
</body>
</html>
cs

 

 

3. news.jsp

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" 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>
뉴스 화면 입니다.
</body>
</html>
cs

 

 

4. shopping.jsp

 

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" 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>
쇼핑입니다
</body>
</html>
cs

 

 

 

 

* include 디렉티브 실행화면

 

실행화면은 위와 같다. 빨간 네모 부분은 main.jsp 화면, 초록 부분은 menu.jsp 화면, 파란색 부분은 news.jsp 화면, 보라색 부분은 shopping.jsp 부분이다.

 

 

실행시키면 위 웹 url 이 main.jsp 로 나오는것으로 봐서 실행된 페이지는 main.jsp 한 페이지임이 틀림없지만 main.jsp 페이지 안에 여러개의 jsp 페이지들이 더 들어오게 된 셈이다.

 

즉, include 디렉티브를 이용한 페이지 이동은 include 디렉티브에서 지정한 파일의 코드를 포함한 jsp 코드를 자바 코드로 변환하여

 

한 페이지에 여러 jsp 페이지들을 포함하게 할 수 있다.

 

 

 

 

 

 

 

* forward

 

forward는 코드상 <jsp:forward> 으로 작성하여 쓰인다.  <jsp:forward> 이 코드를 forward 액션 태그라고 부른다.

 

forward 액션 태그는 하나의 jsp 페이지에서 다른 jsp 페이지로 요청 처리를 전달할 때 사용된다

 

forward는 단순 이동뿐 아니라 내가 넣은 값을 들고 다른 페이지로 전달 할 수도 있다.

 

forward 액션 태그는 실행하기 전에 출력 버퍼에 저장했던 내용을 비우고 페이지 이동을 한다. 따라서 개발자가 아무리 위에 많은 출력 코드를 작성하였다 하더라도 맨 밑에 forward 액션 태그를 만나면 앞에 출력 코드들을 버리고 바로 페이지 이동을 해버리기 때문에 앞에 적은 출력 코드들이 전부 무시되어 실행되지 않는다. 

 

 

 

아래 코드를 보고 방금 설명을 이해해보자.

 

 

1. forward.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" 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>
 
안녕 난 출력코드1이야
안녕 난 출력코드2이야
안녕 난 출력코드3이야
안녕 난 출력코드4이야
안녕 난 출력코드5이야
안녕 난 출력코드6이야
 
<jsp:forward page="shopping.jsp"/>
</body>
</html>
cs

 

 

앞에 출력코드들을 써놓고 forward 액션 태그를 이용하여 페이지 이동을 시킨다.

 

 

 

 

앞에 아무리 많은 출력코드를 써놓아도 페이지 이동을 시키면 해당 페이지로 넘어가기에 앞에 출력 코드들은 전부 무시되고 페이지 이동을 한 것을 확인 할 수 있다.

 

 

 

forward 액션 태그가 올바르게 동작하기 위해서는 forward 액션 태그를 실행하기 전에 웹 브라우저에 데이터가 전송되면 안된다. 만약 출력 버퍼를 플러시한 이후에 forward 액션 태그를 실행하면 실행 흐름을 이동하는데 실패한다. 비슷하게 버퍼 속성을 none으로 해서 버퍼를 사용하지 않는 경우에도 forward 액션 태그는 제대로 동작하지 않는다.

 

 

이때, 가장 중요한 것이 있는데, 위에 보다시피 url 주소가 shopping.jsp 가 아닌 forward.jsp인 것을 확인할 수 있다.

 

 

왜 그럴까??

 

 

forward 액션 태그는 내가 실행시킨 jsp 파일의 형태를 변화 시킬뿐 내가 가지고 있는 위치는 변화시키지 않기 때문이다.

 

 

 

 

 

위의 그림으로 보면 이해가 쉬울 것이다.

 

 

예를 들면 Jerry라는 여자가 있는데 Jerry는 농협 통장을 가지고 있다. 이때, Jerry가 forward를 써서 여자라는 속성을 남자로 바꿨다. 하지만 Jerry는 성별만 바뀐 것이지 Jerry라는 본질 자체는 변하지 않았기 때문에 농협 통장을 계속 이용할 수 있다.

 

Jerry를 내 현재 url 위치, 성별이란 속성을 페이지로, 농협 통장을 내가 가지고 있는 데이터로 바꾸면

 

실행 시킨 페이지가 다른 페이지의 화면으로 바뀌더라도 실제 실행 위치인 url 주소는 변하지 않으며 화면이 바뀌는 제어권을 변경할뿐 데이터도 그대로 들고 다닐수 있다는 것이다.

 

 

 

 

* <jsp:param> 액션 태그를 이용해서 이동할 페이지에 파라미터 추가하기

 

 

<jsp:param> 액션 태그를 사용하면 <jsp:forward> 액션 태그로 이동할 페이지에 파라미터를 추가로 전달할 수있다.

<jsp:param> 액션 태그는 <jsp:forward> 액션 태그의 자식 태그로 추가한다.

 

 

<jsp:jparam> 액션 태그의 name 속성과 value 속성은 각각 포함할 페이지에 새로 추가할 파라미터의 이름과 값을 입력한다.

value 속성에는 값을 직접 지정하거나 표현식을 이용해서 값을 지정한다.

 

코드 사용법은 아래와 같다.

 

 

1
2
3
4
<jsp:forward page="page_control_end.jsp">
        <jsp:param value="name" name="name" />
        <jsp:param value="address" name="address" />
</jsp:forward>
cs

 

 

 

 

 

반응형
댓글
공지사항