인프런 강의 학습/MVC 프레임워크_나프1탄
인프런 MVC 프레임워크는 내손에 16일차 : MVC01_3 요청과 응답 이해하기
현호s
2021. 6. 5. 15:39
반응형
# MVC01_3 요청(HttpServletRequest)과 응답(HttpServletResponse)이해하기
## 클라이언트 요청
- su.html에 입력된 내용을 바탕으로 클라이언트에게 화면이 보여지게 된다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>연습</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<form action="calc.do">
<table class="table table-bordered">
<tr>
<td>수1</td>
<td><input type="text" name="su1" /></td>
</tr>
<tr>
<td>수2</td>
<td><input type="text" name="su2" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="전송" class="btn btn-primary"/>
<input type="reset" value="취소" class="btn btn-warning"/>
</td>
</tr>
</table>
</form>
</body>
</html>
- 클라이언트가 수1, 수2에 값을 입력한 후 전송 버튼을 클릭하게 되면 su.html 내 from에 설정되어있는 action에 요청이 전달되어 요청에 따른 응답이 표시되게 된다.
## 요청에 대한 응답
- CalcController 에서 응답을 처리하게 된다.
- 여기서 Service 메서드는 Request Response 객체를 통해 요청과 응답을 수행한다.
package kr.bit.controller;
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("/calc.do")
public class CalcController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 클라이언트에서 넘어오는 폼 파라미터 받기(파라미터 수집) -> 파라미터 : su1, su2
int su1 = Integer.parseInt(request.getParameter("su1"));
int su2 = Integer.parseInt(request.getParameter("su2"));
// 2. 비즈니스 로직 -> su1 ~ su2 = ?
int sum = 0;
for ( int i = su1; i <= su2; i++ ) {
sum += i;
}
// 3. 응답
PrintWriter out = response.getWriter();
out.println("total = " + sum);
}
}
## 요청 정보
- 클라이언트에서 입력된 정보가 서버쪽으로 전달될 때 요청정보의 형태로 전달된다.
- 여기서 요청정보는 패킷으로 요청이 된다.
## 패킷의 구성
- 하나의 패킷에는 header 와 body로 이루어진다.
- header에는 클라이언트의 정보가 들어간다. ( 클라이언트의 IP 주소. 클라이언트 port 정보 등 )
- body에는 입력된 변수의 값이 들어간다. ( su1 = 1, su2 = 5 등)
## 톰캣 객체
- 톰캣(WAS)은 하나의 클라이언트에 대한 요청이 들어오게 되면 이를 식별하기 위해서 2개의 객체를 만들게 된다.
- HttpServletReqeust 라는 요청객체와 HttpServletResponse 라는 응답객체를 한 쌍으로 생성한다.
- 여기서 HttpServletRequest에 넘어온 요청정보를 담아두게 된다.
- 그리고 HttpSrvletResponse에도 넘어온 요청 정보 중 header에 대한 정보를 담아두게 된다.
## 요청 방식
- 클라이언트가 서버로 요청할때 요청하는 방식에는 GET 방식과 POST 방식이 있다.
- 요청방식은 form 태그에 method="" 에 입력한다. (method를 입력하지 않으면 기본은 GET 방식으로 진행된다.)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>연습</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<form action="calc.do" method="POST">
<table class="table table-bordered">
<tr>
<td>수1</td>
<td><input type="text" name="su1" /></td>
</tr>
<tr>
<td>수2</td>
<td><input type="text" name="su2" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="전송" class="btn btn-primary"/>
<input type="reset" value="취소" class="btn btn-warning"/>
</td>
</tr>
</table>
</form>
</body>
</html>
- GET 방식 : 클라이언트 요청 시 서버로 넘어가는 파라미터 값이 아래와 같이 주소에 보이게 된다. (보안상 문제가 발생할 수 있어 회원가입, 글쓰기 등의 경우 사용하지 않는다.)
- GET 방식은 보안에 취약하고, URL을 이용하여 파라미터 값을 전달하기 때문에 제한이 있다.
http://localhost:8081/MVC01/calc.do?su1=1&su2=5
- POST 방식 :클라이언트 요청 시 서버로 넘어가는 파라미터 값을 패킷에 담아서 서버로 전달한다.
- 일반적으로 form은 POST방식을 사용한다.
반응형