본문 바로가기

JAVA

Servlet의 응답 처리방법

  • Servlet의 응답 처리방법
    • doGet(), doPost() 메서드의 처리
    • javax.servlet.http.HttpServletResponce 객체를 사용한 처리
    • setContentType()을 이용한 클라이언트에게 전송할 데이터의 종류(MIME-TYPE)을 지정
    • 클라이언트와 servlet의 통신은 자바I/O 스트림을 이용한다.
  • MIME-TYPE
    • 톰캣 컨테이너에서 미리 설정해 놓은 데이터 종류들을 MIME-TYPE(마임타입) 이라고한다.
      • HTML로 전송시 -> text/html
      • 일반 텍스트로 전송시 -> text/plain
      • XML데이터로 전송시 -> application/xml
    • 웹 브라우저는 기본적으로 HTML만 인식하므로 Servlet에서 전송하는 대부분의 데이터는 text/html로 전송한다
    • Servlet에서 클라이언트 응답과정
      • setContentType()을 이용해 MIME-TYPE 지정 -> 데이터 출력을 위한 PrintWriter 객체 생성 -> HTML 기반 출력 데이터 생성 -> PrintWriter내 print(), println() 사용하여 데이터 출력
  • 요청받은 Servlet 데이터를 I/O 이용한 출력
    • login2.html
      • <!DOCTYPE html>
        <html lang="en">
        <head>
        <meta charset="UTF-8">
        <title>로그인</title>
        </head>
        <body>
        <form name="frmLogin" method="get" action="login2" enctype="UTF-8">
        아이디 : <input type="text" name="user_id"></br>
        비밀번호 : <input type="password" name="user_password"></br>
        <input type="submit" value="로그인">
        <input type="reset" value="다시입력">
        </form>
        </body>
        </html>
    • LoginServlet2.java
      • @WebServlet(value = "/login2")
        public class LoginServlet2 extends HttpServlet {
        @Override
        public void init() throws ServletException
        {
        System.out.println("init 호출");
        }
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=utf-8");
        PrintWriter out = response.getWriter();

        String user_id = request.getParameter("user_id");
        String user_password = request.getParameter("user_password");
        String data = "<html>";
        data += "<body>";
        data += "아이디 : " + user_id;
        data += "</br>";
        data += "비밀번호 : " + user_password;
        data += "</body>";
        data += "</html>";
        out.println(data);
        }

        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        }
        }
  • input name에서 넘어온 파라미터를 String 형식 request.getParameter()를 사용하여 변수에 저장 후 PrintWriter를 사용하여 화면상에 출력
  • I/O Stream 을 사용한 환율 계산기 예제
    • package sec02.ex01;

      import javax.servlet.*;
      import javax.servlet.http.*;
      import javax.servlet.annotation.*;
      import java.io.IOException;
      import java.io.PrintWriter;

      @WebServlet(value = "/calc")
      public class ClacServlet extends HttpServlet {
      @Override
      public void init() throws ServletException
      {
      System.out.println("init call");
      }
      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


      request.setCharacterEncoding("UTF-8");
      response.setContentType("text/html; charset=utf-8");
      PrintWriter pw = response.getWriter();

      String command = request.getParameter("command"); // 수행할 요청 받아오는것
      String won = request.getParameter("won"); // 변환할 원화를 확인
      String operator = request.getParameter("operator"); // 변환할 외화 종류를 받아옴

      if(command != null && command.equals("calculate")) // 초기 응답시 command가 null이 아니며, command 값이 calculate 일경우
      {
      String result = calculate(Float.parseFloat(won), operator);
      pw.print("<html><font size=10> 변환 결과</font></br>");
      pw.print("<html><font size=10>" + result + operator + "</font></br>");
      pw.print("<a href= '/calc'> 환율계산기 </a>");
      return ;
      }

      pw.print("<html><title>환율 계산기</title>");
      pw.print("<font font size=5>환율 계산기</font>");
      pw.print("<form name='frmCalc action='calc' method='get' />");
      pw.print("원화 : <input type='text' name='won' size='10'/>");
      pw.print("<select name = 'operator'>");
      pw.print("<option value='dollar'>달러</option>");
      pw.print("<option value='en'>엔화</option>");
      pw.print("<option value='wian'>위안</option>");
      pw.print("<option value='pound'>파운드</option>");
      pw.print("<option value='euro'>유료</option>");
      pw.print("</select>");
      pw.print("<input type='hidden' name='command' value='calculate'/>");
      pw.print("<input type='submit' value='변환'/>");
      pw.print("</form>");
      pw.print("</html>");
      pw.close();
      }
      private static String calculate(float won, String operator)
      {
      String result = null;
      float USD_RATE = 1124.70F;
      float JPY_RATE = 10.113F;
      float CNY_RATE = 163.30F;
      float GBP_RATE = 1444.35F;
      float EUR_RATE = 1295.97F;

      if(operator.equals("dollar"))
      {
      result = String.format("%.6f", won / USD_RATE);
      }
      else if(operator.equals("en"))
      {
      result = String.format("%.6f", won / JPY_RATE);
      }
      else if(operator.equals("wian"))
      {
      result = String.format("%.6f", won / CNY_RATE);
      }
      else if(operator.equals("pound"))
      {
      result = String.format("%.6f", won / GBP_RATE);
      }
      else if(operator.equals("euro"))
      {
      result = String.format("%.6f", won / EUR_RATE);
      }
      return result;
      }

      }