쿼리스트링은 사용자가 웹프로그램으로 입력 데이터를 전달하는 가장 단순하고 또한 널리 사용되는 방법이다. 이 방법은 URL 주소 뒤에 입력 데이터를 함께 제공하는 방법으로 다음과 같은 형식을 취한다.
위 형식에서 “?” 뒤의 굵은 이탤릭체로 표현된 부분이 쿼리스트링 이다. URL 주소와 쿼리스트링은 “?”로 구분되며 변수와 값의 쌍(변수=값)으로 구성된다. 만약 여러 쌍의 변수와 값을 전달할 경우 각각의 쌍을 “&”로 구분해주면 된다.
다음 URL을 살펴보자.
위 URL은 localhost의 프로그램 “queryStr.jsp”를 실행할 때 두 개의 입력 데이터(no=200058001, name=Hong)를 가지고 실행하라는 의미이다. 그러면 JSP 프로그램에서는 쿼리스트링에 주어진 데이터를 request 객체의 getParameter 메소드를 이용하여 쿼리스트링을 처리하면 된다.
다음 프로그램 “queryStr.jsp”에서 주어진 쿼리스트링을 처리하는 방법에 대해 잘 살펴보자. 단 다음 프로그램을 실핼할 때 주소창에 위에 주어진 URL
http://localhost:8080/JSPLecture/queryStr.jsp?no=200058001&name=Hong
을 입력했다고 가정하자.
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”으로 올바르게 출력되고 있다.

쿼리스트링에 공백문자가 주어진 경우
“%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
감사합니다. 잘봤어요ㅎ