Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

JSP에서 모든 폼 매개변수(Parameter)를 읽는 방법 — getParameterNames() 활용 가이드

JSP에서 모든 폼 매개변수 읽기

JSP로 웹 애플리케이션을 개발하다 보면, 클라이언트가 전송한 폼 데이터에 어떤 매개변수가 포함되어 있는지 미리 알 수 없는 경우가 많습니다. 이럴 때 유용하게 쓸 수 있는 것이 HttpServletRequest의 getParameterNames() 메서드입니다. 이 메서드를 호출하면 현재 요청에 포함된 모든 매개변수의 이름을 담고 있는 Enumeration 객체가 반환됩니다. 단, 반환되는 매개변수 이름들의 순서는 특별히 보장되지 않습니다.

Enumeration 순회 방법

Enumeration 객체를 확보했다면, 표준적인 자바 컬렉션 순회 방식 그대로 처리하면 됩니다. 먼저 hasMoreElements() 메서드로 아직 읽지 않은 요소가 남아 있는지 확인하고, 더 이상 없을 때까지 nextElement() 메서드로 매개변수 이름을 하나씩 꺼내오면 됩니다.

다음은 이 원리를 적용하여, 요청된 모든 폼 매개변수의 이름과 값을 표 형태로 출력하는 JSP 예제입니다.

<%@ page import = "java.io.*,java.util.*" %>

<html>
   <head>
      <title>폼 매개변수 읽기 예제</title>
   </head>
   <body>
      <center>
         <h2>모든 폼 매개변수 읽기 예제</h2>
         <table width = "100%" border = "1" align = "center">
            <tr bgcolor = "#949494">
               <th>매개변수 이름</th>
               <th>매개변수 값</th>
            </tr>
            <%
               Enumeration paramNames = request.getParameterNames();
               while(paramNames.hasMoreElements()) {
                  String paramName = (String)paramNames.nextElement();
                  out.print("<tr><td>" + paramName + "</td>\n");
                  String paramValue = request.getParameter(paramName);
                  out.println("<td>" + paramValue + "</td></tr>\n");
               }
            %>
         </table>
      </center>
   </body>
</html>

위 코드에서 주목할 점은 매개변수의 값을 가져올 때 request.getParameter()를 사용한다는 것입니다. 폼 데이터를 읽을 때는 헤더를 조회하는 getHeader()가 아니라, 반드시 getParameter() 계열 메서드를 사용해야 올바른 값을 얻을 수 있습니다.

테스트용 HTML 폼 작성

이제 위 JSP를 호출할 폼 페이지를 만들어 보겠습니다. 다음은 세 개의 체크박스로 과목을 선택하는 Hello.htm 파일의 내용입니다. 폼은 POST 방식으로 main.jsp에 데이터를 전송하며, 새 창(target="_blank")에서 결과를 확인하도록 설정했습니다.

<html>
   <body>
      <form action = "main.jsp" method = "POST" target = "_blank">
         <input type = "checkbox" name = "maths" checked = "checked" /> Maths
         <input type = "checkbox" name = "physics" /> Physics
         <input type = "checkbox" name = "chemistry" checked = "checked" /> Chemistry
         <input type = "submit" value = "과목 선택" />
      </form>
   </body>
</html>

Hello.htm을 브라우저에서 열고 체크박스를 선택한 뒤 [과목 선택] 버튼을 누르면, main.jsp가 사용자의 입력 상태에 따라 아래와 같은 결과 화면을 생성합니다. 여기서는 기본값대로 MathsChemistry 두 항목이 체크되어 전송된 상황입니다.

실행 결과 — 모든 폼 매개변수 읽기

매개변수 이름매개변수 값
mathson
chemistryon

결과에서 값이 "on"으로 표시되는 이유는, 체크박스에 별도의 value 속성을 지정하지 않으면 브라우저가 기본값인 "on"을 전송하기 때문입니다. 의미 있는 값을 받고 싶다면 <input type="checkbox" name="maths" value="Y" />처럼 value 속성을 직접 지정하면 됩니다.

추가 팁: 하나의 매개변수에 여러 값이 오는 경우

다중 선택 목록(multiple select)이나 동일한 이름의 체크박스 여러 개처럼 하나의 매개변수 이름으로 여러 값이 전달될 수 있다면, 단일 값만 반환하는 getParameter() 대신 String[] getParameterValues(String name) 메서드를 사용해야 합니다. 이 메서드는 해당 이름으로 전달된 모든 값을 문자열 배열로 돌려주므로, 반복문을 통해 안전하게 처리할 수 있습니다.