쿼리스트링은 사용자가 웹프로그램으로 입력 데이터를 전달하는 가장 단순하고 또한 널리 사용되는 방법이다. 이 방법은 URL 주소 뒤에 입력 데이터를 함께 제공하는 방법으로 다음과 같은 형식을 취한다.

http://hostname[:port]/folder/file?변수1=값1&변수2=값2&변수3=값3

위 형식에서 "?" 뒤의 굵은 이탤릭체로 표현된 부분이 쿼리스트링 이다. URL 주소와 쿼리스트링은 "?"로 구분되며 변수와 값의 쌍(변수=값)으로 구성된다. 만약 여러 쌍의 변수와 값을 전달할 경우 각각의 쌍을 "&"로 구분해주면 된다.

다음 URL을 살펴보자.

http://localhost:8080/JSPLecture/queryStr.jsp?no=200058001&name=Hong

위 URL은 localhost의 프로그램 "queryStr.jsp"를 실행할 때 두 개의 입력 데이터(no=200058001, name=Hong)를 가지고 실행하라는 의미이다. 그러면 JSP 프로그램에서는 쿼리스트링에 주어진 데이터를 request 객체의 getParameter 메소드를 이용하여 쿼리스트링을 처리하면 된다.

다음 프로그램 "queryStr.jsp"에서 주어진 쿼리스트링을 처리하는 방법에 대해 잘 살펴보자. 단 다음 프로그램을 실핼할 때 주소창에 위에 주어진 URL

http://localhost:8080/JSPLecture/queryStr.jsp?no=200058001&name=Hong

을 입력했다고 가정하자.

<%@ 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>
    당신의 학번은 <b><%= request.getParameter("no") %></b> 입니다. <br />
    당신의 이름은 <b><%= request.getParameter("name") %></b> 입니다. <br />
</body>
</html>

사용자 삽입 이미지

queryStr.jsp?no=200058001&name=Hong 실행결과


프로그램 "queryStr.jsp"를 살펴보면 두 번의 request.getParameter 메소드가 사용되고 있다. 먼저 첫 번째 메소드

request.getParameter("no")

는 쿼리스트링의 첫 번째 부분인 "no=200058001"를 처리하기위한 코드로 결과값으로 "200058001"을 저장하고 있으며

request.getParameter("name")

는 쿼리스트링의 두 번째 부분인 "name=Hong"를 처리하기위한 코드로 결과값으로 "Hong"을 저장하고 있다. 이 예를 통해 알 수 있듯 request.getParameter 메소드의 파라메터는 쿼리스트링을 구성하고 있는 "변수"="값"의 쌍 중 변수의 이름이 된다. 그러면 그 변수와 쌍을 이룬 값이 결과가 된다.

만약 쿼리스트링을 생략하고 주소창에

http://localhost:8080/JSPLecture/queryStr.jsp

만을 입력했다면 request.getParameter("no"), request.getParameter("name") 모두 값을 읽을 수 없으므로 null이 되어 다음과 같은 결과를 보인다.


사용자 삽입 이미지

쿼리스트링을 생략하고 queryStr.jsp를 실행한 결과



그러면 다음과 같이 쿼리스트링에 공백이 입력된 경우를 살펴보자.

http://localhost:8080/JSPLecture/queryStr.jsp?no=200058001&name=Hong Gil Dong

위 URL을 주소창에 입력하고 엔터키를 쳐보자.


그러면 입력한 URL이 다음과 같이 공백 부분이 "%20"으로 대치되어 프로그램이 실행되고 있음을 볼 수 있다.

http://localhost:8080/JSPLecture/queryStr.jsp?no=200058001&name=Hong%20Gil%20Dong

이는 예전의 브라우저가 쿼리스트링에 주어진 공백문자를 만나면 쿼리스트링의 끝으로 인식 그 뒤의 문자는 처리하지 않았기 때문이다. 따라서 공백문자를 처리하기 위해 몇 가지 편법을 사용하였는데 그 공백을 대신한 문자가 "%20" 이다. 그러므로 "queryStr.jsp" 실행 결과를 살펴보면 request.getParameter("name")에 의해 출력되는 값이 "Hong%20Gil%20Dong"이 아닌 "Hong Gil Dong"으로 올바르게 출력되고 있다.

사용자 삽입 이미지

쿼리스트링에 공백문자가 주어진 경우

[그림 7-2] 공백이 포함된 Query String

"%20" 이외에도 URL에서 공백문자를 처리하기 위한 또 다른 방법이 있는데 "%20" 대신 "+"를 사용하는 방법이다. "+" 역시 URL에서 사용되면 프로그램 내에서는 공백으로 처리되어 출력된다. 그러므로 다음 세 개의 URL은 모두 같은 결과를 출력한다.

http://localhost:8080/JSPLecture/queryStr.jsp?no=200058001&name=Hong Gil Dong
http://localhost:8080/JSPLecture/queryStr.jsp?no=200058001&name=Hong+Gil+Dong
http://localhost:8080/JSPLecture/queryStr.jsp?no=200058001&name=Hong%20Gil%20Dong

그러면 "queryStr.jsp"를 실행항 결과로 다음 그림과 같이 출력되게 하려면 쿼리스트링을 어떻게 줘야 할까 생각해 보자.

사용자 삽입 이미지

"+" 및 "=" 출력


위 결과를 보면 화면에 "+" 및 "="을 출력하고 있다. 그러나 URL에서 이 두 문자를 사용하면 "+"는 화면상에 공백으로 그리고 "="은 쿼리스트링의 "변수=값"의 형식에서 관계를 위해 사용되므로 올바르게 출력되지 않는다. 이를 위해서는 "+"과 "="을 위한 두 자리 16진수 문자코드(ASCII 호환)를 "%" 뒤에 써 주면 된다. 앞에서 공백을 위해 사용된 "%20" 역시 공백을 위한 두 자리 16진수 코드를 의미한다.

공백문자와 같이 변경이 필요한 특수 문자들은 다음과 같다.

화면출력URL문자 또는 코드
화면출력URL문자 또는 코드
공백
+%%25
&
%26+%2B
=%3D?%3F


그러므로 수식 "2 + 3 = 100"을 출력하기 위한 쿼리스트링은

"2+%2B+3+%3D+100" 또는 "2%20%2B%203%20%3D%20100"
 
이므로 다음과 같은 URL을 프로그램 "queryStr.jsp"에 전달하면 위 그림과 같은 결과를 얻을 수 있다.

http://localhost:8080/JSPLecture/queryStr.jsp?no=200058001&name=2+%2B+3+%3D+100

또는

http://localhost:8080/JSPLecture/queryStr.jsp?no=200058001&name=2%20%2B%203%20%3D%20100

'프로그래밍 > JSP' 카테고리의 다른 글

웹프로그램의 개발 목적  (0) 2009.03.24
JSP에서 폼 데이터 처리  (0) 2009.03.23
쿠키 및 세션을 이용한 카운터  (0) 2009.03.17
세션  (0) 2009.03.17
쿠키  (0) 2009.03.17
AND