아니... HTML GET, POST 상태일때 변수를 받아와서 어떻게 처리해줘야하는지 서버 모습과 비교해서 알려주는 사람이 없어서 멘붕...
1. GET 메소드도 파라미터를 받을 수 있다!
POST 메서드는 requestBody 를 통해 매개변수를 가져오는 반면 GET 은 QueryString 형태로 가져온다는데 자바 스프링에서는 둘다
@RequestParam 을 쓸 수 있다. 자 그래서 오늘 알려줄것은 !
GET 메서드에서 원하는 자료 검색하는법
1. 주소 파악
일단 설정된 주소에서
나같은 경우는 http:localhost:8080 을 시작 주소로 썼다. -> http:localhost:8080/posts 라는 곳에서 검색을 원한다.
2. 입력시 들어오는 값 파악
일단 그럼 진짜 시작화면은 이건데 저기서 저자 이름을 검색했을때 저자와 관련된 것만 나오게 하고 싶다!
찾기 란에 "페페"라고 검색을 하면 저렇게 GET 메서드의 (html 양식에서 form method=GET 로 할 것 주의! ) 상태에서
? + (내가 설정한 name 의 이름) = + (검색어)
의 조합으로 주소가 뜬다. ( 그냥 내가 설정한게 아니라 알아서 뜬다 ! )
그럼 자바로 가서
@GetMapping("/posts")
public String postsList(
@RequestParam(value = "search", defaultValue = "") String author
) {
String filteredPosts = postService.searchPostsByAuthor(author);
PageGenerator pageGenerator = new PostsPageGenerator(filteredPosts);
return pageGenerator.html();
}
본래 사용하는 주소 "/posts" 를 그대로 써주고 다른 가공을 하지 않고
@RequestParam을 위와 같이 설정한다.
이때 defaultValue= "" 으로 설정하는 것 주의 ! 처음 화면에 들어왔을때 매개변수로 들어온 값이 없기때문에 저걸 처리 안해주면 에러뜨면서 창이 아예 안열린다!! (이걸로 5시간 고생함)
그리고 위 식에서 보이진않지만 디폴트밸류가 아무것도 없을때와 값이 있을때의 조건에 따라 원하는 페이지 를 보여주면 끝!
추가로 알면 좋은 것
GET의 특징
- GET 요청은 캐시가 가능하다.
- : GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.
- GET 요청은 브라우저 히스토리에 남는다.
- GET 요청은 북마크 될 수 있다.
- GET 요청은 길이 제한이 있다.
- : GET 요청의 길이 제한은 표준이 따로 있는건 아니고 브라우저마다 제한이 다르다고 한다.
- GET 요청은 중요한 정보를 다루면 안된다. ( 보안 )
- : GET 요청은 파라미터에 다 노출되어 버리기 때문에 최소한의 보안 의식이라 생각하자.
- GET은 데이터를 요청할때만 사용 된다.
POST 란?
POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용 되는 메서드다. 예를들면 게시판에 게시글을 작성하는 작업 등을 할 때 사용할 된다.
POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보낸다. ( body 의 타입은 Content-Type 헤더에 따라 결정 된다.)
GET에서 URL 의 파라미터로 보냈던 name1=value1&name2=value2 가 body에 담겨 보내진다 생각하면 된다.
POST 로 데이터를 전송할 때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 GET처럼 데이터가 외부적으로 드러나는건 아니라서 보안이 필요한 부분에 많이 사용된다.
( 하지만 데이터를 암호화하지 않으면 body의 데이터도 결국 볼 수 있는건 똑같다. )
POST를 통한 데이터 전송은 보통 HTML form 을 통해 서버로 전송된다.
POST의 특징
- POST 요청은 캐시되지 않는다.
- POST 요청은 브라우저 히스토리에 남지 않는다.
- POST 요청은 북마크 되지 않는다.
- POST 요청은 데이터 길이에 제한이 없다.
GET 과 POST 의 차이점
GET과 POST의 특징만 보아도 차이가 나긴하지만 추가적으로 차이점을 정리해보면 다음과 같다.
- 사용목적 : GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
- DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create 에 가깝다고 보면 된다.
- 요청에 body 유무 : GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다. POST 는 body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
- 멱등성 (idempotent) : GET 요청은 멱등이며, POST는 멱등이 아니다.
출처: https://noahlogs.tistory.com/35 [인생의 로그캣:티스토리]
'개발공부하며 느낀 인생 공부' 카테고리의 다른 글
예쁜 코드란?? [20220812 til] (0) | 2022.08.12 |
---|---|
손을 움직여라 실험을 해라 뭐든 해라[20220811 til, 자바 스프링 부트get method parameter 받아오기] (0) | 2022.08.11 |
하루 3번 회고를 하는 미친펭귄이되자[20220809 TIL] (0) | 2022.08.09 |
왜 다들 코딩을 안하지?[20220808 til] (0) | 2022.08.08 |
일주일만에 변해버렸나...?[메가테라 7주차 주간회고] (0) | 2022.08.07 |
댓글