✏️ HttpServlet 요청과 응답

박상민·2023년 7월 21일
0

SpringMVC

목록 보기
1/11
post-thumbnail

⭐️Servlet?

Servlet은 동적인 웹페이지를 만들 때 사용되는 자바 기반 프로그래밍 기술이다. Servlet은 복잡한 웹 요청과 응답 과정을 간단한 메서드 호출로 다룰 수 있게 해준다.

public class ResponseJsonServlet extends HttpServlet {
    ObjectMapper objectMapper = new ObjectMapper();

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException {...}

📌 Servlet 동작 방식


클라이언트가 웹 서버에 HTTP 요청 메세지를 보내면 서버가 request, response 객체를 생성하고 서블릿 컨테이너에 있는 Servlet을 호출하면서 객체를 넘겨준다. Servlet이 작업을 한 뒤 종료되면서 HTTP 응답 메세지를 반환한다.

HTTP 응답에서 Content-Length 등의 부가 정보는 서버가 자동으로 생성한다.

📌 HttpServletRequest

HttpServletRequest 역할: 개발자가 HTTP 요청 메세지를 편리하게 사용할 수 있도록 HTTP 요청 메세지를 파싱한다. 그 결과를 HttpServletRequest 객체에 담아서 제공한다.

HttpServlet 객체는 HTTP 요청 메세지만 읽는 것이 아니라 임시 저장소 등의 부가 기능도 제공한다.

/** 저장: HTTP 요청 메세지 안에 작은 데이터 저장소가 존재한다. 
HTTP 요청 메세지가 살아있는 동안 사용할 수 있게 데이터를 넣어준다. **/
request.setAttribute(name, value)
/** 조회: HTTP 속 데이터 저장소에서 데이터를 꺼낸다. **/
request.getAttribute(name)

✔︎ HTTP 요청 데이터 - GET Query Parameter

  • url?name=psm&age=23
  • 메세지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달
  • 검색, 필터, 페이징 등에서 많이 사용하는 방식

Query Parameter는 URL에 ?를 시작으로 보낼 수 있다. 추가 Parameter는 &로 구분하면 된다.
EX) http://localhost:8080?username=park&age=20

request.getParameter("username"); //단일 파라미터 조회 
request.getParameterNames(); //파라미터 이름들 모두 조회
request.getParameterMap(); //파라미터를 Map 으로 조회
request.getParameterValues("username"); //이름이 같은 복수 파라미터 조회

url?username=kim&username=park <- 이처럼 Paramerter의 이름은 하나인데 값이 중복일 때 request.getParameter("username")를 하면 첫 번째 값을 반환한다.

✔︎ HTTP 요청 데이터 - POST HTML Form

  • content-type: application/x-www-form-urlencoded
  • 메세지 바디에 Query Parameter 형식으로 데이터를 전달한다.

application/x-www-form-urlencoded 형식은 이전에 작성한 GET에서 본 Query Parameter 형식과 같다.

클라이언트 입장에서는 두 방식에 차이가 존재하지만, 서버 입장에서는 동일한 형식으로 인식하므로 request.getParameter()로 구분없이 조회 가능하다.

✔︎ HTTP 요청 데이터 - API 메세지 바디

  • HTTP message body에 데이터를 직접 담아서 요청
  • HTTP API에서 주로 사용한다. (JSON, XML, TEXT)
  • 데이터 형식은 주로 JSON을 사용한다.

김영한님의 스프링 MVC 강의
김영한님의 인프런 로드맵을 따라가면서 스프링을 공부하고 있습니다.
공부한 내용들을 velog에 정리합니다!

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글