Rootable의 개발일기
서블릿(Servlet) 활용 본문
WAS는 클라이언트의 요청 데이터를 서블릿에게 주면서 적절한 응답 데이터를 내려주는 임무를 맡긴다.
💡 HttpServletRequest와 HttpServletResponse의 주목적은?
HttpServletRequest는 요청을 읽는 것이 목적이고, HttpServletResponse는 응답을 어떻게 생성할지가 목적이다.
📌 HttpServletRequest
WAS가 서블릿이 활용할 수 있도록 전달하는 객체로, HTTP 요청 메시지를 파싱 한 결과를 담은 객체
이 객체는 주로 HTTP 요청 데이터를 단순히 읽거나 개발자가 만든 객체에 파싱 하는 데 사용된다.
🔎 기본 메서드
✔ Start Line 요청 정보
✔ 모든 헤더 조회
✔ 헤더 편의 조회 기능
📌 HTTP 요청 데이터 다루기
🔎 GET 쿼리 파라미터
URL의 쿼리 파라미터에 데이터를 포함해서 전달하는 방식으로 메시지 바디부가 없다.
✔ 전체 파라미터 조회
✔ 단일 파라미터 조회
✔ 이름이 같은 복수 파라미터 조회
쿼리 파라미터에 username이 2개 있는 상황
🔎 POST HTML Form
메시지 바디에 쿼리 파라미터 형식(username=kim&age=20)으로 데이터를 전달하는 방식으로, 주로 HTML Form 태그에 입력한 값을 전달하는 식이다.
✔ Postman 테스트
GET 쿼리 파라미터와 service 메서드 코드 동일
파라미터 조회는 GET 쿼리 파라미터 형식과 동일하게 request.getParameter()로 편리하게 조회할 수 있다.
💡 Content-type
HTTP 메시지 바디의 데이터 형식을 지정한다.
GET URL 쿼리 파라미터 형식
메시지 바디를 사용하지 않으므로 Content-type이 없다.
POST HTML Form 형식
HTTP 메시지 바디에 해당 데이터를 포함해서 보내기 때문에 Content-type을 꼭 지정해야 한다. 이렇게 Form으로 데이터를 전송하는 형식을
application/x-www-form-urlencoded이라 한다.
💡 GET 요청에 content-type을 application/x-www-form-urlencoded로 하면 어떻게 될까
400 Error 발생
tomcat의 Request class에 있는 parseParameters()라는 메서드에서 넘어온 데이터를 parsing 하는데,
이때 http method가 post인지 확인하고 post가 아니라면 message-body의 데이터를 파싱 할 수 없게 되어 있다.
Reference:
https://jungguji.github.io/2021/11/21/content-type-application-x-www-form-urlencoded%EB%8A%94-POST%EB%B0%A9%EC%8B%9D%EC%9C%BC%EB%A1%9C%EB%A7%8C/
🔎 API - 단순 텍스트
HTTP API에서 주로 사용하며, HTTP 메시지 바디에 text 데이터를 직접 전송할 수 있다.
✔ Postman 테스트
🔎 API - JSON
HTTP API에서 주로 사용하며, HTTP 메시지 바디에 JSON 데이터를 직접 전송할 수 있다.
✔ Postman 테스트
💡 ObjectMapper
JSON 결과를 파싱 해서 사용할 수 있는 자바 객체로 변환하려면 Jackson, Gson 같은 JSON 변환 라이브러리를 추가해서 사용해야 한다.
SpringMVC를 사용하면 기본으로 Jackson 라이브러리인 ObjectMapper를 함께 제공한다.
1) ObjectMapper.readValue()
JSON -> Java Object (직렬화, Serialization)
데이터 흐름: 외부 -> 내부
2) ObjectMapper.writeValue()
Java Object -> JSON (역직렬화, Deserialization)
데이터 흐름: 내부 -> 외부
Reference:
https://velog.io/@zooneon/Java-ObjectMapper%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-JSON-%ED%8C%8C%EC%8B%B1%ED%95%98%EA%B8%B0#java-object-%E2%86%92-json
📌 HttpServletResponse
WAS가 서블릿이 활용할 수 있도록 전달하는 객체로, HTTP 응답 메시지에 접근하는 인터페이스를 제공하는 객체
🔎 기본 메서드
✔ setHeader 사용
✔ 상태 코드
✔ 쿠키 관련 편의 메서드
✔ Contents 관련 편의 메서드
✔ Redirect 관련 편의 메서드
📌 HTTP 응답 데이터 다루기
🔎 단순 텍스트
🔎 HTML
🔎 API - JSON
파싱용 HelloData의 세팅된 값을 JSON 형태로 브라우저로 내림(Java Object -> JSON)
Reference:
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
'Spring' 카테고리의 다른 글
HTTP 요청 매핑 (0) | 2023.07.15 |
---|---|
@RequestParam vs @ModelAttribute vs @RequestBody (0) | 2023.07.14 |
서블릿(Servlet) 기본 (1) | 2023.07.11 |
웹 서버와 웹 애플리케이션 서버(WAS) (0) | 2023.07.11 |
빈 스코프 (0) | 2023.05.26 |