본문 바로가기
☕ Java 웹 프로그래밍/Servlet & JSP

[Servlet&JSP] 학습과제: 사용자 입력을 통한 계산 요청

by 일단연 2023. 5. 26.

* 본 글은 [뉴렉처]의 Servlet&JSP 프로그래밍 강의를 듣고 정리한 글입니다.

 

2020 Servlet&JSP 프로그래밍

 

www.youtube.com

 

 학습과제: 사용자 입력을 통한 계산 요청 

계산기 웹 프로그램 만들기

  • 요청할 때 (add.html)
    • [GET] http://…/add.html
    • [POST] http://…add
  • 응답할 때 (Add.java)
    • http://…/add

계산기 웹 프로그램 완성

  • 1. add.html를 생성해 사용자로부터 값을 입력받을 틀을 제작
    • <form> 안에서 <div>로 구획을 나눔
    • <input>에 입력받는 형식은 text임을 설정하고 쿼리도 설정
    • <label>로는 <input>으로 만든 박스의 설명을 작성
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 웹 프로그램</title>
</head>
<body>
  <form action="add" method="post">
    <p>계산할 값을 입력하세요.</p>
    <div>
      <label>x : </label><input name="x" type="text"/>
    </div>
    <div>
      <label>y : </label><input name="y" type="text"/>
    </div>
    <div>
      <input type="submit" value="계산"/>
    </div>
  </form>
</body>
</html>
  • 2. Add.java를 생성해 서블릿 작성
    • 1) 서버가 클라이언트에 response할 때, 서버로부터 전달받은 컨텐츠를 클라이언트가 해석할 때의 인코딩 방식을 UTF-8로 설정
    • 2) 클라이언트의 요청에 문자 형태로 응답하기 위해
    • 3) add.html로부터 입력받은 x, y 값을 String 값의 변수 x_ , y_ 에 대입
    • 4) 쿼리 x, y의 초기값 설정
    • 5) x_와 y_가 “”이 아닐 경우에만 int형으로 변환
      • 사용자로부터 쿼리 값을 입력받기 때문에 값을 입력하지 않는 경우엔 요청 시의 URL이 http://…/add?x=&y= > x_와 y_가 null이지 않을 조건을 신경쓸 필요 없음. “” 빈 값만 신경쓰면 됨.
      • if(x_ != null && !x_.equals("")) 에서 x_ != null은 제거해도 됨
    • 6) 정수 x와 y를 더한 값을 int형 변수 result에 대입
    • 7) 최종적으로 result 출력
package com.newlecture.web;

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("/add")
public class Add extends HttpServlet {
  @Override
  protected void service(HttpServletRequest request
                      , HttpServletResponse response)
                      throws ServletException, IOException
  {
    //1
    response.setContentType("text/html; charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
		
    //2
    PrintWriter out = response.getWriter();
		
    //3
    String x_ = request.getParameter("x");
    String y_ = request.getParameter("y");
    
    //4
    int x = 0;
    int y = 0;
		
    //5
    if(!x_.equals("")) {
      x = Integer.parseInt(x_);
    }
		
    if(!y_.equals("")) {
      y = Integer.parseInt(y_);
    }
			
    //6
    int result = x + y;
			
    //7
    response.getWriter().printf("출력 결과는 %d\n", result);
  }
}
  • 3. add.html 실행
  • 4. 결과

  • add.html을 실행하면 출력되는 기본 결과

  • 값을 입력해 POST 요청

  • 계산 버튼 누른 결과
    • 서블릿에 @WebServlet으로 작성한 URL 패턴(/add)대로 나옴

 

PrintWriter out = response.getWriter( );
out.printf(”출력 결과는 %d\n”, result);
       (참고)

  • HttpServletResponse 인터페이스의 상위 인터페이스인 ServletResponse의 getWriter( )메소드를 호출
    • getWriter( )메소드는 java.io의 PrintWriter 클래스를 리턴 타입으로 함
  • PrintWriter 클래스는 바이트를 문자 형태를 가지는 객체로 바꿔줌
  • 클라이언트에게 문자 형태로 응답을 하고 싶기 때문에 out이라는 PrintWriter 클래스 객체를 정의하고 getWriter( )메소드를 통해 인스턴스를 얻음
  • getWriter( )메소드를 통해 응답으로 내보낼 출력 스트림을 얻어낸 후 out.printf( ) 형태로 작성하여 스트림에 텍스트를 기록
  • 요약
    • Servlet에서 클라이언트의 요청(Request)에 대한 응답(Response) 형태는 문자(character) 또는 바이트(byte)가 될 수 있음
    • 클라이언트의 요청에 문자 형태로 응답하려면 데이터의 흐름(Stream)을 컨트롤 해야 함 = 텍스트(문자) 형태로 응답을 보내도록 설정해야 함
    • HttpServletResponse 인터페이스의 상위 인터페이스인 ServletResponse의 getWriter( )메소드를 호출하면 스트림에 텍스트를 기록하는 것이 가능

printf( )

  • 서식이 있는 출력
    • 지시를 통해 변수의 값을 여러 형식으로 바꿔서 출력할 수 있음
  • 형태: out.printf ("출력 서식", 출력할 내용);
지시 출력 형식
%d 정수형 출력
%s 문자형 출력
%f 실수형 출력
%c 문자열 출력
%n 줄 바꿈
%b boolean 출력
  • %숫자d
    • %와 d 사이에 오는 숫자만큼 자리를 확보
    • +는 숫자가 양수일 때 숫자 앞에 +를 표시, -는 숫자를 왼쪽으로 정렬
    • 예: System.out.printf("%7d%n", 7); > 결과: 7 (왼쪽에 7칸의 여백 발생)