강의 내용이 있기 때문에 출처를 밝힙니다 !
출처 : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (인프런 강의)
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1
1. 클래스 생성
@WebServlet 어노테이션을 활용해 클래스를 서블릿 컨테이너에서 관리하도록 설정한다.
그리고 name, urlPatterns 을 정의한다.
해당 클래스는 HttpServelt 클래스를 상속받도록 하고, protected void service() 메서드를 구현한다.
@WebServlet(name = "requestParamServlet", urlPatterns = "/request-param")
public class RequestParam extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
... 내부 구현은 여기서 시작...
}
}
2. service(HttpServletRequest request, HttpServletResponse response) 내부에서 연습
클래스를 서블릿에 등록했으니, service() 메서드 내부에시 파라미터를 조회할 수 있다 ~
GET 방식은 메시지 바디 없이 URL의 쿼리 파라미터에 데이터를 포함해서 전달한다.
첫 번째는 단일 파라미터 조회
HttpServletRequest 클래스는 getParameter() 메서드를 지원해주는데, 이 메서드로 간단하게 쿼리 스트링을 가져올 수 있다.
System.out.println("[단일 파라미터 조회 시작]");
String username = request.getParameter("username");
String age = request.getParameter("age");
System.out.println("[단일 파라미터 조회 끝]");
포스트맨을 사용해서 서버에 요청을 보내보자.
(요청 URL 에 쿼리 스트링을 적으면 Params 가 알아서 채워진다 👍 반대의 경우에도 자동으로 채워짐 !)
서버 출력 결과
클라이언트에서 보낸 요청의 쿼리 파라미터를 잘 받아온 것을 확인할 수 있다.
두 번째는 복수 파라미터 조회
여기서 복수란, Key 값은 동일하나 Value 값이 다른 파라미터를 말한다.
이떄는 getParameterValues() 메서드를 사용해서 String[] 배열로 받아주면 된다.
System.out.println("[Key 값이 같은 파라미터 조회 시작]");
String[] usernames = request.getParameterValues("username");
for(String username : usernames) {
System.out.println("name = + name);
}
System.out.println("[Key 값이 같은 파라미터 조회 끝]");
역시 포스트맨을 사용해서 요청을 보내보자.
복수 파라미터이기 때문에 동일한 Key 값을 가진 파라미터를 두 개 설정한 뒤 Send
서버 출력 결과
같은 Key 를 가졌지만 잘 가져왔다.
마지막으로 전체 파라미터 조회
조금 특이한데, 람다식을 사용해서 출력할 수 있다.
(Enumeration params = request.getParameterNames() 을 사용해 while 로 출력할 수도 있는데 최신 방식은 아닌 듯 하다)
여기서 paramName 은 username, age 와 같은 Key 값을 의미한다.
이후 파라미터 조회를 위해 request.getParameter() 메서드 인자로 찾아낸 paramName 을 넣어주면 끝.
System.out.println("[전체 파라미터 조회 시작]");
request.getParameterNames().asIterator()
.forEachRemaining(paramName -> System.out.println(paramName + "=" +
request.getParameter(paramName)));
System.out.println("[전체 파라미터 조회 끝]");
포스트맨을 통해 요청
서버 출력 결과
3. 궁금증
전체 파라미터 조회에서 같은 Key 값을 가진 파라미터를 요청하면 어떻게 될까 ?
http://localhost:8080/request-param?username=jun&username=tany 이렇게 요청을 보내본다면 ?
맨 앞의 username 파라미터만 서버에서 출력되는 것을 확인할 수 있다.
음... 왜인지는 잘 모르겠다 😵💫 일단 Key 값이 동일한 파라미터는 맨 앞의 파라미터만 받는다는 사실만 기억해두자 ..
'Servlet' 카테고리의 다른 글
FrontController 를 통한 MVC 패턴 구조 개선 [2] (0) | 2022.04.03 |
---|---|
FrontController 를 통한 MVC 패턴 구조 개선 [1] (0) | 2022.04.03 |
Servlet 에 MVC 패턴 도입하기 (0) | 2022.04.03 |
[POST] 클라이언트 요청 Body 를 서버로 전달하기 (0) | 2022.03.30 |