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이 요청 파라미터입니다.
- 여기서
- 사용자가 폼에 입력한 데이터(요청 파라미터)가 URL의 쿼리 스트링(Query String) 형태로 (
- 서블릿의
doGet메서드가 처리:- 서블릿에서
GET방식으로 전송된 요청은HttpServlet클래스의doGet()메서드에서 처리합니다.
- 서블릿에서
- 파라미터 길이에 제한:
- URL의 길이에 제한이 있기 때문에,
GET방식으로 전송할 수 있는 데이터의 양에도 제한이 있습니다. 대부분의 브라우저와 웹 서버는 URL 길이를 2048자 또는 4096자 등으로 제한합니다.
- URL의 길이에 제한이 있기 때문에,
- 보안에 취약:
- 전송되는 데이터가 URL에 그대로 노출되므로, 비밀번호나 개인 정보와 같은 민감한 데이터를 전송하는 데에는 적합하지 않습니다. 브라우저 히스토리에도 남습니다.
- 일반
<a href="..."태그의 링크 및 명시적 URL 요청:- HTML의
<a>태그를 이용한 링크 클릭이나, 브라우저 주소창에 직접 URL을 입력하여 요청하는 방식은 기본적으로GET방식으로 동작합니다. 이는 URL을 통해 특정 리소스를 “가져오는” 행위와 일치하기 때문입니다.
- HTML의
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)의 메서드를 사용합니다.
| 리턴 타입 | 메서드명 | 내용 |
|---|---|---|
String | getParameter(name) | name에 해당하는 파라미터 값을 String 타입으로 리턴합니다. 지정된 name의 파라미터 값이 없으면 null을 리턴합니다. 주로 단일 값을 가지는 입력 필드(텍스트 박스, 라디오 버튼 등)에서 사용됩니다. |
String[] | getParameterValues(name) | checkbox, select 태그와 같이 하나의 name에 여러 값을 가지는 경우에 사용합니다. name에 해당하는 파라미터 값들을 String 배열로 리턴합니다. |
Enumeration | getParameterNames() | form 태그 내에 모든 파라미터 name 목록을 얻고자 할 때 사용합니다. 모든 파라미터 name을 Enumeration 타입으로 리턴합니다. 이를 통해 어떤 파라미터들이 전송되었는지 확인할 수 있습니다. |
서블릿에서 파라미터 처리 (한글 처리)
웹 애플리케이션에서 클라이언트로부터 전송된 한글 파라미터가 깨지지 않도록 올바르게 처리하는 것은 매우 중요합니다.
- GET 방식:
- URL은 기본적으로 UTF-8로 인코딩되어 인식되기 때문에,
GET방식으로 전송된 한글 파라미터는 별도의 한글 인코딩 지정을 할 필요가 없습니다. (대부분의 최신 웹 서버와 브라우저 설정에서 그렇습니다.)
- URL은 기본적으로 UTF-8로 인코딩되어 인식되기 때문에,
- 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.