앞서 폼으로부터 입력된 값을 프로그램으로 전달하는 방법 두 가지(GET/POST)와 각각의 차이점에 대해서 설명하였다. 다음은 각각의 방법을 이용하여 데이터를 프로그램으로 전달하는 방법의 차이점을 보여주고 있다. 특히 그림에서 URL 주소 입력창을 주의깊게 살펴보면 그 차이를 알 수 있다. 그러면 먼저 GET 방식으로 폼 데이터를 전달할 경우를 살펴보자.
다음은 아이디와 비밀번호를 입력받아 그 값을 GET 방식으로 프로그램 “loginGET.jsp”에 전달 실행하기위한 HTML 코드이다.
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>입력 폼</title>
</head>
<body>
<form name=”form” method=”get” action=”loginGet.jsp“>
<table border=”0″ cellpadding=”2″ cellspacing=”0″>
<tr>
<td width=”75″>
<p align=”right”>
<font size=”2″>아이디</font>
</td>
<td width=”195″>
<p><font size=”2″>
<input type=”text” name=”id” maxlength=”20″>
</font>
</td>
</tr>
<tr>
<td width=”75″>
<p align=”right”><font size=”2″>비밀번호</font>
</td>
<td width=”195″>
<p><font size=”2″>
<input type=”password” name=”pass” maxlength=”20″>
</font>
</td>
</tr>
<tr>
<td width=”75″>
<p align=”right”><font size=”2″> </font>
</td>
<td width=”195″>
<p><font size=”2″>
<input type=”submit” value=”로그인” maxlength=”20″>
</font>
</td>
</tr>
</table>
</form>
</body>
</html>
이 프로그램에서 아이디와 비밀번호를 입력받는 창의 이름이 각각 “id”와 “pass”로 지정되었다. 그리고 각 창에 입력된 값이 각각 “ysoh”와 “JSP”라 한 후 “로그인”버튼을 클릭했다고 가정하자. 그러면 다음 프로그램 “loginGet.jsp”를 실행하면서 페이지의 내용이 바뀐다.
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>
아이디 : <%= request.getParameter(“id“) %><br />
비밀번호 : <%= request.getParameter(“pass“) %><br />
</body>
</html>
이 때 주소창 URL 주소를 살펴보면
id=ysoh&pass=JSP
과 같이 쿼리스트링을 이용하여 프로그램 “loginGet.jsp”로 아이디와 비밀번호를 전달하고 있음을 알 수 있다. 눈치가 빠르신 분들은 이미 알겠지만 쿼리스트링을 보면 쿼리스트링에 주어진 변수 “id”와 “pass”는 “loginGet.html” 폼의 <INPUT> 태그의 속성 중 NAME 속성의 값에서 비롯된 것이다. 또한 쿼리스트링에 주어진 값 “ysoh”와 “JSP”는 사용자가 폼에서 입력한 값임을 알 수 있다. 이 처럼 GET 방식의 경우 “<INPUT>” 태그의 NAME 속성의 값과 그 폼에 입력된 값이 쌍을 이루어 쿼리스트링을 구성하게 된다. 우리는 이미 쿼리스트링 통해 전달된 데이터를 JSP 프로그램에서 처리하는 방법을 배웠다. 그러므로 프로그램 내에서 request 객체의 getParameter 메소드를 이용
request.getParameter(“id“)
request.getParameter(“pass“)
와 같이 처리함으로써 입력된 값 “ysoh”와 “JSP”를 가져올 수 있다. 그러나 위 예제에서는 쿼리스트링을 통해 데이터를 전달하므로 비밀번호와 같이 보안이 유지되어야 하는 데이터가 그대로 노출되는 문제점이 발생한다. 그러므로 이러한 경우에는 GET 방식을 통한 데이터의 전달이 아닌 POST 방식을 통한 데이터의 전달을 사용한다.
다음 프로그램 “loginPost.html”는 “loginGet.html”에서 “Form” 태그의 “Method” 속성값 GET을 POST로 바꾼 것이다.
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>입력 폼</title>
</head>
<body>
<form name=”form” method=”post” action=”loginGet.jsp”>
<table border=”0″ cellpadding=”2″ cellspacing=”0″>
<tr>
<td width=”75″>
<p align=”right”>
<font size=”2″>아이디</font>
</td>
<td width=”195″>
<p><font size=”2″>
<input type=”text” name=”id” maxlength=”20″>
</font>
</td>
</tr>
<tr>
<td width=”75″>
<p align=”right”><font size=”2″>비밀번호</font>
</td>
<td width=”195″>
<p><font size=”2″>
<input type=”password” name=”pass” maxlength=”20″>
</font>
</td>
</tr>
<tr>
<td width=”75″>
<p align=”right”><font size=”2″> </font>
</td>
<td width=”195″>
<p><font size=”2″>
<input type=”submit” value=”로그인” maxlength=”20″>
</font>
</td>
</tr>
</table>
</form>
</body>
</html>
POST를 이용한 폼 데이터의 전달 역시 GET과 마찬가지로 프로그램에서 처리할 때 NAME 속성의 값을
request.getParameter 메소드의 파라메터값으로 넘기면 해당 창에 입력된 값을 읽을 수 있다. 그러므로 프로그램
“loginPost.jsp”는 “loginGet.jsp”와 완전 동일하다.
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>
아이디 : <%= request.getParameter(“id“) %><br />
비밀번호 : <%= request.getParameter(“pass“) %><br />
</body>
</html>
그러나 “loginPost.jsp”가 실행될 때 URL 주소를 살펴보면 “loginGet.jsp”가 실행될 때와는 달리 쿼리스트링이 없음을 알 수 있다. 그러므로 로그인과 같이 보안이 유지될 필요가 있는 경우라면 반드시 폼 데이터를 전달할 때 표준입출력을 통하여 내부적으로 처리되어 눈으로 확인 불가능 한 POST 방식을 사용해야 한다.