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

2. 예제
- HTTP의 프로토콜을 대신 수행해줄 수 있는 Postman 프로그램을 이용
- 브라우저로는 GET 요청 이외에 다른 요청 사용 불가

- 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 (브라우저에서도 작동됨)

- Header에 Content-Type : text/html이 삽입된 것을 확인 가능

- POST
- 상태 코드가 201로 삽입된 것을 확인 가능

- PUT
- 브라우저에 쿠키 삽입
- 쿠키는 따로 삭제하지 않으면 브라우저에 계속 저장됨


- DELETE
- StatusCode = 30x : Redirection (naver.com)
- 쿠키를 따로 삭제하지 않아, PUT에서 추가한 쿠키가 유지되는 것을 확인 가능
- 서버 측으로 계속 전송함

Share article