Spring/스프링 MVC

서블릿(Servlet)

mint* 2023. 3. 25. 19:12
728x90

스프링 부트 프로젝트 만들기

스프링 부트를 이용하여 무엇을 하진 않을거지만 서블릿 공부할때 편리하기때문에 사용하자.

 

https://start.spring.io/

원래 jar을 사용하는데 JSP 공부를 위해 War을 사용하자.

 

build.gradle -> Open Project

 

localhost:8080 접속하면 오류는 뜨지만 접속은 된다.

프로젝트 설정

  • intellij로 바로 실행되도록 하기

  • 어노테이션 프로세싱 enable하기

postman 설치하기 - API 확인시 좋다.

 

스프링 부트에서 서블릿 환경 구성

서블릿 어노테이션 붙이기

 

ctrl + o : 메소드 선택하기

자물쇠있는 service 선택하기

 

WebServlet 실행 확인

/hello 접속시 서블렛

@WebServlet (name="겹치지않는이름", urlPatterns="겹치지않는 url")

웹에 접속하면 로그가 찍힌다

파라미터 가져오기

username 파라미터 가져오기

http://localhost:8080/hello?username=lol 접속시

로그에 잘 출력된다.

 

만약 username 말고 다른 파라미터를 전송했을경우

=> null값이 입력된다.

http://localhost:8080/hello?name=hey

응답 처리하기 (화면에 띄우기, 응답 보내기)

 

http://localhost:8080/hello?username=mj 접속시에

화면에 body 값이 나온다.

로그

로그도 잘 찍힌다.

HTTP 요청 메세지를 로그로 확인

application.properties에 작성해주면 된다.

 logging.level.org.apache.coyote.http11=debug

 

길게 출력된다.

출력화면

운영 서버에는 적용시키지말고 개발 단계에서만 적용하자!

요청-응답 구조

HTTP 요청시마다 만들어지는 request-response를 서블릿을 통해 간편하게 처리 가능하다.

Welcome Page (domain 첫 화면)

디렉토리에 index.html 파일을 만들면 welcome Page로 띄어준다.

디렉토리
화면이 띄어진다.

 

HttpServletRequest (요청)

서블릿은 HTTP 요청 메세지를 파싱하여 그 결과를 HttpServletRequest 객체에 담아 제공한다.

Http 요청 메세지

POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded

username=kim&age=20

임시 저장소 기능

HTTP 요청이 시작될때부터 끝날때까지 유지되는 임시 저장소 기능

저장: request.setAttribute(name, value)

조회: request.getAttribute(name)

 

세션 관리 기능

request.getSession(create:true)

 

HttpServletRequest 기본 사용법

✅ 헤더 StartLine

http://localhost:8080/request-header?username=hi 접속시에

요청 메세지에 대한 로그가 찍힌다.

✅ 헤더 정보

출력 결과

✅ Header 편리한 조회

결과

컨텐츠를 조회하기 위해서는 POST 방식으로 데이터를 보내야한다. => POSTMAN을 사용하자

POST 방식으로 데이터 보내기

raw - Text로 URL에 POST 요청을 보낸다.

 

컨텐츠 결과에

메세지 정보가 출력되는 것을 알 수 있다.

 

* 헤더에서 어떤 부분만 뽑아서 보고싶을때

request.getHeader("host"); //host 값 꺼내기

 

✅ 기타 정보 조회 (네트워크 정보)

출력 결과

IPv6이 기본으로 나오고, IPv4 정보를 보고싶으면

-Djava.net.preferIPv4Stack=true 옵션을 넣어주면 된다.

 

HTTP 요청 데이터

클라이언트 -> 서버로 데이터 전달

참고

x-www-form-urlencoded : 모든 데이터 인코딩 

<-> multipart/form-data : 인코딩 안함, 파일, 이미지 전달

둘 다 html form 전달시 사용

출처 : https://velog.io/@483759/x-www-form-urlencoded%EC%99%80-applicationjson%EC%9D%98-%EC%B0%A8%EC%9D%B4-HTTP-Content-Type

 

x-www-form-urlencoded와 application/json의 차이 (HTTP Content-Type)

postman에서 http test를 하다보면 body type을 선택할 수 있습니다이는 Header의 Content-Type과 연결된 것으로, 주로 사용하는 x-www-form-urlencoded와 json의 차이를 간단하게 살펴보려 합니다

velog.io

 

HTTP 요청 - GET 쿼리 파라미터

1. 전체 파라미터 조회

request.getParameterNames()

