[스프링부트] 6. Servlet 2

문정준's avatar
Mar 14, 2025
[스프링부트] 6. Servlet 2
 

1. Servlet

  • 클라이언트부터 요청 (Request)이 들어올 때, 서버에서는 요청의 종류에 따른 응답을 수행
    • HTML 파일을 요청하는 URL의 경우, 웹 서버에서 이를 처리 (HTML 파일 출력)
    • 그 외의 URI 요청은 웹 서버에서 처리할 수 없음 : WAS에서 처리
    • WAS에서는 요청을 받을 때 같이 들어온 Body, Header 데이터를 Request 객체에 저장
    • Servlet에 요청 객체와 응답 객체인 Response 객체를 함께 전송
 
  • Servlet에서는 총 4가지의 작업을 수행
      1. Read Request (BufferedReader)
      1. Parse (필요한 동작 파악)
      1. 로직 수행 (비즈니스에 따라 다름, 프로토콜 수행 등)
      1. 응답 (BufferedWriter)
 
  • WAS는 Request 객체와 Response 객체를 생성하여 클라이언트와 통신 만을 수행
    • 서버의 동작은 Servlet에서 관리 (직접 코딩 필요)
    • Reflection과 Annotation을 이용하여 필요한 파일에만 바로 접근 가능
notion image
 

2. 예제

  • HTTP의 프로토콜을 대신 수행해줄 수 있는 Postman 프로그램을 이용
    • 브라우저로는 GET 요청 이외에 다른 요청 사용 불가
notion image
 
  • HTTP 프로토콜에 따른 서버의 동작을 임의로 설정
    • GET, POST, PUT, DELETE
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(); 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); } @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); //resp.setHeader("Set-Cookie","c03=apple;c04=banana"); } @Override protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doDelete"); resp.setHeader("Location", "http://www.naver.com"); resp.setStatus(300); // 해당 Location으로 이동 } }
 

결과

  • URI는 전부 localhost:8080/good.do로 통일
 
  • GET (브라우저에서도 작동됨)
notion image
  • Header에 Content-Type : text/html이 삽입된 것을 확인 가능
notion image
 
  • POST
    • 상태 코드가 201로 삽입된 것을 확인 가능
notion image
 
  • PUT
    • 브라우저에 쿠키 삽입
    • 쿠키는 따로 삭제하지 않으면 브라우저에 계속 저장됨
notion image
notion image
 
  • DELETE
    • StatusCode = 30x : Redirection (naver.com)
    • 쿠키를 따로 삭제하지 않아, PUT에서 추가한 쿠키가 유지되는 것을 확인 가능
      • 서버 측으로 계속 전송함
notion image
 
Share article

sxias