Servlet?

  • Server + Applet의 합성어

  • Servlet은 웹 애플리케이션 개발에서 동적 웹페이지 생성

  • 클라이언트의 요청을 해석하고 응답을 생성하는 서버측 요소

  • 자바 코드 안에 HTML을 포함

  • 주로 HTTP 프로토콜을 사용해 클라이언트와 상호작용

  • Apache Tomcat과 같은 웹서버에서 실행된다!

 

 

 

 

 

 

Servlet 생명주기

0. Servlet 인스턴스가 없을 경우, Servlet 클래스를 불러오고, 웹컨테이너에 의해 Servlet 인스턴스를 초기화, 생성함.

 

 

1. init()

Servlet이 처음 로드될 때 한 번만 호출된다. 따라서 여러 변수나 조건들을 초기화하는 기능을 한다.

 

 

2. service()

클라이언트의 요청을 처리할 때마다 호출되며, 요청 메서드(GET, POST 등)에 따라 적절한 처리를 담당.

doGet(), doPost, doRegist() 등의 메소드가 호출된다!

 

 

3. destroy()

서버 종료되거나 Servlet이 더 이상 사용되지 않을 때 호출되고, 리소스 정리 등 종료 작업을 처리

 

 

 

 

 

 

GET vs POST 요청의 차이

항목 GET POST
용도 서버에서 데이터를 가져올 때 사용 서버에 데이터를 보낼 때 사용
파라미터 전송 방식 URL에 쿼리스트링 형태로 전송 요청 body에 포함하여 전송
보안 데이터가 URL에 노출됨 본문에 데이터가 포함되어 비교적 안전
데이터 크기 제한적 (대략 2048자 내외) 대용량 데이터 전송 가능
캐싱 브라우저에 의해 캐싱될 수 있음 일반적으로 캐싱되지 않음

 

 

 

요청과 응답 처리

 

요청(HttpServletRequest 객체)

  • 클라이언트로부터 전달된 요청 정보를 읽어들이는 역할.
  • 요청 파라미터, 헤더, 쿠키 등의 정보를 받을 수 있다.

 

응답(HttpServletResponse 개체)

  • 요청을 처리한 후 클라이언트에 전송할 응답 정보를 작성하는 데 사용.
  • HTML, JSON, 상태 코드, 헤더, 쿠키 등을 포함할 수 있다.
// GET 요청 처리
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String parameter = request.getParameter("name");
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<h1>안녕하세요 " + parameter + "</h1>");
}

// POST 요청 처리
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String parameter = request.getParameter("name");
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<h1>안녕하세요 " + parameter + " (POST)</h1>");
}

 

 

 

 

 

- 포워드 방식

  • 서버 내부에서 요청을 처리한 후 알아서 새로운 웹페이지로 전달
  • 따라서 URL의 변화가 없고, 클라이언트는 이를 인지할 수 없음.
response.sendRedirect("newPage.jsp");

 

 

-리다이렉트 방식

  • 요청을 받은 후 처리를 완료하고 클라이언트에게 또다시 해당 URL로 요청하도록 응답을 보냄
  • 클라이언트는 해당 응답을 받고 그에 맞는 URL을 재요청함.
  • 따라서 URL의 변화가 있다.
RequestDispatcher dispatcher = request.getRequestDispatcher("nextServlet");
dispatcher.forward(request, response);