서블릿

김용빈·2022년 7월 10일
0

코드작성을 통한 서블릿 학습

  • @WebServlet 서블릿 애노테이션
  • name: 서블릿 이름
  • urlPatterns: URL 매핑
    HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 다음 메서드를 실행

    protected void service(HttpServletRequest request, HttpServletResponse response)

@WebServlet 을 통해 스프링부트가 서블릿 컨테이너에 내장톰켓서버로 helloServlet을 미리 생성해논다.
이제 HTTP요청 메세지를 기반으로 request ,response 객체를 생성하고
실행한것을 helloServelet에 넣고 종료될떄 response객체에 담겨져 HTTP응답을 생성한다.

HTTP응답인 Response객체를 통해 !웹 화면에 이렇게 보이게됨


HTTP Request란 ?

HttpServletRequest 역할

HTTP 요청 메시지를 개발자가 직접 파싱해서 사용해도 되지만, 매우 불편할 것이다. 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다. HTTP를 편하게 조회할 수 있게됨.

HTTP 요청 데이터

HTTP요청 메세지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법은
주로 3가지의 방법을 사용한다.

  1. GET: 쿼리파라미터
  • 메세지 바디 없이 URL의 쿼리파라미터에 데이터를 포함해서 전달
  • 예) 검색,필터 페이징등에 많이 사용
  1. POST:HTML form
  • 메세지 바디에 쿼리파리미터 형식으로 전달 ex) username=hello&age=20
    이게 x-www-form-urlencoded 방식
  1. HTTP Message body에 데이터를 직접 담아서 요청
  • HTTP API에 주로 사용 (JSON)
  • POST,PUT,PATCH 등 사용

GET쿼리파라미터 요청데이터의 서버 전송과정

http://localhost:8080/request-param?username=hello&username=kim&age=20 이렇게 요청이 오면

[단일 파라미터 조회]
request.getParameter(username) = hello
request.getParameter(age) = 20

[이름이 같은 복수 파라미터 조회]
request.getParameterValues(username)
username=hello

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

  • 데이터 형식은 주로 JSON
  • HTTP MESSAGE BODY에 데이터를 직접 담아서 요청

JSON형식으로 주고 받기
일반적으로 JSON형식을 데이터를 객체로 바꿀 수 있도록 JSON파싱 추가

objectmapper를 활용

HTTP ServletResponse (응답메세지 생성)

response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
이거로 응답메세지 헤더를 구성한다.

PrintWriter writer = response.getWriter(); :
쓰기를 통해 response 객체를 반환한다는 뜻

writer.println("안녕?");

하면 화면에 안녕이 출력됨

  • HTTP응답으로 HTML 반환할 떄는 Contenttype을 "text/html"로 지정해야함

다른클래스인 HelloData의 이름과 나이를 설정해주고 그 설정값들을
JSON형식으로 바꾸기 위해서는 ObjectMapper 객체를 만들고
그객체를 이용해 writeValueAsString을 통해 JSON형식으로 바꾸어주며 출력해줌

profile
안녕하세요!

0개의 댓글