JSP/Servlet | 클라이언트와 서버 사이의 값 전달 | 쿼리 문자열으로 값 받기

단순히 뭔가를 표시할 뿐이라는 것은 전회 설명한 JSP의 기본 태그만으로 어떻게든 할 수 있게 되었다. 이번에는 더 나아가 “클라이언트에서 서버로 뭔가를 보내면, 그것을 받아 다시 클라이언트에게 돌려 주는” 대화형 작업을 수행해 보자.

이러한 작업의 포인트는 “클라이언트에서 서버로 어떻게 필요한 정보를 보낼까"라는 점이다. 이를 알면 서버에서 필요한 처리를 하여 그에 따라 표시를 되돌려 보낼 수 있다.

여기에는 여러 방법이 있다. 먼저 가장 간단한 것으로 “쿼리 문자열을 사용"방법부터 해보자. 쿼리 문자열이라고 하는 것은, URL 주소 뒤에 붙은 파라미터의 기술 부분이다.

Web 사이트에서 http://xxx/?abc=xyz와 같이 이런식으로 URL 주소 뒤에 이런 것이 붙어 있는 것을 본 적이 있을 것이다. 그것이 쿼리 문자열이다. 이는 다음과 같은 형태로 되어 있다.

http://도메인/파일의 지정?이름1=값1&이름2=값2& ...

URL주소 뒤에 물음표(?)을 붙이고 그 이후에 “이름=값"형태로 값에 이름으로 붙여서 기술한다. 여러 값을 전달하는 경우 and(&) 기호로 연결한다. 값은 영숫자 텍스트라면 그대로도 괜찮지만, 기호나 2바이트 문자 등이 들어가면 문제를 일으키므로 일반적으로 URL 인코딩이라는 것을 사용하여 인코딩해야 한다.

그럼 이렇게 보내온 값을 JSP에 어떻게 받을 것인가? 여기에는 “request"라는 내장 객체를 이용한다. 이는 특별히 선언하지 않아도 처음부터 사용할 수 있는 상태가 되어있는 특별한 객체이다.

request은 서버에 보낸 요청(클라이언트에서의 요구)에 대한 다양한 정보를 담고 있다. 이 객체에는 ‘getParameter’라는 메소드가 준비되어 있다. 이것을 사용하여 쿼리 문자 값을 꺼낼 수 있다.

String 변수 = request.getParameter(값 이름);

이런 식으로 호출하면 된다. 그럼, 실제로 간단한 샘플을 만들어 서버와 클라이언트 간에 문자열을 주고 받아 보자.

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%
String str = request.getParameter("param");
%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Sample jsp</title>
    <style>
    h1 {font-size:16pt; background:#AAFFAA; padding:5px; }
    </style>
    <script type="text/javascript">
    function doAction(){
        var s = document.getElementById('input').value;
        var url = 'hello4.jsp?param=' + encodeURI(s);
        window.location.href = url;
    }
    </script>
</head>
<body>
    <h1>Sample jsp page</h1>
    <p>이 페이지는 샘플입니다.</p>
    <p>페라미터:<%=str%></p>
    <input type="text" id="input">
    <button onclick="doAction();">Click</button>
    </body>
</html>

위에 나열된 샘플은 입력 필드에 텍스트를 쓰고 버튼을 누르면 메시지가 표시된다. 여기에서는 JavaScript를 사용하여 쿼리 문자열을 붙여서 페이지의 주소를 만들고 거기에 점프하고 있다.

var s = document.getElementById('input').value;
var url = 'helo.jsp?param=' + encodeURI(s);
window.location.href = url;

여기에는 예를 들어 필드에 “abc"라고 입력하면 helo.jsp?param=abc URL 주소가 서버로 전송된다. 서버 측에서는 JSP 코드으로 페라미터 값을 받고 있다.

String str = request.getParameter("param");

이것으로 변수 str에 “abc"라는 텍스트가 할당된다. 이 후에는 <p>페라미터:<%=str %></p>와 같이 하여 받은 값을 출력하고 있다.

이번에는 단지 표시만 하고 있지만, 물론 받은 값을 바탕으로 여러가지 작업을 수행하고 결과를 출력할 수도 있다.