이전글


include 또는 forward시에 request 객체를 통해 데이터 공유하기
JSP에서 include나 forward를 통해 다른 JSP 페이지로 제어를 넘길 수 있습니다. 호출하는 쪽과 호출되는 쪽에서 데이터를 공유하는 방법에는 두 가지가 있습니다.

첫번째로는 <jsp:param> 액션태그를 이용하는 방법입니다. 다음과 같이 forward 또는 include 액션태그 안에서 사용합니다.
<jsp:forward page="forward 시킬 JSP 페이지">                                                    
     <jsp:param name="파라미터키" value="값"/>
</jsp:forward>
cs


두번째로는 request 기본 객체를 이용하는 방법입니다. include 또는 forward 액션태그를 사용하게 되면 흐름이 넘어감과 동시에 request 객체와 response 객체를 공유하게 됩니다. 이를 이용하면 request 객체의 setAttribute(String name, Object o) 메서드를 사용하여 데이터를 공유할 수 있습니다.
<%
     request.setAttribute("userInfo"new User("kim", 23L,  "서울시"));                        
%>
 
 
<jsp:forward page="forward.jsp"/>
cs


<jsp:param> 액션 태그 역시 request 객체를 이용하지만 파라미터를 사용한것과 attribute를 사용한것의 차이는 파라미터의 경우에는 문자열 데이터만 넘길 수 있지만 attribute를 이용하면 모든 타입의 객체를 넘길 수 있다는 점이 있습니다.



request 객체의 setAttribute(String name, Object o) 메서드 이용
String 타입이 아닌 다른 타입의 객체를 공유하고 싶은 경우에는 request 기본객체의 setAttribute() 메서드와 getAttribute 메서드를 사용합니다.



main.jsp
<%@ page contentType="text/html; charset=utf-8"%>                                            
<%
     request.setAttribute("age"new Long(10));
%>
<jsp:forward page="forward.jsp"/>
cs
main.jsp에서는 forwad.jsp 로 포워딩하기 전에 request의 attribute에 age라는 이름의 값으로 Long 객체를 저장했습니다. 파라미터의 경우에는 문자열값만을 저장할 수 있지만 attribute에는 Object 타입을 저장할 수 있습니다. 즉 모든 객체는 Object의 하위 타입이므로 모든 타입의 객체를 저장할 수 있습니다.



forward.jsp
<%@ page contentType="text/html; charset=utf-8"%>                                            
<html>
<head>
</head>
<body>
<%
     Long age = (Long)request.getAttribute("age");
%>
     <h1>age : <%= age %></h1>
</body>
</html>
cs
제어를 넘겨받은 forward.jsp에서는 Object getAttribute(String name) 메서드를 이용하여 저장되어 있는 attribute를 이름으로 구분하여 가져옵니다. 이때 반환되는 객체 타입이 Object이므로 저장할때 당시의 타입으로 캐스팅(형변환) 해주어야 합니다. 여기서는 Long 타입으로 해주었습니다.


결과는 main.jsp에서 넘겨주었던 Long타입 값 10이 forward.jsp를 통해 출력되었습니다.


블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,