인프런 커뮤니티 질문&답변

김도영님의 프로필 이미지

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

HttpServletRequest 동일 인스턴스 질문

작성

·

113

·

수정됨

0

View 분리 - V2 강의에서 질문 사항이 있습니다.

아래 MyView 객체에서 사용하는 HttpServletRequest request 라는 인자값과

MemberSaveController에서 사용하는 HttpServletRequest request가 디버깅에서 확인하면 동일한 인스턴스인것으로 확인됩니다.

이는 HttpServletRequest 도 서블릿 객체이고 싱글톤으로 관리되어서 동일한 인스턴스로 공유되는 것일까요?

아니라면 해당 소스에서 확인할때 두개의 인스턴스가 동일한 이유가 무엇일까요?

@6666번으로 동일한 인스턴스 객체였습니다.

public class MyView {
    private String viewPath;

    public MyView(String viewPath) {
        this.viewPath = viewPath;
    }

    public void render(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
        dispatcher.forward(request,response);
    }
}
public class MemberSaveControllerV2 implements ControllerV2 {
    MemberRepository memberRepository = MemberRepository.getInstance();
    @Override
    public MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));
        Member member = new Member(username,age);
        memberRepository.save(member);
        request.setAttribute("member",member);

        return new MyView("/WEB-INF/views/save-result.jsp");
    }
}

 

답변 1

1

안녕하세요. 김도영님, 공식 서포터즈 David입니다.

톰캣은 하나의 요청을 처리할 때 동일한 요청 객체를 사용합니다.

또한, 요청 처리가 다 끝난 뒤, 해당 요청 객체를 초기화 시킨 뒤 재사용하여 새롭게 요청 객체를 생성하지 않도록하여 성능 향상을 도모하고 있습니다.

감사합니다.