웹 애플리케이션에서 사용자의 Form 데이터를 처리하는 것은 매우 중요한 작업입니다. 이번 글에서는 Form 데이터를 처리하는 Servlet의 활용 방법과 doGet() 및 doPost() 메서드의 차이를 학습한 내용을 바탕으로 설명하겠습니다.
HttpServletRequest 객체를 통해 데이터를 수신하고 처리합니다.HttpServletResponse 객체를 통해 브라우저로 전달됩니다.| 특징 | GET | POST |
|---|---|---|
| 데이터 전송 방식 | URL에 쿼리 스트링으로 포함 | HTTP Request의 본문(Body)에 포함 |
| URL 예시 | http://localhost:8090/mSignUp?m_name=John | http://localhost:8090/mSignUp |
| 보안 | 데이터가 URL에 노출 (덜 안전) | 데이터가 숨겨짐 (더 안전) |
| 용도 | 간단한 데이터 전송, 조회 목적 | 민감한 데이터 전송, 저장 및 수정 목적 |
| 데이터 길이 제한 | 제한 있음 | 제한 없음 |
아래의 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>
MemSignUp.javadoGet() 메서드를 통해 데이터를 URL 쿼리에서 읽어옵니다.doPost() 메서드는 doGet()을 호출하여 동일한 방식으로 데이터를 처리합니다.request.getParameter(), request.getParameterValues(), request.getParameterNames()를 사용합니다.@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);
}
}
request.getParameter(String name)
request.getParameter("m_name") → 사용자의 이름 반환.request.getParameterValues(String name)
request.getParameterValues("m_hobby") → 선택한 취미 반환.request.getParameterNames()
Enumeration으로 반환합니다. response.getWriter()
response.getWriter().println("Hello User!").http://localhost:8090/mSignUp?m_name=John&m_pass=1234&m_gender=M&m_hobby=sport&m_hobby=reading&m_residence=seoul-- 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_residencehttp://localhost:8090/mSignUpHttpServletRequest의 다양한 메서드를 활용하면 됩니다.