Post

HTML5 서블릿

HTML5 서블릿

form 태그

HTML의 <form> 태그는 사용자가 입력한 데이터를 웹 서버로 전송하기 위한 영역을 정의합니다.

action 속성

  • 설명: submit 버튼을 클릭했을 때, 사용자가 입력한 데이터를 웹 서버의 어떤 컴포넌트(예: 서블릿, JSP, PHP 스크립트 등)가 처리할지를 지정합니다.
  • 지정 방식: 주로 JSP나 서블릿의 경로를 지정합니다.
  • 예시: <form action="/loginServlet" method="post">

method 속성

  • 설명: 웹 브라우저가 웹 서버로 데이터를 요청하는 방식(HTTP 메서드)을 명시합니다. 주로 GET 또는 POST 방식이 사용됩니다.

GET 방식

method 속성이 GET으로 지정되었을 때의 특징입니다.

  • 요청 파라미터 값이 웹 브라우저의 URL에 명시되어 웹 서버로 전송:
    • 사용자가 폼에 입력한 데이터(요청 파라미터)가 URL의 쿼리 스트링(Query String) 형태로 (? 뒤에 키=값&키=값 형식) 웹 서버로 전송됩니다.
    • 예시: http://서버 IP번호:포트번호/컨텍스트명/경로명/login?name=홍길동&age=20
      • 여기서 name=홍길동age=20이 요청 파라미터입니다.
  • 서블릿의 doGet 메서드가 처리:
    • 서블릿에서 GET 방식으로 전송된 요청은 HttpServlet 클래스의 doGet() 메서드에서 처리합니다.
  • 파라미터 길이에 제한:
    • URL의 길이에 제한이 있기 때문에, GET 방식으로 전송할 수 있는 데이터의 양에도 제한이 있습니다. 대부분의 브라우저와 웹 서버는 URL 길이를 2048자 또는 4096자 등으로 제한합니다.
  • 보안에 취약:
    • 전송되는 데이터가 URL에 그대로 노출되므로, 비밀번호나 개인 정보와 같은 민감한 데이터를 전송하는 데에는 적합하지 않습니다. 브라우저 히스토리에도 남습니다.
  • 일반 <a href="..." 태그의 링크 및 명시적 URL 요청:
    • HTML의 <a> 태그를 이용한 링크 클릭이나, 브라우저 주소창에 직접 URL을 입력하여 요청하는 방식은 기본적으로 GET 방식으로 동작합니다. 이는 URL을 통해 특정 리소스를 “가져오는” 행위와 일치하기 때문입니다.

GET 방식의 주요 사용 사례:

  • 단순한 정보 조회 (예: 검색 엔진 쿼리, 게시판 글 목록)
  • 웹 페이지 북마크 (URL에 모든 정보가 포함되어 있어 재방문 용이)

참고: POST 방식은 이와 달리 데이터가 HTTP 메시지 본문(Body)에 포함되어 전송되므로, URL에 노출되지 않고 길이 제한이 없으며 보안에 더 유리합니다. 주로 회원가입, 로그인, 게시글 작성 등 민감하거나 많은 양의 데이터를 전송할 때 사용됩니다.

첫 번째 이미지: POST 방식 및 <form> 태그 예시

이 이미지는 HTTP POST 요청 방식의 특징과 <form> 태그의 method 속성 사용 예시를 설명합니다.

