[Servlet&JSP] 요청과 응답 기초 원리(form태그와 servlet)

KKS·2023년 8월 3일
post-thumbnail

클라이언트와 서버 사이의 요청과 응답 기초원리(form태그와 servlet)

  1. form태그의 action속성과 servlet의 annotation 일치
    -> 즉, form태그의 action속성은 클라이언트의 요청을 보낼 servlet을 명시한다.
  2. input태그의 name속성을 servlet의 getParameter()로 받아온다.
    -> 클라이언트가 요청한 전달값을 name속성에 담아 보내면, 서블릿은 getParameter()로 받는다.
  3. 클라이언트가 post방식으로 서버에 요청하면, request객체에 패킷(요청정보)를 담아 전달한다.
    -> 또한, HttpServletRequest, HttpServletResponse 객체가 생성된다.(표1,2 참고)

HttpServletRequest(요청객체)에 패킷(요청정보)의 header와 body가 담긴다.
-> 따라서, 서버입장에서는 클라이언트의 소켓(IP, Port)과 전달값을 알 수 있다.
-> request.getParameter()로 클라이언트가 보낸 전달값을 얻어올 수 있다.
cf) 패킷의 header에는 브라우저의 버정정보, 한글 인코딩 정보, Cookie 정보 등도 담긴다.

headerbody
클라이언트의 IP와 Portparameter1
-parameter2
(브라우저의 버전정보)-
(한글 인코딩 정보)-
(Cookie 정보)-

표1. request객체 내부의 패킷(요청정보) = header + body

HttpServletResponse(응답객체)에는 패킷의 header가 담긴다.
-> 클라이언트의 소켓을 알고 있으므로 요청한 클라이언트에게 요청 결과를 응답할 수 있다.

header
클라이언트의 IP와 Port

표2. 패킷의 header

[Form (클라이언트)]

<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" class="btn btn-primary" value="전송">
				<input type="reset" class="btn btn-warning" value="취소">
			</td> 
		</tr>
	</table>
</form>

[Servlet (서버)]

@WebServlet("/calc.do")
public class CalcController extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
											throws ServletException, IOException {
		
		int su1 = Integer.parseInt(request.getParameter("su1")); 
		int su2 = Integer.parseInt(request.getParameter("su2"));
		
		int sum = 0;
		for(int i = su1; i <= su2; i++ ) {
			sum += i;
		}
		PrintWriter out = response.getWriter();
		out.println("total = " + sum);
	}

}
profile
공부하고 이해한 내용들을 직접 그림과 표를 그리면서 정리해보는 공간입니다.🤗

0개의 댓글