SMALL
안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
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="확인" />
<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!
LIST
'Java > Servlet & JSP' 카테고리의 다른 글
JSP) JSP 사용해보기 (0) | 2022.06.16 |
---|---|
JSP) Servlet 템플릿 이용하여 Servlet 생성, @WebServlet 이노테이션, Servlet 생명주기 (0) | 2022.06.16 |
JSP) GET방식 (0) | 2022.06.15 |
JSP) Dynamic Web Project 생성하기, 프로젝트 환경설정, 서버 구동하기, Emmet 설정하기 (0) | 2022.06.15 |
JSP) JSP 이클립스 환경 설정, 지역 서버 생성하기 (0) | 2022.06.15 |