자바(Java)/JAVA 2EE

페이지 사이에 파라미터 유효범위

본클라쓰 2009. 10. 10. 10:14

보통 페이지 제어를 위해 사용하는 방법은 다음과 같습니다.

  1. include 액션태그
  2. forward 액션태그
  3. response.sendRedirect() 메소드




이렇게 페이지를 제어할 경우 입력받은 파라미터의 유효 범위가 문제가 됩니다. 즉, 폼 페이지에서 데이터를 submit할 경우 submit된 데이터가 존재하는 페이지 범위가 문제가 됩니다. 이 문제를 확인하기 위해 폼페이지, 컨트롤페이지(include나 forward를 사용하는 페이지), 실제 포함되는 페이지 세 페이지를 작성하여 확인해 봅니다.



1. form.jsp 페이지

<form method="post" action="control.jsp">
    <input type="text" name="name" /><br/>
    <input type="text" name="age" />
    <input type="submit" value="전송" />
</form>


이 페이지에서 입력은 받은 후 control.jsp 페이지로 데이터를 전송합니다. control.jsp 페이지는 입력받은 값을 기준으로 include, forward, response.sendRedirect() 를 사용하여 다른 페이지를 포함시키거나, 이동시키는 페이지입니다.



2. control.jsp 페이지

<%@ page contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<% request.setCharacterEncoding("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>
    <jsp:include page="include.jsp" />
</body>
</html>


현재는 include 액션 태그를 사용하는 방법으로 include.jsp 페이지를 포함시켰는데 전달받은 파라미터를 include.jsp페이지에서도 사용할 수 있는가 문제에 답은 당연히 사용가능합니다. 요청에 포함된 파라미터는 기본적으로 요청에 포함되는 페이지는 모두 사용가능한 파라미터입니다.



3. include.jsp 페이지

<%@ page contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<% request.setCharacterEncoding("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>
    이름은 : <%=request.getParameter("name") %><br/>
    나이는 : <%=request.getParameter("age") %>
</body>
</html>


이렇게 include.jsp 페이지를 작성했다면 출력결과는 당연히 form.jsp에서 입력한 값을 출력합니다.  include 액션태그와 forward 액션태그에서는 이런 방식으로 파라미터가 전달이 됩니다.


하지만 response.sendRedirect() 메소드를 사용할 시에는 폼페이지에서 받은 파라미터가 전달이 안됩니다. 즉, response.sendRedirect()는 단순히 페이지를 이동시킬 때 사용하며, 로직을 처리하거나 파리미터가 존재할 경우에는 include 액션태그나 forward 액션태그를 사용해야합니다.





response.sendRedirect() 메소드를 사용할 때 파라미터를 전달하고자 할 경우에는 GET 방식으로 전달합니다. 즉, sendRedirect(URL) 메소드에 URL주소에 GET방식으로 작성하는 방법을 사용합니다.

response.sendRedirect("index.jsp?key=value");