WAS를 실행하면 HttpServletRequest와 HttpservletResponse를 구현해준다.

request를 통해 요청하고 response를 통해 응답할 수 있다.

HttpServletRequest 역할

서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다.

HTTP 요청 데이터

주로 다음 3가지 방법을 사용한다.

1. GET - 쿼리 파라미터

/url?username=hello&age=20 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달 예) 검색, 필터, 페이징등에서 많이 사용하는 방식

2. POST - HTML Form

content-type: application/x-www-form-urlencoded 메시지 바디에 쿼리 파리미터 형식으로 전달 username=hello&age=20 예) 회원 가입, 상품 주문, HTML Form 사용

request.getParameter() 는 GET URL 쿼리 파라미터 형식도 지원하고, POST HTML Form 형식도 둘 다 지원한다.

3. HTTP message body에 데이터를 직접 담아서 요청

HTTP API에서 주로 사용, JSON, XML, TEXT 데이터 형식은 주로 JSON 사용 POST, PUT, PATCH

JSON 형식 전송
content-type: application/json
message body: {“username”: “hello”, “age”: 20}
결과: messageBody = {“username”: “hello”, “age”: 20}

스프링 부트로 Spring MVC를 선택하면 기본으로 Jackson 라이브러리( ObjectMapper )를 함께 제공한다. ObjectMapper를 통해 전송된 JSON 데이터를 불러올 수 있다.

private ObjectMapper objectMapper = new ObjectMapper();
~생략~
MemberData memberData = obejectMapper.readValue(messageBody, MemberData.class);
System.out.println("memberData.username = " + memberData.getUsername());
System.out.println("memberData.age = " + memberData.getAge());

HTTP 응답 메시지 생성

쿠키 편의 메서드

private void cookie(HttpServletResponse response) {
   //Set-Cookie: myCookie=good; Max-Age=600;
   //response.setHeader("Set-Cookie", "myCookie=good; Max-Age=600");
   Cookie cookie = new Cookie("myCookie", "good");
   cookie.setMaxAge(600); //600초
   response.addCookie(cookie);
}

redirect 편의 메서드

private void redirect(HttpServletResponse response) throws IOException {
   //Status Code 302
   //Location: /basic/hello-form.html
   //response.setStatus(HttpServletResponse.SC_FOUND); //302
   //response.setHeader("Location", "/basic/hello-form.html");
   response.sendRedirect("/basic/hello-form.html");
}