액션태그 중 include와 forward 그리고 param에 대해서 정리해보겠습니다.


include는 현재 페이지에 다른 페이지를 삽입 하는 겁니다.

지난 포스팅중 include지시자를 통해 include를 하는 방법을 정리했었는데요. 

지시자를 통해서 include를 할 수도 있고 이번 처럼 액션태그를 이용해서 include를 할 수도 있습니다.

include.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" 
    content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h2>include.jsp 입니다.</h2>
    <jsp:include page="include1.jsp" flush="false"/>
    <h2>include후의 다시 include.jsp 입니다.</h2>
</body>
</html>
cs


flush를 true한다는 것은 출력버퍼를 플러시 하겠다는 의미입니다. 

보통은 false로 지정합니다.


include1.jsp

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>
<html>
<head>
<meta http-equiv="Content-Type" 
    content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h2>include1.jsp 입니다.</h2>
</body>
</html>
cs
위 와 같이 소스코드들을 작성하고 include.jsp에서 실행을 합니다.

그럼 아래의 결과화면 처럼 출력이 됩니다.

지시자를 이용한 include와 액션태그를 이용한 include의 차이점이 있다면

include지시자는 소스의 내용이 텍스트에 포합된다는 점이고

include액션태그는 포함 시킬 페이지의 처리된 결과를 포함시킨다는 점입니다.(즉, 처리된 결과만을 포함합니다.)

쉽게 말해 include.jsp에서 include지시자를 사용할 경우 include1.jsp의 소스가 include.jsp에 포함되어 함꼐 컴파일이 됩니다.

include 액션태그를 이용할 경우는 include1.jsp가 따로 컴파일이 된후 그 결과를 include액션태그 위치에 넣어서 화면에 보여주는 겁니다

결과적으로 include지시자를 사용하면 컴파일된 파일은 하나 이지만, 액션태그를 사용하면 컴파일이 된 파일이 2개가 되는거죠.(include3.jsp라는 파일도 include액션태그를 이용해 include했다면 컴파일된 파일은 3개가 되겠네요.) 



forward는 요청된 jsp페이지에서 다른 jsp페이지로 요청 처리를 전달하려고 할 경우에 사용됩니다.

forward.jsp

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>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>forward.jsp 입니다.</h1>
    <jsp:forward page="to.jsp"/>
</body>
</html>
cs


to.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>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h2>to.jsp입니다.</h2>
</body>
</html>
cs

forward.jsp를 호출했지만  to.jsp의 결과가 브라우저에 출려이 되었습니다.

그런데도 웹 브라우저의 주소가 to.jsp로 변경되지 않았음을 확인 할 수 있습니다.

이는 <jsp:forward>가 컨테이너 내에서 요청의 흐름을 이동시키기 때문입니다.

그래서 브라우저는 이를 알지 못하고 forward.jsp의 출력결과라고 착각(?)합니다.


마지막으로 param액션태그입니다.

forward와 include를 사용해서 페이지를 변경하거나 포함할때에 추가적으로 전달하고 싶은 정보들이 있을수 있습니다.

이때 param액션태그를 이용하면 됩니다.

둘다 사용법은 같으므로 include액션태그를 이용해서만 예제코드를 작성해 보겠습니다.

inculde_info.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
     <%
         request.setCharacterEncoding("UTF-8");
    %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>include_info.jsp입니다</h1>
    <jsp:include page="include_Param.jsp">
        <jsp:param name="id" value="소곰"/>
        <jsp:param name="pw" value="1234"/>
    </jsp:include>
</body>
</html>
cs

include_Param.jsp

1
2
3
4
5
6
7
8
9
10
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    
    String id = request.getParameter("id");
    String pw = request.getParameter("pw");
    
    out.println("아이디 : " + id + "<br />");
    out.println("비밀번호 : " + pw);
%>
cs

include_info.jsp에서 14번~17번라인과 같이 include혹은 forward액션태그 사이에 param액션태그를 사용해주면 됩니다.


3가지의 액션태그를 정리해봤습니다~