[스프링부트] 7. Servlet

백하림's avatar
Mar 14, 2025
[스프링부트] 7. Servlet
💡

📌 서블릿(Servlet) 개념 정리

✅ 서블릿(Servlet)이란?

서블릿(Servlet)은 Java에서 웹 요청을 처리하기 위한 서버 측 컴포넌트입니다. 클라이언트(브라우저 등)에서 들어오는 HTTP 요청을 받아서 처리하고, 적절한 응답을 반환하는 역할을 합니다.

✅ 서블릿의 동작 방식

  1. 클라이언트가 요청을 보냄
      • 브라우저 또는 다른 HTTP 클라이언트가 URL을 통해 서버에 요청을 보냄.
  1. 서블릿 컨테이너(Tomcat 등)가 요청을 서블릿으로 전달
      • 요청을 분석하여 해당 URL과 매핑된 서블릿을 찾아 실행함.
  1. 서블릿이 요청을 처리하고 응답을 생성
      • 요청의 데이터를 읽고, 필요한 로직을 수행한 뒤, HTML, JSON 등으로 응답을 생성.
  1. 클라이언트에게 응답 반환
      • 서블릿 컨테이너가 서블릿의 응답을 HTTP 응답 형식으로 변환하여 클라이언트에게 전달.

📌 서블릿 vs JSP vs Spring 비교

개념
설명
서블릿
Java 코드로 직접 HTTP 요청을 처리하는 서버 프로그램
JSP
HTML에 Java 코드를 포함할 수 있는 템플릿 엔진
Spring
서블릿 기반의 프레임워크로, 더욱 구조화된 웹 개발을 지원

DemoServlet 클래스: 다양한 HTTP 요청 처리

notion image
package org.example.demo5; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet("*.do") public class DemoServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet"); resp.setHeader("Content-Type", "text/html"); PrintWriter out = resp.getWriter(); // auto flush 적용되어 있음 out.print("<html>"); out.print("<body>"); out.print("<h1>doGet</h1>"); out.print("</body>"); out.println("</html>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost"); resp.setStatus(201); // http 상태 코드 } @Override protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPut"); Cookie cookie = new Cookie("c03", "apple"); Cookie cookie2 = new Cookie("c04", "banana"); resp.addCookie(cookie); resp.addCookie(cookie2); // Set-Cookie : c03=apple;c04=banana } @Override protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doDelete"); resp.setStatus(302); // 해당 Location으로 이동해 resp.setHeader("Location", "https://www.naver.com"); } }

📌 정리

HTTP 메서드
처리 내용
응답 내용
doGet()
GET 요청을 처리하고 HTML로 응답
<h1>doGet</h1>
doPost()
POST 요청을 처리하고 HTTP 상태 코드 201 반환
상태 코드 201
doPut()
PUT 요청을 처리하고 두 개의 쿠키를 응답에 추가
쿠키: c03=apple, c04=banana
doDelete()
DELETE 요청을 처리하고 리다이렉트 응답 (302)
리다이렉트: https://www.naver.com
notion image

비교 코드

package org.example.second.controller; import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller // PrintWriter 응답 @Controller -> requestDispatcher public class DemoController { @GetMapping("/haha") public @ResponseBody String haha(){ return "haha"; } @GetMapping("/home") public void home(HttpServletResponse response){ response.setStatus(302); response.setHeader("Location", "/haha"); } }
💡
  • 클라이언트가 /home URL로 GET 요청을 보냄
  • home() 메서드가 실행되며 HTTP 응답 상태 코드 302와 Location: /haha 헤더를 설정
  • 클라이언트는 /home에서 /haha로 리다이렉트되고, /haha로 접근할 때 haha() 메서드가 실행됩니다.
  • haha() 메서드는 "haha"라는 문자열을 HTTP 응답 본문으로 반환합니다.
 
Share article

harimmon