[JSP] form 데이터 처리

DU·2025년 1월 14일
0

JSP

목록 보기
3/5
post-thumbnail

Servlet을 활용한 Form 데이터 처리: GET과 POST의 차이와 실전 예제

웹 애플리케이션에서 사용자의 Form 데이터를 처리하는 것은 매우 중요한 작업입니다. 이번 글에서는 Form 데이터를 처리하는 Servlet의 활용 방법과 doGet()doPost() 메서드의 차이를 학습한 내용을 바탕으로 설명하겠습니다.


Form 데이터 처리의 기본 흐름

  1. 사용자가 Form을 제출하면 브라우저는 데이터를 HTTP 요청(Request)으로 웹 컨테이너(Servlet)로 전송합니다.
  2. Servlet에서 HttpServletRequest 객체를 통해 데이터를 수신하고 처리합니다.
  3. 응답은 HttpServletResponse 객체를 통해 브라우저로 전달됩니다.

GET과 POST의 차이점

특징GETPOST
데이터 전송 방식URL에 쿼리 스트링으로 포함HTTP Request의 본문(Body)에 포함
URL 예시http://localhost:8090/mSignUp?m_name=Johnhttp://localhost:8090/mSignUp
보안데이터가 URL에 노출 (덜 안전)데이터가 숨겨짐 (더 안전)
용도간단한 데이터 전송, 조회 목적민감한 데이터 전송, 저장 및 수정 목적
데이터 길이 제한제한 있음제한 없음

HTML Form 코드

아래의 Form 코드는 사용자 정보를 입력받아 POST 방식으로 Servlet에 데이터를 전송합니다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Form Example</title>
</head>
<body>

    <form action="mSignUp" method="post">
        Name: <input type="text" name="m_name"><br>
        Password: <input type="password" name="m_pass"><br>
        Gender: 
        <input type="radio" name="m_gender" value="M" checked> Man
        <input type="radio" name="m_gender" value="W"> Woman<br>
        Hobby: 
        <input type="checkbox" name="m_hobby" value="sport"> Sport
        <input type="checkbox" name="m_hobby" value="cooking"> Cooking
        <input type="checkbox" name="m_hobby" value="reading"> Reading
        <input type="checkbox" name="m_hobby" value="travel"> Travel<br>
        Residence: 
        <select name="m_residence">
            <option value="seoul" selected>Seoul</option>
            <option value="jeju">Jeju</option>
            <option value="busan">Busan</option>
        </select><br>
        <input type="submit" value="Sign Up">
    </form>

</body>
</html>

Servlet 코드: MemSignUp.java

핵심 기능

  • GET 요청 처리: doGet() 메서드를 통해 데이터를 URL 쿼리에서 읽어옵니다.
  • POST 요청 처리: doPost() 메서드는 doGet()을 호출하여 동일한 방식으로 데이터를 처리합니다.
  • Form 데이터 추출: request.getParameter(), request.getParameterValues(), request.getParameterNames()를 사용합니다.

Servlet 코드 설명

@WebServlet("/mSignUp")
public class MemSignUp extends HttpServlet {

    // GET 요청 처리
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println(" -- doGet() -- ");

        // Form 데이터 수신
        String m_name = request.getParameter("m_name");
        String m_pass = request.getParameter("m_pass");
        String m_gender = request.getParameter("m_gender");
        String[] m_hobbys = request.getParameterValues("m_hobby");
        String m_residence = request.getParameter("m_residence");

        // 데이터 출력
        System.out.println("Name: " + m_name);
        System.out.println("Password: " + m_pass);
        System.out.println("Gender: " + m_gender);
        System.out.println("Hobbies: " + Arrays.toString(m_hobbys));
        System.out.println("Residence: " + m_residence);

        // 모든 파라미터 이름 출력
        Enumeration<String> names = request.getParameterNames();
        while (names.hasMoreElements()) {
            String name = names.nextElement();
            System.out.println("Parameter Name: " + name);
        }
    }

    // POST 요청 처리
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println(" -- doPost() -- ");
        // POST 요청도 GET 방식으로 처리
        doGet(request, response);
    }
}

주요 메서드 설명

  1. request.getParameter(String name)

    • 단일 값 데이터를 반환합니다.
    • 예: request.getParameter("m_name") → 사용자의 이름 반환.
  2. request.getParameterValues(String name)

    • 다중 값 데이터를 배열로 반환합니다.
    • 예: request.getParameterValues("m_hobby") → 선택한 취미 반환.
  3. request.getParameterNames()

    • 모든 요청 파라미터 이름을 Enumeration으로 반환합니다.
    • 예: 모든 Form 필드 이름을 순회하며 출력.
  4. response.getWriter()

    • 응답으로 데이터를 출력하는 스트림을 반환합니다.
    • 예: response.getWriter().println("Hello User!").

실행 결과

GET 요청

  • URL:
    http://localhost:8090/mSignUp?m_name=John&m_pass=1234&m_gender=M&m_hobby=sport&m_hobby=reading&m_residence=seoul
  • Console 출력:
    -- doGet() --
    Name: John
    Password: 1234
    Gender: M
    Hobbies: [sport, reading]
    Residence: seoul
    Parameter Name: m_name
    Parameter Name: m_pass
    Parameter Name: m_gender
    Parameter Name: m_hobby
    Parameter Name: m_residence

POST 요청

  • URL:
    http://localhost:8090/mSignUp
  • Console 출력: 위와 동일 (Form 데이터는 요청 본문에 포함).

결론

  • GET과 POST 요청은 각각 목적에 맞게 사용해야 합니다.
  • GET: 데이터 조회용으로 사용하며, 데이터가 URL에 노출됩니다.
  • POST: 민감한 데이터 전송이나 데이터 수정/생성에 적합합니다.
  • Form 데이터를 Servlet에서 처리하려면 HttpServletRequest의 다양한 메서드를 활용하면 됩니다.

0개의 댓글