두 손끝의 창조자

Servlet Request Handling 본문

프로그래밍언어/Java

Servlet Request Handling

codinglog 2020. 8. 5. 14:50

서블릿이 올바르게 초기화된 후, 서블릿 컨테이너는 이를 사용하여 클라이언트 요청을 처리할 수 있습니다. 요청은 ServletRequest 유형의 요청 오브젝트로 표시됩니다. 서블릿은 ServletResponse 유형의 제공된 오브젝트의 메서드를 호출하여 요청에 대한 응답을 채 웁니다. 이 오브젝트는 Servlet 인터페이스의 서비스 메서드에 매개 변수로 전달됩니다.

HTTP 요청의 경우 컨테이너가 제공하는 객체는 HttpServletRequest 및 HttpServletResponse 유형입니다.

서블릿 컨테이너가 서비스에 배치 한 서블릿 인스턴스는 수명 동안 요청을 처리할 수 없습니다.

멀티 스래드 이슈

서블릿 컨테이너는 서블릿의 서비스 메소드를 통해 동시에 여러 요청을 보낼 수 있습니다. 요청을 처리하려면 서블릿 개발자는 서비스 메서드에서 여러 스레드를 사용한 동시 처리를 위한 적절한 프로비저닝을 수행해야 합니다.

권장되지는 않지만 개발자의 대안은 서비스 메서드에 한 번에 하나의 요청 스레드 만 있음을 보장하기 위해 컨테이너가 필요한 SingleThreadModel 인터페이스를 구현하는 것입니다. 서블릿 컨테이너는 서블릿에서 요청을 직렬화하거나 서블릿 인스턴스 풀을 유지함으로써이 요구 사항을 충족시킬 수 있습니다. 서블릿이 분배 가능으로 표시된 웹 애플리케이션의 일부인 경우 컨테이너는 애플리케이션이 분배되는 각 JVM에서 서블릿 인스턴스 풀을 유지할 수 있습니다.

SingleThreadModel 인터페이스를 구현하지 않는 서블릿의 경우 service 메소드 (또는 HttpServlet 추상 클래스의 서비스 메서드로 전달되는 doGet 또는 doPost와 같은 메서드)가 synchronized 키워드로 정의된 경우, 서블릿 컨테이너는 인스턴스 풀 접근을 사용할 수 없으므로 요청을 직렬화 해야합니다. 그래서 service 메소드를  개발자는 성능에 해로운 영향을 미치므로 서비스 방법 (또는 전달된 방법)을 동기화하지 않는 것이 좋습니다.

반응형
Comments