Enthusiasm! Enthusiasm!

서블릿이 제공하는 HTTP 요청과 응답 처리 본문

자바 스프링/스프링MVC

서블릿이 제공하는 HTTP 요청과 응답 처리

열동 2023. 4. 5. 00:02

HttpServletRequest

서블릿은 개발자가 HTTP요청 메시지를 편리하게 사용할 수 있도록, 메시지를 파싱하고 그 결과를 HttpServletRequest 객체에 담아서 제공한다. HttpServletRequest는 start-line 정보, 헤더 정보, 기타 정보 등의 정보를 기본으로 제공한다. 또한 HTTP 요청 데이터를 조회하는 기능도 제공한다. HttpServletRequest가 어떻게 요청 데이터를 조회하는지 알아보자.


HTTP 요청 데이터 

HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달할때는 주로 다음과 같은 3가지 방법을 사용한다.

 

GET - 쿼리 파라미터 사용

  • /url?username=hello&age=20
  • 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달
  • 예) 검색, 필터, 페이징등에서 많이 사용하는 방식
  •  조회 메서드
String username = request.getParameter("username"); //단일 파라미터 조회 
Enumeration<String> parameterNames = request.getParameterNames(); //파라미터 이름들 모두 조회
Map<String, String[]> parameterMap = request.getParameterMap(); //파라미터를 Map 으로 조회
String[] usernames = request.getParameterValues("username"); //복수 파라미터 조회

POST - HTML Form

  • content-type: application/x-www-form-urlencoded -> 형식이 쿼리 파라미터 형식과 같기 때문에 쿼리 파라미터 조회 메서드를 그대로 사용하면 된다. 클라이언트에서는 두 방식에 차이가 있지만, 서버 입장에서는 둘의 형식이 동일하므로 그대로 조회 메서드를 사용하면 된다.
  • 메시지 바디에 쿼리 파리미터 형식으로 전달 username=hello&age=20
  • 예) 회원 가입, 상품 주문, HTML Form 사용
  • 조회 메서드 -> 쿼리 파라미터 조회와 동일!

API 메시지 바디 - JSON

  • 데이터 형식이 JSON이며, HTTP API에서 주로 사용되는 형식이다. 
  • content-type: application/json ->  {"username" : "Lee", "age" : 20}과 같은 JSON 형식을 message body에 담아 전송할때 사용.
  • 예) API 통신
  • 조회 메서드
public class RequestBodyJsonServlet extends HttpServlet {

private ObjectMapper objectMapper = new ObjectMapper();

ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream,StandardCharsets.UTF_8);

 // HelloData는 Json파싱을 위해 만든 클래스
HelloData helloData = objectMapper.readValue(messageBody,HelloData.class);
//helloData.getUserName() , helloData.getAge()
...
}
 

JSON 결과를 파싱해서 사용할 수 있는 자바 객체로 변환하려면 Jackson, Gson 같은 JSON 변환 라이브러리를 추가해서 사용해야 한다스프링 부트로 Spring MVC를 선택하면 기본으로 Jackson 라이브러리ObjectMapper )를 함께 제공한다.


HttpServletResponse

마찬가지로 서블릿은 Content-Type, 쿠키, Redirect 등과 같은 HTTP응답을 위한 객체를 제공한다. HttpServletResponse가 어떤 방식으로 응답을 전달하는지 알아보자.

 

HTTP 응답 데이터  - 기본 

응답 데이터에도 마찬가지로 다양한 내용들을 담을 수 있다. 메서드를 통해 알아보자.

    private void method(HttpServletResponse response){
    	//쿠키
    	Cookie cookie = new Cookie("myCookie", "good"); 
        cookie.setMaxAge(600); //600초
        response.addCookie(cookie);
        
        //redirect
        response.sendRedirect("/basic/hello-form.html");
		
        //단순 텍스트
        PrintWriter writer = response.getWriter();
        writer.println("ok");
        
        //HTML
        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        PrintWriter writer = response.getWriter(); 
        writer.println("<html>"); 
        writer.println("<body>");
        ...
    }

}

HTTP 응답 데이터 - API JSON

private ObjectMapper objectMapper = new ObjectMapper();

private void method(HttpServletResponse response){

    response.setHeader("content-type", "application/json");
    response.setCharacterEncoding("utf-8");
    
    HelloData data = new HelloData();
    data.setUsername("kim");
    data.setAge(20);
    String result = objectMapper.writeValueAsString(data);
    
    response.getWriter().write(result);
}

이와 같은 방식으로 원하는 응답 내용을 담으며 사용하면 된다!


이 포스팅은 Inflearn 김영한님의 스프링 강의 및 강의자료를 참고하여 작성하였습니다.

'자바 스프링 > 스프링MVC' 카테고리의 다른 글

스프링 MVC 구조 이해 - 실제 코드 뜯어보기  (3) 2023.11.09
웹 애플리케이션의 이해  (0) 2023.04.02
스프링 파일 업로드  (0) 2023.03.16
스프링 타입 컨버터  (0) 2023.03.15
스프링 예외처리  (0) 2023.03.15
Comments