• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

서블릿의 개념을 확실하게 잡고 싶습니다.

23.06.17 10:53 작성 23.06.17 10:53 수정 조회수 334

0

제가 서블릿을 들으면서 요약했던 개념으로는

  1. 클라이언트는 WAS에게 HTTP 요청을 보냄.

  2. WAS는 해당 HTTP 요청 메시지를 뜯어서 request 객체랑 response 객체를 생성.(response는 껍데기만 있고, request 안에는 요청 메시지의 바디 내용이 들어있다)

  3. request, response 객체를 해당 서블릿에게 넘긴다.

  4. 서블릿은 프로세스 처리를 하고, 응답 결과를 response 객체에 넣어서 was에게 돌려준다.

  5. was는 response를 클라이언트에게 돌려준다.

이렇게 정리를 했습니다.

이게 제대로 학습한 개념이 맞는지 궁금합니다.

 

또 pdf 내용에서는

HttpServletRequest 역할

HTTP 요청 메시지를 개발자가 직접 파싱해서 사용해도 되지만, 매우 불편할 것이다. 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다.

 

라고 적혀있는데 HTTP 요청 메시지를 파싱하는 건 was 아닌가요?
was가 파싱해서 request객체에 담아서 서블릿에 전달하는 것으로 알고 있었는데

pdf는 서블릿이 http 메시지를 파싱해서 request에 담는다고 나와있어서 질문드립니다.

답변 1

답변을 작성해보세요.

1

개발하는쿼카님의 프로필

개발하는쿼카

2023.06.18

먼저 WAS가 등장하게 된 배경은
동적으로 리소스를 처리하고 싶어 등장한 것으로 알고 있습니다.

 

그런데 WAS 그자체를 사용하면 개발자가 해야할 작업이 너무 많은 것이죠.

서버 TCP/IP 연결 및 종료, HTTP 요청 메시지 파싱, HTTP Method 및 URL 인지 등등

개발자에게 가장 중요한것은 비지니스 로직을 개발하는 일 인데,,,, 모든 작업을 반복적으로 하는것이 과연 의미가 있을까요?

 

 

그래서 등장한 것이 서블릿 입니다.

WAS에서 1차적으로 HTTP 메시지를 파싱하고 비지니스 로직에 필요한 메시지는 따로 서블릿에서 이용할 수 있게 HttpServletRequest, HttpServletResponse 에 담아주는 것이죠.

개발자들이 비니지스 로직만 따로 처리할 수 있도록 환경을 구성해 준것이라고 생각합니다.

(서블릿은 WAS안에 존재합니다.)

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
    @Override 
    protected void service(HttpServletRequest request, HttpServletResponse response) { 
        //비지니스 로직 
    } 
}
  • urlPatterns(“/hello”)URL이 호출되면 서블릿 코드가 실행

  • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest

  • HTTP 응답 정보를 편리하게 사용할 수 있는 HttpServletResponse

 

 

하지만, 이마저도 불편하다고 여겨서
스프링 컨테이너에서 동작하는 디스패처 서블릿이 등장하고
개발자들은 컨트롤러를 구현해서 사용하도록 해준것으로 알고 있습니다.

 

 

감사합니다.