스프링 부트는 톰캣 서버를 내장하여 톰컷 서버 설치 없이 편리하게 서블릿 코드 실행이 가능하다 !
@ServeltComponentScan
: 해당 애노테이션을 통해 서블릿을 직접 등록하여 사용할 수 있도록 지원
@WebServlet(name="xxx", urlPatterns="xxx")
protected void service(HttpServletRequest request, HttpServletResponse response)
❗
@WebServlet
의name
,urlPatterns
중복 허용 X
서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 HTTP 요청 메시지를 파싱하고, 해당 결과를 HttpServletRequest
객체에 담아서 제공한다.
http://localhost:8080/request-header?username=hello
호출될 때, HTTP 요청 메세지정보 조회
// start line 정보
request.getMethod() = GET
request.getProtocol() = HTTP/1.1
request.getScheme() = http
request.getRequestURL() = http://localhost:8080/request-header
request.getRequestURI() = /request-header
request.getQueryString() = username=hello
request.isSecure()) = false
// Header 정보
[Host 조회]
request.getServerName() = localhost
request.getServerPort() = 8080
[Accept-Language 조회]
request.getLocale() = ko
[Cookie 조회]
request.getCookies() = (cookie 사용 X)
[Content 조회]
request.getContentType() = null
request.getContentLength() = -1
request.getCharacterEncoding()) = UTF-8
클라이언트에서 서버로 데이터를 전달하는 방법은 주로 3가지 방법을 사용한다.
GET : 쿼리 파라미터
- 메시지 바디 없이 URL의 쿼리 파라미터에 데이터를 포함해서 전달
- 예) 검색, 필터, 페이징등에서 많이 사용하는 방식
POST : HTML Form
- content-type: application/x-www-form-urlencoded
- 메시지 바디에 쿼리 파리미터 형식으로 전달
HTTP message body에 데이터를 직접 담아서 요청
- HTTP API에서 주로 사용, JSON, XML, TEXT
- 데이터 형식은 주로 JSON 사용
HttpServletRequest
가 제공하는 service
메소드를 통해 쿼리 파라미터 조회
쿼리 파라미터 조회 메서드
request.getParameter("username") //단일 파라미터 조회
request.getParameterNames() //파라미터 이름들 모두 조회
request.getParameterMap() //파라미터를 Map으로 조회
getParameterValues("username") //복수 파라미터 조회
❗ 파라미터 값이 하나일 때, 값이 중복일 경우 ➜
getParameterValues()
사용
메시지 바디에 위와 같은 쿼리 파리미터 형식으로 데이터를 전달한다.
즉, GET 쿼리 파라미터와 같은 방식으로 조회가 가능하다 !
GET URL 쿼리 파라미터 형식은
content-Type
= X
POST HTML Form 형식은content-Type
=application/x-www-form-urlencoded
Spring MVC
를 선택하면 기본으로 Jackson
라이브러리 ObjectMapper
를 제공JSON 형식 전송
[주요 코드]
ServletInputStream inputStream = request.getInputStream();
String messageBody= StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
// JSON 결과를 파싱해서 사용할 수 있는 자바 객체로 변환
HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
HTTP 응답 메시지 생성
편의 기능 제공
Content-Type, 쿠키, Redirect
http://localhost:8080/response-header
호출될 때, HTTP 응답 메시지 생성
[status-line]
response.setStatus(HttpServletResponse.SC_OK);
//컨텐트 타입 지정
response.setHeader("Content-Type", "text/plain;charset=utf-8");
//캐시 무효화 설정
response.setHeader("Cache-Control", "no-cache, no-store, mustrevalidate");
response.setHeader("Pragma", "no-cache");
[Header 편의 메서드]
1. Content 메서드
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
2. 쿠키 메서드
Cookie cookie = new Cookie("myCookie", "good");
cookie.setMaxAge(600); //600초
response.addCookie(cookie);
3. redirect 메서드
response.sendRedirect("/basic/hello-form.html");
HTTP 응답 메시지는 주로 다음 내용을 담아서 전달한다.
단순 텍스트 응답
ex) writer.println("ok");
HTML 응답
HTTP API - MessageBody JSON 응답
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
res.setCharacterEncoding("utf-8");
PrintWriter writer = res.getWriter();
writer.println("<html>");
writer.println("<body>");
writer.println("<div>안녕?</div>");
writer.println("</body>");
writer.println("</html>");
}
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
HelloData helloData=new HelloData();
helloData.setUsername("kim");
helloData.setAge(20);
// json 형식으로 변환
String result=objectMapper.writeValueAsString(helloData);
response.getWriter().write(result);
}
objectMapper.writeValueAsString()
를 사용해 객체를 JSON
문자로 변경📌 본 포스트는 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 통해 학습한 내용을 요약 및 정리한 것입니다.