일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- gradle
- log4j2
- nginx
- database
- dbeaver
- Spring
- JPA
- Java
- gson
- tibero
- Git
- useEffect
- BPMN
- nodejs
- springboot
- wildfly
- mybatis
- docker
- react
- VSCode
- LOG4J
- intellijIDEA
- jetbrains
- NCP
- JavaScript
- Kubernetes
- kubectl
- IntelliJ
- Windows
- MySQL
- Today
- Total
두 손끝의 창조자
Servlet Request Handling 본문
서블릿이 올바르게 초기화된 후, 서블릿 컨테이너는 이를 사용하여 클라이언트 요청을 처리할 수 있습니다. 요청은 ServletRequest 유형의 요청 오브젝트로 표시됩니다. 서블릿은 ServletResponse 유형의 제공된 오브젝트의 메서드를 호출하여 요청에 대한 응답을 채 웁니다. 이 오브젝트는 Servlet 인터페이스의 서비스 메서드에 매개 변수로 전달됩니다.
HTTP 요청의 경우 컨테이너가 제공하는 객체는 HttpServletRequest 및 HttpServletResponse 유형입니다.
서블릿 컨테이너가 서비스에 배치 한 서블릿 인스턴스는 수명 동안 요청을 처리할 수 없습니다.
멀티 스래드 이슈
서블릿 컨테이너는 서블릿의 서비스 메소드를 통해 동시에 여러 요청을 보낼 수 있습니다. 요청을 처리하려면 서블릿 개발자는 서비스 메서드에서 여러 스레드를 사용한 동시 처리를 위한 적절한 프로비저닝을 수행해야 합니다.
권장되지는 않지만 개발자의 대안은 서비스 메서드에 한 번에 하나의 요청 스레드 만 있음을 보장하기 위해 컨테이너가 필요한 SingleThreadModel 인터페이스를 구현하는 것입니다. 서블릿 컨테이너는 서블릿에서 요청을 직렬화하거나 서블릿 인스턴스 풀을 유지함으로써이 요구 사항을 충족시킬 수 있습니다. 서블릿이 분배 가능으로 표시된 웹 애플리케이션의 일부인 경우 컨테이너는 애플리케이션이 분배되는 각 JVM에서 서블릿 인스턴스 풀을 유지할 수 있습니다.
SingleThreadModel 인터페이스를 구현하지 않는 서블릿의 경우 service 메소드 (또는 HttpServlet 추상 클래스의 서비스 메서드로 전달되는 doGet 또는 doPost와 같은 메서드)가 synchronized 키워드로 정의된 경우, 서블릿 컨테이너는 인스턴스 풀 접근을 사용할 수 없으므로 요청을 직렬화 해야합니다. 그래서 service 메소드를 개발자는 성능에 해로운 영향을 미치므로 서비스 방법 (또는 전달된 방법)을 동기화하지 않는 것이 좋습니다.