[Servlet] 서블릿 요청

sang·2024년 1월 31일

서블릿 주요 기능

  1. 클라이언트로부터 요청 받기
  2. 비즈니스 로직 처리 (데이터베이스 연동 등)
  3. 클라이언트에 결과 반환

서블릿 요청&응답 API

  • 요청 API: javax.servlet.http.HttpServletRequest 클래스
  • 응답 API: javax.servlet.http.HttpServletResponse 클래스

메소드 (추가 필요)



서블릿 요청

클라이언트 웹 브라우저에서 서블릿으로 요청

form 태그로 요청

  • form 태그
    action 속성 = 데이터를 전송할 서블릿 또는 JSP의 이름 지정
  • 서블릿
    name 속성 값으로 데이터를 받아옴

메소드

  • String getParameter(String name)
    name으로 전송된 값 받기
  • String[ ] getParameterValues(String name)
    name으로 전송된 모든 값 받기
  • Enumeration getParameterNames()
    전송된 모든 name 받기

실습 코드

getParameter 이용

pro06/WebContent/login.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>로그인 창</title>
</head>
<body>
  <form name="frmLogin" method="get" action="login" encType="UTF-8"> <!-- login 서블릿 매핑명으로 데이터 전송 -->
    아이디 :<input type="text" name="user_id"><br>
    비밀번호:<input type="password" name="user_pw"><br>
    <input type="submit" value="로그인"> <input type="reset" value="다시입력">
  </form>
</body>
</html>

pro06/src/sec01/ex01/LoginServlet.java

package sec01.ex01;
...

@WebServlet("/login") // 서블릿 매핑명
public class LoginServlet extends HttpServlet {
  public void init() throws ServletException {
    System.out.println("init 메서드 호출");
  }
  
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /* 전송된 데이터 받아오기 */
    request.setCharacterEncoding("utf-8"); //전송된 데이터 인코딩
    String user_id = request.getParameter("user_id");
    String user_pw = request.getParameter("user_pw");
    System.out.println("아이디:" + user_id);
    System.out.println("비밀번호:" + user_pw);
  }

  public void destroy() {
    System.out.println("destroy 메서드 호출");
  }
}

getParameterValues 이용

pro06/WebContent/input.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>여러 가지 input 타입 표시 창</title>
</head>
<body>
  <form name="frmInput" method="get" action="input"> <!-- input 서블릿 매핑명으로 데이터 전송 -->
    아이디 :<input type="text" name="user_id"><br>
    비밀번호:<input type="password" name="user_pw"><br>
    
    <!-- 동일 name 값으로 전송 -->
    <input type="checkbox" name="subject" value="java" checked>자바
    <input type="checkbox" name="subject" value="C언어">C언어
    <input type="checkbox" name="subject" value="JSP">JSP
    <input type="checkbox" name="subject" value="안드로이드">안드로이드
    
    <br><br>
    <input type="submit" value="전송">
    <input type="reset" value="초기화">
  </form>
</body>
</html>

pro06/src/sec01/ex01/InputServlet.java

package sec01.ex01;
...

@WebServlet("/input")
public class InputServlet extends HttpServlet {
  public void init() throws ServletException {
    System.out.println("init 메서드 호출");
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    
    // 개별 name 값을 가진 데이터 추출
    String user_id = request.getParameter("user_id");
    String user_pw = request.getParameter("user_pw");
    System.out.println("아이디:" + user_id);
    System.out.println("비밀번호:" + user_pw);
    
    // 동일 name 값을 가진 데이터 추출
    String[] subject = request.getParameterValues("subject");
    
    for (String str : subject) {
      System.out.println("선택한 과목:" + str);
    }
  }

  public void destroy() {
    System.out.println("destroy 메서드 호출");
  }
}

getParameterNames 이용

pro06/WebContent/input.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>여러 가지 input 타입 표시 창</title>
</head>
<body>
  <form name="frmInput" method="get" action="input"> <!-- input 서블릿 매핑명으로 데이터 전송 -->
    아이디 :<input type="text" name="user_id"><br>
    비밀번호:<input type="password" name="user_pw"><br>
    
    <!-- 동일 name 값으로 전송 -->
    <input type="checkbox" name="subject" value="java" checked>자바
    <input type="checkbox" name="subject" value="C언어">C언어
    <input type="checkbox" name="subject" value="JSP">JSP
    <input type="checkbox" name="subject" value="안드로이드">안드로이드
    
    <br><br>
    <input type="submit" value="전송">
    <input type="reset" value="초기화">
  </form>
</body>
</html>

pro06/src/sec01/ex01/InputServlet.java

package sec01.ex01;
...
 
@WebServlet("/input")
public class InputServlet extends HttpServlet {
  public void init() throws ServletException {
    System.out.println("init 메서드 호출");
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    
    /* 전송된 모든 name 순회 */
    Enumeration enu = request.getParameterNames();
    while (enu.hasMoreElements()) {
      String name = (String) enu.nextElement();
      // 해당 name에 대한 데이터 추출
      String[] values = request.getParameterValues(name);
      for (String value : values) { System.out.println("name=" + name + ",value=" + value); }
    }
  }
  
  public void destroy() {
    System.out.println("destroy 메서드 호출");
  }
}


자바스크립트로 서블릿 요청

  1. 자바스크립트 함수 호출
  2. 유효성 검사
  3. 서블릿 요청

실습 코드

pro06/WebContent/login.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <script type="text/javascript">
    function fn_validate() {
      var frmLogin = document.frmLogin; // <form> 태그 name
      var user_id = frmLogin.user_id.value;
      var user_pw = frmLogin.user_pw.value;
 
      // 유효성 검사
      if ((user_id.length == 0 || user_id == "") || (user_pw.length == 0 || user_pw == "")) {
        alert("아이디와 비밀번호는 필수입니다.");
      } else {
        frmLogin.method = "post";
        frmLogin.action = "login";
        frmLogin.submit(); // 서블릿으로 전송
      }
    }
  </script>
  <title>로그인창</title>
</head>

<body>
  <form name="frmLogin" method="post" action="login" encType="UTF-8">
    아이디 :<input type="text" name="user_id"><br>
    비밀번호:<input type="password" name="user_pw"><br>
    <input type="button" onClick="fn_validate()" value="로그인">
    <input type="reset" value="다시 입력">
    <input type="hidden" name="user_address" value="서울시 성북구" />
  </form>
</body>
</html>

pro06/src/sec03/ex03/LoginServlet.java

package sec03.ex03;
...
 
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
  public void init() {
System.out.println("init 메서드 호출");
  }

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    String id = request.getParameter("user_id");
    String pw = request.getParameter("user_pw");
    String address = request.getParameter("user_address");
    System.out.println("아이디 : " + id);
    System.out.println("비밀번호 : " + pw);
    
    /* 출력 구성 */
    String data = "<html>";
    data += "<body>";
    data += "아이디 : " + id;
    data += "<br>";
    data += "비밀번호: " + pw;
    data += "<br>";
    data += "주소 : " + address;
    data += "</body>";
    data += "</html>";
    out.print(data);
  }
  
   public void destroy() {
    System.out.println("destroy 메서드 호출");
  }
}


*자바 웹을 다루는 기술

profile
CS 메모장

0개의 댓글