POST 방식

  • 요청 파라미터 값이 HTTP Request의 요청 몸체(body)에 포함되어 전송 (URL에서 확인 불가):
    • POST 방식은 사용자가 입력한 데이터(요청 파라미터)를 HTTP 요청 메시지의 본문(Body)에 담아서 웹 서버로 전송합니다.
    • 따라서 GET 방식과는 달리 URL에 파라미터가 노출되지 않으므로, URL을 통한 데이터 확인이 불가능합니다.
    • 예시: http://서버 IP번호:포트번호/컨텍스트명/경로명/login (URL 자체에는 파라미터가 보이지 않습니다.)
  • 서블릿에서 doPost() 메서드에서 처리:
    • 서블릿에서 POST 방식으로 전송된 요청은 HttpServlet 클래스의 doPost() 메서드에서 처리됩니다.
  • 새로 고침하는 경우 사용자에게 재요청 의사 묻는 정보창을 실행:
    • POST 요청으로 데이터를 전송한 후 페이지를 새로 고침(refresh)하면, 웹 브라우저는 사용자에게 “이 페이지를 새로 고치면 이전에 전송했던 데이터를 다시 전송하게 됩니다. 계속하시겠습니까?”와 같은 경고 메시지를 표시합니다. 이는 데이터 중복 전송을 방지하기 위함입니다. (일명 “F5 문제” 또는 “PRG(Post-Redirect-Get) 패턴”으로 해결 가능)

<form> 태그 method 속성 사용 예시

이미지 하단에는 <form> 태그에서 method 속성을 생략하거나 get, post로 지정했을 때의 동작을 보여줍니다.

  • <form action="/login">
    • method 속성이 생략되었으므로, 기본값은 get 방식으로 전송됩니다.
  • <form action="/login" method="get">
    • 명시적으로 method="get"을 지정하여 get 방식으로 전송됩니다.
  • <form action="/login" method="post">
    • 명시적으로 method="post"를 지정하여 post 방식으로 전송됩니다.

두 번째 이미지: 파라미터 값 추출 및 서블릿 한글 처리

이 이미지는 request 객체를 사용하여 클라이언트가 보낸 파라미터 값을 추출하는 메서드들과, 서블릿에서 한글 파라미터를 처리하는 방법을 설명합니다.

파라미터 값 추출: request 객체 메서드 이용

서블릿/JSP에서 클라이언트가 전송한 파라미터 값을 얻기 위해 HttpServletRequest 객체(내장 객체 request)의 메서드를 사용합니다.

리턴 타입메서드명내용
StringgetParameter(name)name에 해당하는 파라미터 값을 String 타입으로 리턴합니다. 지정된 name의 파라미터 값이 없으면 null을 리턴합니다. 주로 단일 값을 가지는 입력 필드(텍스트 박스, 라디오 버튼 등)에서 사용됩니다.
String[]getParameterValues(name)checkbox, select 태그와 같이 하나의 name에 여러 값을 가지는 경우에 사용합니다. name에 해당하는 파라미터 값들을 String 배열로 리턴합니다.
EnumerationgetParameterNames()form 태그 내에 모든 파라미터 name 목록을 얻고자 할 때 사용합니다. 모든 파라미터 nameEnumeration 타입으로 리턴합니다. 이를 통해 어떤 파라미터들이 전송되었는지 확인할 수 있습니다.

서블릿에서 파라미터 처리 (한글 처리)

웹 애플리케이션에서 클라이언트로부터 전송된 한글 파라미터가 깨지지 않도록 올바르게 처리하는 것은 매우 중요합니다.

  • GET 방식:
    • URL은 기본적으로 UTF-8로 인코딩되어 인식되기 때문에, GET 방식으로 전송된 한글 파라미터는 별도의 한글 인코딩 지정을 할 필요가 없습니다. (대부분의 최신 웹 서버와 브라우저 설정에서 그렇습니다.)
  • POST 방식:
    • 톰캣의 디폴트 문자 인코딩 방식은 ISO-8859-1 입니다.
    • HTTP 요청의 BODY 부분에 한글 파라미터가 포함되어 있는 경우, ISO-8859-1로 인코딩된 데이터를 UTF-8 등으로 올바르게 디코딩해주어야 한글이 깨지지 않습니다.
    • 처리 방법: 파라미터를 읽기 전에 request.setCharacterEncoding("UTF-8"); 코드를 실행하여 인코딩을 지정해줍니다. 이 코드는 주로 서블릿의 doPost() 메서드 시작 부분이나 필터(Filter)에서 처리됩니다.

This post is licensed under CC BY 4.0 by the author.