[Servlet] HttpServlet / doGet, doPost / 로그인 페이지


HttpServlet


  • Servlet 클래스는 HttpServlet 클래스 상속 받음

  • doGet, doPost 메서드는 매개변수로 HttpServletRequest와 HttpServletResponse를 받음 (톰캣 서버가 자동 생성)

  • 클라이언트의 요청이 들어오면 서버에서 그것을 받아 처리하는데, 요청처리객체(HttpServletRequest) 및 응답처리객체(HttpServletResponse)는 톰캣 서버(WAS)가 직접 생성한다.

    • ex) 클라이언트가 로그인 정보를 입력하고 로그인 버튼을 누르면 request 객체에 담겨 서버에 넘어감 -> 서버는 DB를 참조, 로그인 여부를 결정 해 그 정보를 response 객체에 담아서 넘겨준다.



doGet / doPost


  • doGet()

    • <form action="" method="get">인 경우 호출

    • URL값으로 쿼리스트링을 통해 정보가 전송되기 때문에 보안에 취약함

  • doPost()

    • <form action="" method="post">인 경우 호출

    • header에 값을 실어서 정보가 전송되기 때문에 보안에 강함



간단한 로그인 페이지 만들기


  • login.html

      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>로그인화면</title>
      <link rel="stylesheet" type="text/css" href="style_login.css">
      </head>
      <body>
          <h1>로그인</h1>
          <section id="loginFormArea">
              <!-- <form action="login" method="get"> -->
              <form action="login" method="post">
                  <label>아이디 : </label>
                  <input type="text" name="uid" id="uid" required="required">
                  <br>
                  <br>
                  <label>비밀번호 : </label>
                  <input type="password" name="upw" id="upw" required="required">
                  <br>
                  <br>
                  <input type="submit" value="로그인">
              </form>
          </section>
      </body>
      </html>
    
    • HTML 파일은 프로젝트 > src > main > webapp 하위에 위치해야 한다. (파일이 제대로 위치해 있지 않을 경우 톰캣 실행이 안되는 등의 문제가 생길 수 있으니 주의하자!)


  • style_login.css

      @charset "UTF-8";
    
      body {
          margin: 0 auto;
          width: 300px;
          padding: 20px;
      }
    
      h1 {
          text-align: center;
      }
    
      #loginFormArea {
          padding: 20px;
          border: 1px solid black;
      }
    


  • servletLogin.java

      import java.io.IOException;
      import java.io.PrintWriter;
    
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
    
      @WebServlet("/login")
      public class servletLogin extends HttpServlet {
          private static final long serialVersionUID = 1L;
    
          public servletLogin() {
    
          }
    
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
          }
    
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                
              // 클라이언트가 요청한 파라미터 값들을 인코딩
              request.setCharacterEncoding("utf-8");
                
              // 클라이언트에게서 넘어오는 아이디와 비밀번호 값을 받아 출력스트림을 얻고 화면에 뿌리기
              String uid = request.getParameter("uid");
              String upw = request.getParameter("upw");
                
              response.setContentType("text/html; charset=utf-8");
              PrintWriter writer = response.getWriter();
              writer.println("아이디 : " + uid + "<br>");
              writer.println("비밀번호 : " + upw);
                
              writer.close(); 
          }
    
      }
    

    • GET

    GET 방식을 이용하면 위 이미지에서 볼 수 있듯이 URL에 입력값이 모두 노출되어 보안에 취약하다.

    • POST

Categories:

JSP/Servlet