Servlet 3.1 기능
본 제품은 Servlet 3.1 스펙을 지원합니다. 사용 가능한 기능의 설명과 분류를 보십시오.
Servlet 3.1 함수의 설명은 Java™ 서블릿 스펙에서 제공되며 제품 문서에서는 설명되지 않습니다. 그렇지만 Servlet 3.1 기능에 대한 추가 고려사항은 다음과 같습니다.
비동기 I/O
Servlet 3.1 기능의 새 기능은 비블로킹 읽기가 시작될 때 나머지 요청 수명 동안의 자원은 API를 호출할 수 없도록 지정하여 블로킹 읽기를 유발할 수 있습니다. 예를 들어, 자원에 의해 읽기 리스너가 설정된 후 POST 요청의 경우 getParameter() 및 getPart() API에 대한 후속 호출에서 IllegalStateException이 발생합니다.
비동기 서블릿에 대해 작업할 때는 AsyncContext.setTimeout API를 사용하여 제한시간을 설정하는 것을 고려해야 합니다. 그렇지 않으면 컨테이너 기본값(예: 30초)이 사용됩니다. 제한시간은 ServletRequest를 사용하여 비동기가 시작될 때마다 재설정됩니다. StartAsync API가 호출되고 마지막으로 비동기로 시작된 이후의 제한시간 기간 내에 AsyncContext.complete API가 호출되지 않으면 만료됩니다. Servlet-3.1 기능에서 제공하는 비동기 I/O 지원을 사용하는 경우 AsyncContext.setTimeout API를 사용하여 제한시간 값을 설정하여 비동기 I/O도 완료될 수 있게 하십시오. 환경 또는 네트워크 속도 등의 기타 외부 요인에 따라 완료 여부가 결정됩니다.
업그레이드 처리
<webContainer upgradeReadTimeout="5000" />
<webContainer upgradeWriteTimeout="5000" />
요청이 비동기 서블릿으로 처리 중인 경우 Servlet 3.1에 대한 업그레이드 기능을 사용하여 요청을 업그레이드하면 안됩니다.
업그레이드를 위해 Servlet 3.1 기능을 지원하는 애플리케이션의 경우 요청 연결은 클라이언트와 업그레이드를 호스트하는 애플리케이션 사이에서 계속 열려 있어야 합니다. 업그레이드 처리가 해당 핸들러 또는 다른 자원(예: ReadListener 또는 WriteListener)에서 완료될 때 애플리케이션이 WebConnection close ()를 시작하지 않으면 TCP 연결은 서버가 재순환될 때까지 계속 열려 있습니다.
현재 요청에 대한 모든 데이터를
읽을 때 호출됩니다.
업그레이드의 경우 업그레이드된 데이터는 HTTP 요청 본문 데이터가
구분되는 방식으로 구분되지 않으므로 서버가 데이터의 끝을 모릅니다.
클라이언트 연결이 닫히는 시기를 제외하고 데이터의 끝에 대한 결정은
없습니다. 양식 기반 인증
성공적으로 인증되고 나면 클라이언트는 원래 요청의 자원으로 경로 재지정됩니다. Servlet 3.1 스펙은 다음을 지정합니다.경로 재지정된 요청의 HTTP 메소드 예측을 향상시키기 위해 컨테이너는 303(SC_SEE_OTHER) 상태 코드로 경로 재지정되어야 하지만 HTTP 1.0 사용자 에이전트와의 상호 운용성이 필요한 경우는 예외이며 이 경우 302 상태 코드를 사용해야 합니다. 기능은 HTTP 1.0 사용자 에이전트와의 상호 운용성을 유지보수하고 항상 302 상태 코드를 사용합니다. 보안을 위한 Servlet 3.1 구성에 대한 자세한 정보는 Servlet 3.1용 Liberty 구성 주제를 참조하십시오.
큰 게시 데이터
ServletRequest.getContentLengthLong() API를 추가하려면 길이가 Integer.MAX_VALUE보다 길어서 1바이트 배열 또는 문자열에 완전히 수용될 수 없는 게시 데이터를 수신하기 위한 지원이 필요합니다.
String getParamter(String name)
String[] getParameterValues()
Map<String,String> getParameterMap()
결합되면 Integer.MAX_VALUE보다 길이가 긴 여러 매개변수가 포함된 게시 데이터를 전송할 수 있습니다. 하지만 각각의 개별 매개변수 이름 및 매개변수 값의 길이는 Integer.MAX_VALUE보다 짧아야 합니다.
- Integer.MAX-VALUE보다 짧은 길이로 게시 데이터를 전송해야 합니다.
- 웹 컨테이너(예: 매개변수 또는 파트)에 의해 처리되는 게시 데이터는 처리를 시작하기 전에 완전히 읽어야 합니다. 게시 데이터는 웹 컨테이너 처리를 성공하기 위해 게시 데이터 크기의 두 배만큼의 메모리를 요구하므로 게시 데이터는 큰 게시 데이터에 대해 상당한 메모리가 필요할 수도 있습니다.