Spring MVC

SeoYoung Jung·2022년 4월 24일
0

@ServletComponentScan

스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @ServletComponentScan 을 지원

@WebServlet 서블릿 애노테이션

name: 서블릿 이름
urlPatterns: URL 매핑

HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 다음 메서드를 실행한다.
protected void service(HttpServletRequest request, HttpServletResponse response

HttpServletRequest

서블릿은 개발자가
HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공

-START LINE
HTTP 메소드
URL
쿼리 스트링
스키마, 프로토콜
-헤더
헤더 조회
-바디
form 파라미터 형식 조회
message body 데이터 직접 조회

*HttpServletRequest 객체는 추가로 여러가지 부가기능도 함께 제공한다.

임시 저장소 기능

해당 HTTP 요청이 시작부터 끝날 때 까지 유지되는 임시 저장소 기능
저장: request.setAttribute(name, value)
조회: request.getAttribute(name)

세션 관리 기능

request.getSession(create: true)

HttpServletRequest, HttpServletResponse를 사용할 때 가장 중요한 점은 이 객체들이 HTTP 요청
메시지, HTTP 응답 메시지를 편리하게 사용하도록 도와주는 객체라는 점이다. 따라서 이 기능에 대해서
깊이있는 이해를 하려면 HTTP 스펙이 제공하는 요청, 응답 메시지 자체를 이해해야 한다

HTTP 요청 데이터

1.GET - 쿼리 파라미터
/url?username=hello&age=20
메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달
예) 검색, 필터, 페이징등에서 많이 사용하는 방식

2.POST - HTML Form
content-type: application/x-www-form-urlencoded
메시지 바디에 쿼리 파리미터 형식으로 전달 username=hello&age=20
예) 회원 가입, 상품 주문, HTML Form 사용

3.HTTP message body에 데이터를 직접 담아서 요청
HTTP API에서 주로 사용, JSON, XML, TEXT

4.데이터 형식은 주로 JSON 사용
POST, PUT, PATCH

= 쿼리 파라미터는 URL에 다음과 같이 ? 를 시작으로 보낼 수 있다. 추가 파라미터는 & 로 구분하면 된다

복수 파라미터에서 단일 파라미터 조회

단일 = request.getParameter()
중복 = request.getParameterValues()

참고로 이렇게 중복일 때 request.getParameter() 를 사용하면 request.getParameterValues() 의
첫 번째 값을 반환한다

-request.getParameter() 는 GET URL 쿼리 파라미터 형식도 지원하고, POST HTML Form 형식도 둘 다 지원한다

++GET URL 쿼리 파라미터 형식으로 클라이언트에서 서버로 데이터를 전달할 때는 HTTP 메시지 바디를
사용하지 않기 때문에 content-type이 없다.
POST HTML Form 형식으로 데이터를 전달하면 HTTP 메시지 바디에 해당 데이터를 포함해서 보내기
때문에 바디에 포함된 데이터가 어떤 형식인지 content-type을 꼭 지정해야 한다. 이렇게 폼으로 데이터를
전송하는 형식을 application/x-www-form-urlencoded 라 한다

HTTP 요청 데이터 - API 메시지 바디 - 단순 텍스트

HTTP message body에 데이터를 직접 담아서 요청
HTTP API에서 주로 사용, JSON, XML, TEXT
데이터 형식은 주로 JSON 사용
POST, PUT, PATCH
먼저 가장 단순한 텍스트 메시지를 HTTP 메시지 바디에 담아서 전송하고, 읽어보자.
HTTP 메시지 바디의 데이터를 InputStream을 사용해서 직접 읽을 수 있다.

=inputStream은 byte 코드를 반환한다. byte 코드를 우리가 읽을 수 있는 문자(String)로 보려면 문자표
(Charset)를 지정해주어야 한다. 여기서는 UTF_8 Charset을 지정해주었다

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

content-type: application/json
message body: {"username": "hello", "age": 20}
결과: messageBody = {"username": "hello", "age": 20

*Jackson 라이브러리( ObjectMapper )

HttpServletResponse

HTTP 응답 메시지 생성
HTTP 응답코드 지정
헤더 생성
바디 생성
편의 기능 제공
Content-Type, 쿠키, Redirect

HTTP 응답 데이터 - 단순 텍스트, HTML

1.단순 텍스트 응답
( writer.println("ok"); )

2.HTML 응답
HTTP API - MessageBody JSON 응답
*HTTP 응답으로 HTML을 반환할 때는 content-type을 text/html 로 지정

HTTP 응답 데이터 - API JSON

  1. content-type을 application/json 로 지정해야 한다.
    2.Jackson 라이브러리가 제공하는 objectMapper.writeValueAsString() 를 사용.

서블릿, JSP, MVC 패턴

  1. MemberFormServlet 은 단순하게 회원 정보를 입력할 수 있는 HTML Form을 만들어서 응답한다.
    자바 코드로 HTML을 제공

단점 - 언제하나하나 구현하니...

2.%@ page contentType="text/html;charset=UTF-8" language="java" %> = 나 JSP야

JAVA 코드 사용 가능!!
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
자바의 import 문과 같다.
<% ~~ %>
이 부분에는 자바 코드를 입력할 수 있다.
<%= ~~ %>
이 부분에는 자바 코드를 출력할 수 있다

BUT 구현할것이 너무 많아....

두둥.... MVC 등장,,,,!!!

Model View Controller

  • 변경의 라이프 사이클

1.컨트롤러: HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과
데이터를 조회해서 모델에 담는다.

2.모델: 뷰에 출력할 데이터를 담아둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는
비즈니스 로직이나 데이터 접근을 몰라도 되고,
화면을 렌더링 하는 일에 집중할 수 있다.

3.뷰: 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다. 여기서는 HTML을 생성하는 부분을 말한다

+로 비즈니스 로직은 서비스(Service)라는 계층을 별도로 만들어서 처리합니당

**Model은 HttpServletRequest 객체를 사용한다. request는 내부에 데이터 저장소를 가지고 있는데,
request.setAttribute() , request.getAttribute() 를 사용하면 데이터를 보관하고, 조회합니다.!!!!!!

profile
뚱땅뚱땅개발자

0개의 댓글