inblog logo
|
sxias
    스프링부트

    [스프링부트] 6. Servlet 2

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

    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
    Contents
    1. Servlet2. 예제

    Sxias ㆍ a32176740@gmail.com

    RSS·Powered by Inblog