ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서블릿 HTTP 요청 데이터
    스프링/스프링 MVC 패턴 2023. 2. 10. 13:12

    HTTP에 원하는 값을 요청해서 웹 사이트에 데이터를 보내는 방법이 있다.

     

    1. GET 쿼리 파라미터

    @WebServlet(name = "requestParamServlet", urlPatterns = "/request-param")
    public class RequestParamServlet extends HttpServlet {
    
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("[전체 파라미터 조회] - start");
    
            request.getParameterNames().asIterator()
                    .forEachRemaining(paramName -> System.out.println(paramName + "=" + request.getParameter(paramName)));
            // paramName은 username과 age이고, request.getParameter(paramName)은 hello와 20
            System.out.println("[전체 파라미터 조회] - end");
            System.out.println();
    
            System.out.println("[단일 파라미터 조회]");
            String username = request.getParameter("username");
            String age = request.getParameter("age");
    
            System.out.println("username = " + username);
            System.out.println("age = " + age);
    
            System.out.println("[이름이 같은 복수 파라미터 조회]");
            String[] usernames = request.getParameterValues("username");  //  중복조회는 Values를 붙이면 된다.
            for (String name : usernames) {
                System.out.println("username = " + name);
            }
        }
    }

    쿼리 파라미터에 직접 원하는 값을 설정해서 요청하는 것이다.

    개발자가 따로 값을 지정하지않고, 정해진 url, http:localhost:8080/request-param?username=hello&age=20 이라고 입력하면 username이라는 key값에 hello라는 value가 저장되고, age라는 key값에 20이라는 value가 저장된다.

     

     

    2. 단순 텍스트를 이요한 API 메시지 바디

    @WebServlet(name = "requestBodyStringServlet", urlPatterns = "/request-body-string")
    public class RequestBodyStringServlet extends HttpServlet {
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ServletInputStream inputStream = request.getInputStream(); // 데이터를 읽어서 postman에서 보내는걸 여기 출력창에 출력
            String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
    
            System.out.println("messageBody = " + messageBody);
    
            response.getWriter().write("ok");
        }
    }

    ServletInputStream을 통해 용청하는 데이터를 읽어서 inputStream에 저장한다.

     

    StreamUtils.copyToString으로 inputStream을 StandardCharsets.UTF_8로 고정시킨다.

    이렇게 하면 messageBody 요청을 보냈을 때 값을 서버에 계속 저장하게 된다.

     

     

    3. json 방식의 API 메시지 바디 요청

    @WebServlet(name = "requestBodyJsonServlet", urlPatterns = "/request-body-json")
    public class RequestBodyJsonServlet extends HttpServlet {
    
        private ObjectMapper objectMapper = new ObjectMapper();
    
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ServletInputStream inputStream = request.getInputStream();
            String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
    
            System.out.println("messageBody = " + messageBody);
    
            HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
    
            System.out.println("helloData.username() = " + helloData.getUsername());
            System.out.println("helloData.age() = " + helloData.getAge());
    
            response.getWriter().write("ok");
        }
    }
    

    위의 코드는 json 방식으로 API 메시지를 오청하는 것이다. json 방식이라 함은 {"username": "hello", "age": 20}이라는 표기명으로 적는 것이 json 방식이다.

    위의 코드에서 intellij 결과창에는 messageBody가 {"username": "hello", "age": 20}로 뜨고, username은 hello, age는 20으로 결과값이 나온다.

     

    '스프링 > 스프링 MVC 패턴' 카테고리의 다른 글

    서블릿을 이용한 회원가입 만들기  (0) 2023.02.10
    서블릿 HTTP 응답 데이터  (0) 2023.02.10
    HTML, HTTP API, CSR, SSR  (0) 2023.02.07
    동시 요청 - 멀티 쓰레드 (쓰레드 풀)  (0) 2023.02.07
    서블릿  (0) 2023.02.07
Designed by Tistory.