http://localhost:8080/request-param?username=hi&baby=true

결과

2. 단일 파라미터 조회

request.getParameter("파라미터 이름") //값 하나만 반환

결과

3. 이름이 같은 복수 파라미터 조회

request.getParameterValues("파라미터명") //값 여러개 반환, 리스트 타입 반환

http://localhost:8080/request-param?username=hi&age=20&username=bye //username이 2개 값 전달

결과

 

HTTP 요청 - POST 쿼리 파라미터

basic 폴더에 html form 만들기

http://localhost:8080/basic/hello-form.html

파라미터가 /request-param 으로 전달된다

값 작성하기

결과

url 형식으로 전달되는 GET-쿼리 파라미터든 HTML form 형식으로 전달되는 POST 방식이든 getParameter() 를 이용하여 파라미터 값을 꺼낼 수 있다. =>  서버 입장에서는 받는 방식 둘 다 같다.
GET URL 쿼리 파라미터 : HTTP 메세지 바디를 사용하지않고 바로 보냄, content-type 없음
POST HTML Form 형식 : HTTP 메세지 바디에 데이터 포함해서 보냄, content-type: application/x-www-form/urlencoded

html form을 작성하지 않고 보내는 방법 - postman

html-form 결과는 어차피 x-www-form-urlencoded으로 보내지기때문에, postman에서 바로 그 형식으로 데이터를 보내줄 수 있다.

 

결과

HTTP 요청 - API 메세지 바디

http message body에 데이터를 직접 담아서 요청

HTTP API에서 주로 사용 - JSON,XML ..

POST,PUT,PATCH -> html form 형식으로는 post만 가능

PUT,PATCH는 데이터 수정 method이다.
PUT: 전체 값을 보내주지 않으면 나머지 값은 default 값(ex)NULL)이 된다. => 전체 수정
PATCH: 일부 값만 보내면 그 부분만 변경되고 나머지 값들은 이전 값과 같다. => 일부 수정

출처: https://devuna.tistory.com/77

 

[REST API] REST API 규칙/PUT과 POST 차이/PUT과 PATCH 차이

먼저, REST란? Representational State Transfer의 약자이며, 다음과 같이 구성되어 있다. 자원(Resource): URI 행위(Verb): HTTP Method 표현(Representations) 즉 REST는 URI를 통해 자원을 표시하고, HTTP Method를 이용하여

devuna.tistory.com


🌿 단순 텍스트 읽기 (inputStream)

HTTP 메세지 바디에 텍스트 메세지를 전송한 후 읽어보자.

데이터 읽는 코드

전송된 데이터를 inputStream으로 받아 읽을 수 있다.

 

데이터 전송

로그

🌿 API 메세지 - JSON

JSON 파싱 (JSON -> 객체로 변환)

필드를 만들고, setUsername, getAge 등등을 사용할 수 있도록 Lombok의 @Getter, @Setter 추가하기

 

메세지 텍스트 그대로 읽기(inputStream)

raw-json 데이터 보내기

로그

JSON 파싱하여 읽기

jackson 라이브러리 (JSON 변환 라이브러리)의 ObjectMapper 사용하기

ObjectMapper를 이용해 파싱하여 값 얻기

JSON 전송

결과

HTTPServletResponse (응답 데이터)

HTTP 응답 메세지 생성 - HTTP 응답 코드, 헤더 생성, 바디 생성

+ Content-Type, 쿠키, Redirect

 

기본 사용법

응답 보내기

결과

응답으로 보낸 값이 잘 띄워지는 것을 볼 수 있다.

 

🐰 content 편의 메서드

컨텐츠 타입 저렇게 쓰고 길이는 안써도 됨

🐰 cookie 편의 메서드

주석처럼 안쓰고 아랫줄처럼 쓰면 쿠키가 잘 추가된다.

결과값

🐰 redirect 편의 메서드

맨 아랫줄에 있는 한줄 적어도 똑같이 redirect 된다.

결과값

페이지가 리다이렉트되어 hello-form.html 페이지로 이동하였다.

메세지 body 작성하기

1. 텍스트 응답 데이터 보내기

텍스트 : content-type:text/plain

2. HTML 응답 데이터 보내기

html 메세지 작성하기 - contentType:text/html

결과

3. API JSON 응답 데이터 보내기

content-type : application/json

(자동 utf-8형식이므로 따로 charset 지정X)

객체를 json으로 만들어 전송

응답 결과

보낸 json 데이터를 볼 수 있다.

 

728x90