Contents
비교 코드📌 서블릿(Servlet) 개념 정리
✅ 서블릿(Servlet)이란?
서블릿(Servlet)은 Java에서 웹 요청을 처리하기 위한 서버 측 컴포넌트입니다. 클라이언트(브라우저 등)에서 들어오는 HTTP 요청을 받아서 처리하고, 적절한 응답을 반환하는 역할을 합니다.
✅ 서블릿의 동작 방식
- 클라이언트가 요청을 보냄
- 브라우저 또는 다른 HTTP 클라이언트가 URL을 통해 서버에 요청을 보냄.
- 서블릿 컨테이너(Tomcat 등)가 요청을 서블릿으로 전달
- 요청을 분석하여 해당 URL과 매핑된 서블릿을 찾아 실행함.
- 서블릿이 요청을 처리하고 응답을 생성
- 요청의 데이터를 읽고, 필요한 로직을 수행한 뒤, HTML, JSON 등으로 응답을 생성.
- 클라이언트에게 응답 반환
- 서블릿 컨테이너가 서블릿의 응답을 HTTP 응답 형식으로 변환하여 클라이언트에게 전달.
📌 서블릿 vs JSP vs Spring 비교
개념 | 설명 |
서블릿 | Java 코드로 직접 HTTP 요청을 처리하는 서버 프로그램 |
JSP | HTML에 Java 코드를 포함할 수 있는 템플릿 엔진 |
Spring | 서블릿 기반의 프레임워크로, 더욱 구조화된 웹 개발을 지원 |
DemoServlet 클래스: 다양한 HTTP 요청 처리

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 |

비교 코드
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