솔솔
[Tomcat] 클라이언트 GET 요청 시 서블릿까지 동작 원리 본문
🍀 클라이언트 GET 요청 시 서블릿 컨테이너 동작 원리
1. 클라이언트가 특정 URL로 GET 요청을 보냄
- 이 요청은 URL, URL 파라미터(쿼리 스트링), 헤더 정보를 포함
<a href="board?command=list">
2. 요청이 웹 서버(Apache, Nginx 등)에 도착
3. 웹 서버는 이 요청을 적절한 서블릿 컨테이너(Tomcat, Jetty 등)에 전달
4. 서블릿 컨테이너가 요청을 처리
- 서블릿 컨테이너는 HTTP 요청을 받아 HttpServletRequest 객체로 변환
5. 서블릿이 요청을 처리
- 서블릿 컨테이너는 요청 URL에 매핑된 서블릿을 찾음.
- 해당 서블릿의 doGet 메소드가 호출됨.
- 서블릿은 HttpServletRequest 객체를 통해 요청 정보를 접근하고, HttpServletResponse 객체를 통해 응답을 생성함.
6. 요청 처리가 끝나면 HttpServletRequest, HttpServletResponse 객체 소멸
🍀 HttpServletRequest 객체의 주요 메소드
- getParameter(String name): 쿼리 스트링에 있는 특정 파라미터의 값을 반환
- getParameterMap(): 모든 파라미터의 맵을 반환
- getHeader(String name): 요청 헤더의 값을 반환
- getCookies(): 요청에 포함된 쿠키 배열을 반환
- getMethod(): 요청 메소드를 반환(예: "GET")
- getRequestDispatcher(): 현재 요청을 지정된 리소스로 포워딩. 클라이언트의 브라우저에는 아무런 변화가 없으며, 서버 측에서 요청을 처리하는 리소스만 변경(예: request.getRequestDispatcher("리소스").forward(request, response))
🍀 HttpServletResponse 객체의 주요 메소드
- getWriter(): 응답의 바디를 작성할 수 있는 PrintWriter 객체를 반환. 문자열 데이터를 전송할 때 사용
- setContentType(): 답의 MIME 타입을 설정
- setCharacterEncoding(): 응답의 문자 인코딩을 설정
- sendRedirect(): 클라이언트를 다른 URL로 리다이렉트. 클라이언트는 지정된 URL로 새 요청을 보냄
🍀 서블릿 파일 생성
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/board")
public class BoardController extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 요청 파라미터 받기
String command = request.getParameter("command");
if(command == null) {
command = "list";
}
// 응답 설정
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
// 응답 바디 작성
response.getWriter().write("<html><body>");
response.getWriter().write("<h1>Hello, " + name + "!</h1>");
response.getWriter().write("</body></html>");
}
}
☁️ 마이 띵킹 ☁️
오늘 서블릿 공부를 하면서 재미있는 경험을 했다. 어느 정도 사이클을 이해하고 있다고 생각했는데 짝꿍이 클라이언트의 요청 시 서블릿까지의 동작 원리에 대해 궁금해 했다. 그 모습을 보니 내가 어느 정도 알고 있다고 생각한 부분도 다시 한번 점검할 필요가 있겠다는 생각이 들었다. 짝꿍이 이해하지 못하는 부분을 물어보면서 서블릿 사이클의 동작 원리에 대해 좀 더 깊이 찾아보았다. 자료를 찾아보면서 기본적인 사이클을 다시 정리하고 동작 원리를 명확하게 이해하기 위해 시스템 다이어그램을 그려봤다.
직접 다이어그램을 그려보니 머리로만 생각하는 것보다 훨씬 더 이해가 잘 되는것 같았다. 시각적으로 표현하니까 동작 흐름이 더 명확하게 보이고 기억에도 오래 남을 것 같다.
'나의보물들 > Tomcat' 카테고리의 다른 글
[Tomcat] STS에서 Tomcat 서버 추가 (0) | 2024.08.06 |
---|---|
[Tomcat] Mac에서 Homebrew로 Apache Tomcat 설치 (0) | 2024.08.05 |
[Tomcat] 톰캣 설치하기 (0) | 2022.03.12 |
[Tomcat] Could not publish server configuration for Tomcat v9.0 Server at localhost. (0) | 2022.02.11 |
[Tomcat] 타임아웃에러(Timeout error)해결 (0) | 2022.02.04 |