※이 내용은 강의 내용을 정리하고자 하는 내용이라 기본 정의나 사용법은 써놓지 않았다.
만약 서블릿에 대해 알고 싶다면 여기 를 참고하자!
![](https://blog.kakaocdn.net/dn/pCDoU/btr0VJp5odo/ba3jWSKo94fy8BrZvvQUlk/img.png)
서블릿 등록
-class 하나를 생성하고 HttpServlet 이라는 인터페이스를 상속받고 service 라는 메소드를 Override한다.
-그리고 class 위에 @WebServlet(name= , urlPatterns=) 을 추가하고 각 변수에 원하는 값을 넣는다.
>>service 메소드는 http 요청을 통해 urlPatterns에 있는 매핑된 url이 호출되면 자동으로 실행이 된다.
-그리고 service 메소드에 HttpServletRequest , HttpServletResponse 각 객체들이 파라미터로 들어오는데 이걸로 우리가 http 응답 메시지를 설정 할 수 있다.
>> response.setContentType : 타입 설정 or response.setCharacterEncoding : 인코딩 방식 설정 or response.getWirter().write() : 메시지 작성
* resources/application.properties 파일에 loggin.level.org.apache.coyote.http11=debug 라는 설정을 추가하면 http 요청 메시지를 로그로 확인 가능*
위에서 한 방식을 정리하면 스프링 부트로 생성하면 내장되어 있는 톰캣 서버가 있는데 이 톰캣 서버가 서블릿 객체를 생성해준다. http 요청 메시지가 들어오면 이를 기반으로 HttpServletRequest , HttpServletResponse 각 객체가 생성되고 이 객체로 http 응답을 생성할 수 있게 된다.
HttpServletRequest 역할 : HTTP 요청 메시지를 개발자가 직접 파싱해서 사용해도 되지만 이는 매우 불편하기 때문에 이 파싱을 대신해준다. 그 결과를 객체에 담아서 제공한다.
-로그인 상태 같은 것들을 유지해주는 기능인데 이런 세션 관리 기능도 제공한다.
-임시 저장소 기능도 한다.
-request.getMethod() request.getProtocol() , request.getRequestURI() request.getCookies() 등등으로 HTTP의 정보들을 알 수 있다!
HTTP 요청 데이터
1. GET - 쿼리파라미터
-쿼리 파라미터는 ?로 시작하고 추가 파라미터는 &로 구분한다.
>>전체 파라미터 조회 하는 방법
>>단일 파라미터 조회 하는 방법 : request.getParameter("파라미터이름")
-username=spring1&username=spring2 이렇게 이름이 같은 파라미터를 조회 할 때는 : request.getParameterValues("username") 이렇게 가져와야한다.
2. POST - HTML Form -> 메시디 바디에 쿼리 파라미터 형식으로 전달
-(content-type : application/x-www-form-urlencoded (메시지 바디 타입을 알려줌) message body : 쿼리 파라미터) 의 형식으로 http 메시지를 만든다.
-서버 입장에서는 GET , POST 둘 다 어차피 같은 쿼리 파라미터이기 때문에 get에서 파라미터 조회 하는 방법과 동일하다.
*HTML Form 형식으로 데이터를 보낼때는 content-type이 꼭 있어야 한다. Message body 에 있는 데이터가 어떤 형식인지 알려줘야 하기 때문이다. 하지만 url 쿼리 파라미터(get방식)로 보내면 메시지 바디를 사용하지 않기 때문에 content-type이 없다*
*postman을 사용해서 HTML Form을 만들지 않고 HTML Form에 쿼리 파라미터를 날릴 수 있다*
3. HTTP message body에 데이터를 직접 담아서 요청 -> HTTP API에서 주로 사용, JSON , XML , TEXT
-데이터 읽는 방법
<text>
-inputStream = request.getInputStream() -> 메시지 바디 내용을 바이트 코드로 얻을 수 있다.
-mb = StreamUtils.copyToString(inputStream,StandardCharsets.UTF_8) -> 위에서 얻은 바이트 코드를 문자로 바꿔준다(UTF-8형식으로)
>>postman 으로 raw (text) 형식으로 메시지를 보내면 인텔리j에서 출력을 확인 할 수 있었다.
<json>
-inputStream = request.getInputStream()
-mb = StreamUtils.copyToString(inputStream,StandardCharsets.UTF_8)
위에 text 읽기 부분과 동일하게 읽어올 수 있다. 이렇게 읽어 오면 json 형태 그대로 가져온다 {key : value ...}
*json도 어차피 문자이기 때문*
json은 보통 객체로 바꿔서 사용하기 때문에 파싱 할 수 있게 객체를 하나 생성해줘야 한다
(클래스 생성 : HelloData(필드 : username,age))
-ObjectMapper objectMapper = new ObjectMapper() -> Jackson 라이브러리에 있는 것인데 jackson이 json 라이브러리 이다.
-helloData = objectMapper.readValue(messageBody,HelloData.class) 를 하면 helloData 라는 객체로 age, username 을 가져올 수 있다.
>>postman 으로 raw(json) 형식으로 메시지를 보내면 인텔리제이에서 출력을 확인 할 수 있었다.
HttpServletResponse 역할 : HTTP 응답 메시지 생성 (HTTP 응답 코드 지정, 헤더 생성 , 바디 생성)
>>개발자들이 직접 HTTP 응답 메시지를 만들기에는 어렵기 때문에 메서드에 필요한 값들을 넣으면 HTTP 응답 메시지를 생성해준다.
[status-line] -> response.setStatus(SC_OK...) 상태 코드 설정
[response-headers]
response.setHeader(response.setHeader("Content-Type","text/plain") or response.setContentType("text/plain") .setCharacterEncoding("utf-8")
response.setHeader("Cache-Control","no-cache,no-store,must-revalidate"); //캐시 무효화
response.setHeader("my-header","hello"); header부분 이런식으로 추가 가능
[message-body] -> PrintWriter writer = response.getWriter(); writer.println(); message-body 추가 가능
-cookie 편의 메서드 : Cookie cookie = new Cookie("my cookie","good"); cookie.setMaxAge() response.addCookie(cookie)
>>이런식으로 쿠키를 만들 수 있음
-redirect 편의 메서드 : response.sendRedirect("/path") 이렇게 하면 redirect이 일어난다.
HTTP 응답 데이터
1. 단순 텍스트 응답 : 위에서 writer.println("ok") 이런 형식으로 하면 된다.
2. HTML 응답
-Content-Type 과 CharacterEncoding을 지정해줘야 한다. .setContentType("text/html") .setCharacterEncoding("utf-8")
-writer.println("<html>) ... writer.println("</html>");
>>이런식으로 자바 코드로 html을 작성하면 HTML 응답이 가능하다.
3.HTTP API - JSON
-json 형식으로 보내기 때문에 .setContentType("application/json") 으로 지정하고 .setCharacterEncoding("utf-8") 도 추가해서 한국어가 꺠지지 않도록 한다.
-위에서 봤던 Jackson 라이브러리를 사용하면 된다.
-HelloData 의 .setName , .setAge 를 해줘서 이름과 나이를 가지고 있는 객체를 만든다.
-여기 있는 객체를 json 형태로 만들어야 한다 {"key" : value , ... }
>>result = objectMapper.writeValueAsString(객체)
*json도 문자이기 때문에 위에 있는 코드 처럼 하면 json 형태로 변한다*
-reponse.getWriter().wirte(result) 하면 화면에 json 형태의 데이터가 보인다!
'Spring' 카테고리의 다른 글
Spring MVC 4 - MVC 프레임워크 만들기 (0) | 2023.02.27 |
---|---|
Spring MVC 3 - MVC 활용 (1) | 2023.02.27 |
Spring MVC 1 - 웹 서버와 웹 애플리케이션 서버(WAS) (0) | 2023.02.27 |
@RequestMapping 애너테이션 (0) | 2023.02.23 |
Java의 직렬화(Serialize)와 역직렬화(Deserialize) (0) | 2023.02.23 |