* 본 글은 [뉴렉처]의 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칸의 여백 발생)
'☕ Java 웹 프로그래밍 > Servlet & JSP' 카테고리의 다른 글
[Servlet&JSP] 이클립스에서 클래스가 아닌, 서블릿으로 서블릿 만들기 (0) | 2023.05.26 |
---|---|
[Servlet&JSP] 한글이 깨지는 문제 해결방법 최종 정리 (0) | 2023.05.26 |
[Servlet&JSP] 서블릿 필터(Servlet Filter) (0) | 2023.05.25 |
[Servlet&JSP] 사용자 입력: 한글 입력 문제 (2) | 2023.05.24 |
[Servlet&JSP] 사용자 입력: 입력할 내용이 많은 경우는 POST 요청 (2) | 2023.05.24 |