포스트

02. Post type

POST 방식 요청 및 응답

1
2
3
4
5
🔸POST 방식 : GET 방식과는 다르게 주소 뒤에 전달하는 값이 붙는게 아니다. HTTP Protocol의 body 부분에 숨겨져서 전달되는 방식

🔸장점 : 길이 제한 X, 보안성 향상(데이터가 직접적으로 보이지 않음)

🔸단점 : 캐싱 불가능, 추가적인 문자 인코딩 처리가 필요

회원가입 만들기

  • 1) index.html 만들기

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <form action="/ServletProject1/signUp" method="POST">
      아이디 : <input type="text" name="inputId"> <br>
      비밀번호 : <input type="password" name="inputPw"> <br>
      비밀번호 확인 : <input type="password" name="inputPw"> <br>
      
      이메일 : <input type="email" name="inputEmail"> <br>
      이메일 수신 동의(선택) <input type="checkbox" name="agree"> <br>
        
      <button>가입하기</button>
    </form>
    
  • 2) Servlet 만들기

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    
    @WebServlet("/signUp")
    public class ServletEx3 extends HttpServlet{
        
      @Override
      protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
        // POST 방식은 문자 데이터가 깨질 위험이 있음
        // 왜?? 브라우저, 서버간의 문자 인코딩 차이 때문에
          
        // 해결방법 : 요청 정보에 담긴 데이터의 문자인코딩을 UTF-8로 변경
        req.setCharacterEncoding("UTF-8");
          
        // 파라미터 얻어와 변수에 저장
        String inputId = req.getParameter("inputId");
        String[] inputPw = req.getParameterValues("inputPw");
        String email = req.getParameter("inputEmail");
        String agree = req.getParameter("agree");
          
        // 응답 데이터 문서 형식, 문자 인코딩 지정
        resp.setContentType("text/html; charset=UTF-8");
          
        // 응답용 스트림 얻어오기
        PrintWriter out = resp.getWriter();
          
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head> <title>회원 가입 결과</title></head>");
        out.println("<body>");
          
        if(inputPw[0].equals(inputPw[1])){
          // 정상 가입한 경우에 대한 화면
            
          // user01님 환영합니다.
          // 이메일 수신 동의 여부 : O / X
          // 동의 O 인 경우
          // 수신할 이메일 : user01@test.com
          // checkbox는 별도의 value가 없을 때
          // 체크 X : null
          // 체크 O : "on"
          
          out.printf("<h3>%s님 환영합니다</h3>", inputId);
          if(agree != null) {
            out.println("<h3>이메일 동의 수신 여부 : O</h3>");
            out.printf("<h3>수신할 이메일 : %s</h3>", email);
          } else {
            out.println("<h3>이메일 동의 수신 여부 : X</h3>");
          }
      
        } else {
          out.println("<h1 style='color:red'>비밀번호가 일치하지 않습니다.</h1>");
        }
          
        out.println("</body>");
        out.println("</html>");
      }
    }