원격 요청 디스패처 고려사항
이 주제에서는 RRD(Remote Request Dispatcher)를 사용하는 경우 알아야 하는 몇 가지 고려사항에 대해 설명합니다.
- 애플리케이션에서 특정 인코딩의 매개변수가 예상되는 경우
애플리케이션은 RRD(Remote Request Dispatch)가 발생하기 전에
일반적인 include에서와 같이 문자 인코딩을 설정해야 합니다.
- 로컬 서버의 ServletInputStream 데이터는 원격 서버에서 사용할 수 없습니다. 로컬 서버는 원격 서버에 RRD 요청을 전송하기 전에 먼저 POST 데이터를 구문 분석하고 include 매개변수를 요청 매개변수로 구문 분석합니다. 원격 서버에서는 다중 양식의 데이터에 액세스할 수 없습니다. 원격 서버에서 요청의 입력 스트림을 확보하려는 경우 UnsupportedOperationException이 작성됩니다.
- 원격 서버에서는 원본 요청 참조에 액세스할 수 없습니다.
- 로컬 서버에서 작성된 요청 및 응답 랩퍼는 원격 서버에서 사용할 수 없습니다. ServletRequestWrappers 및 WebSphere® 내부 ServletRequest 오브젝트에서 직렬화 가능을 구현하지 않기 때문에 사용할 수 없습니다.
- 요청 속성은 직렬화 가능해야 합니다.
- 속성의 클래스 정의는 로컬 및 원격 서버에서 모두 사용 가능해야 합니다.
- 요청 속성은 원격 서버로 전파된 후 다시 로컬 서버로 전파됩니다.
- HTTP 세션
- 웹 애플리케이션이 원격인 경우 서로 다른 웹 애플리케이션 사이에서 교차 세션 액세스를 수행할 수 없습니다.
- 모든 웹 애플리케이션이 로컬 서버에 있는 경우, 애플리케이션은 다중 웹 애플리케이션에서 액세스할 수 있는 테이블에 세션을 저장하여 웹 애플리케이션에서 세션을 공유할 수 있습니다. RRD에서는 불가능하므로 로컬인 경우에는 권장되지 않습니다.
- 서블릿 프로그래밍 모델: 서로 다른 웹 애플리케이션의 세션에 액세스할 수 없습니다.
- 로컬 및 원격인 경우 일반적인 프로그래밍 모델.
- 로컬 모드에서 애플리케이션은 참조를 캐시하고 RRD에서 실행할 수 없는 웹 애플리케이션에서 세션을 공유할 수 있습니다.
- 요청 속성으로 저장된 세션 오브젝트는 세션 클래스에서 직렬화 가능을 구현하지 않으므로 원격 서버에서 사용할 수 없습니다.
- 로컬 서버에 설정된 스레드 로컬 변수는 원격 서버에서 사용할 수 없습니다.
- ServletContext 오브젝트에 정의된 모든 메소드가 RRD ServletContext 오브젝트에서 사용 가능한 것은 아닙니다. 세부사항은 com.ibm.wsspi.rrd.context.RemoteServletContext의 SPI 문서를 참조하십시오.
- RRD를 사용하는 경우 원격 서버는 로컬 서버 출력에 액세스할 수 없습니다.
- 쿠키 및 ServletRequestWrappers
고객 애플리케이션이 HttpServletRequest.getCookies 메소드 랩퍼를 수행하고 추가 쿠키를 리턴하거나 쿠키를 제거하는 경우 javax.servlet.http.Cookie에서 직렬화 가능을 구현하지 않으므로 수정된 쿠키는 원격 서버로 전송되지 않습니다. 원본 요청 헤더의 쿠키가 원격 서버로 전송됩니다.