본문 바로가기
Java/Servlet & JSP

JSP) Post 방식

by 박채니 2022. 6. 16.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


Post 방식

 

HTML 코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>개인 취향 테스트</title>
</head>
<body>
	<h2>개인 취향 테스트(POST)</h2>
	당신의 취향을 테스트 합니다.<br/>
	데이터 입력후 확인 버튼을 누르세요<br/>
	
	<form name="personFrm" action="/web2/testPerson2.do" method="POST"> 
	 <ul style="list-style: none; line-height: 200%;">
		<li>이름은? 
			<input type="text" name="name" size="10" required/>
		</li>
		<li>좋아하는 색?
			<input type="radio" id="red" name="color" value="빨강" required/><label for="red">빨강</label>
			<input type="radio" id="blue" name="color" value="파랑" /><label for="blue">파랑</label>
			<input type="radio" id="yellow" name="color" value="노랑" /><label for="yellow">노랑</label>
			<input type="radio" id="green" name="color" value="초록" /><label for="green">초록</label>
		</li>
		<li>좋아하는 동물은?
			<select name="animal">
				<option value="강아지">강아지</option>
				<option value="고양이">고양이</option>
				<option value="병아리">병아리</option>
			</select>	
		</li>
		<li>좋아하는 음식?(모두 고르세요)
			<input type="checkbox" name="food" id="food1" value="짜장면" /><label for="food1">짜장면</label>
			<input type="checkbox" name="food" id="food2" value="짬봉" /><label for="food2">짬봉</label>
			<input type="checkbox" name="food" id="food3" value="탕수육" /><label for="food3">탕수육</label>
			<input type="checkbox" name="food" id="food4" value="양장피" /><label for="food4">양장피</label>
			<input type="checkbox" name="food" id="food5" value="팔보채" /><label for="food5">팔보채</label> 
		</li>
		<li>
			<br/>
			<input type="submit" id="btnOK" value="확인"  />&nbsp;&nbsp; 
			<input type="reset"  value="취소" />
		</li>
		
	 </ul>
	
	</form>
</body>
</html>

폼을 제출하면 현재 testPerson2.do가 없으므로 404가 에러가 나타나지만, GET방식과 다른 점을 확인할 수 있습니다.

GET 방식은 URL에 사용자 입력값이 ?name=...&color=...등 붙지만, POST방식은 메세지 바디에 사용자 입력 값이 붙습니다.

데이터 전송은 잘 된 것으로 보여집니다.

 


웹 통신을 위한 Servlet 생성하기

 

doPost()

public class TestPersonServlet2 extends HttpServlet{
	/**
	 * POST 요청 처리 시 doPost 오버라이드
	 */
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 인코딩 처리 (POST 요청 시 필수)
		request.setCharacterEncoding("utf-8");
		
		// 2. 사용자 입력 값 처리
		String name = request.getParameter("name");
		String color = request.getParameter("color");
		String animal = request.getParameter("animal");
		String[] foods = request.getParameterValues("food");
		
		System.out.println("name = " + name);
		System.out.println("color = " + color);
		System.out.println("animal = " + animal);
		System.out.println("foods = " + (foods!=null?Arrays.toString(foods):null));
		
		// 3. 업무로직
		
		// 4. 응답메세지 작성
		// 헤더(설정정보)
		response.setContentType("text/html; charset=utf-8");
		
		// 바디(html)
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='utf=8'>");
		out.println("<title>개인취향검사결과</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>개인취향검사결과 " + request.getMethod() + "</h1>");
		out.println("<p>이름 : " + name + "</p>");
		out.println("<p>선호색상 : " + color + "</p>");
		out.println("<p>선호동물 : " + animal + "</p>");
		out.println("<p>선호중국음식 : " + (foods != null ? Arrays.toString(foods):"없음") + "</p>");
		out.println("</body>");
		out.println("</html>");
	}
}

 

Servlet 매핑하기 (web.xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>hello-web2</display-name>
  
  <servlet>
  	<servlet-name>testPersonServlet2</servlet-name>
  	<servlet-class>com.ce.web.TestPersonServlet2</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>testPersonServlet2</servlet-name>
  	<url-pattern>/testPerson2.do</url-pattern>
  </servlet-mapping>
</web-app>

 

웹 통신 메세지를 확인해보면, GET과 다른 것을 확인할 수 있습니다.

사용자 입력 값이 요청 메세지 바디 부분에 작성된 것을 확인할 수 있습니다.

 

따라서 POST 방식은 반드시 인코딩 처리를 해줘야 합니다.

 

인코딩 처리를 하지 않을 시

// 1. 인코딩 처리 (POST 요청 시 필수)
// request.setCharacterEncoding("utf-8");

한글이 다 깨져서 나오는 것을 확인할 수 있습니다.

 

※ select 작업 시에는 GET / insert, delete, update 작업 시에는 POST!