2015-01-12 1 views
0

Jetty에서 SPDY 프로토콜의 서버 푸시 지원과 관련된 API 인 사용자 정의 PushStrategy를 구현하려고합니다. PushStrategy에서 ServletContext에 액세스

public Set<String> apply(Stream stream, Fields requestHeaders, Fields responseHeaders); 

그러나 내가 메서드 호출 내부의 ServletContext에 액세스해야하지만 난 그것을 액세스 할 수있는 방법을 모른다 :

나는 다음과 같은 방법을 구현한다.

나는 jetty.xml의에서 WebAppContext을 주입하는 방법을 조사하고 있습니다 :

<New id="pushStrategy" class="spdy.MyPushStrategy"> 
    <Set name="webAppContext"> 
     <Ref id="..." /> 
    </Set> 
</New> 

문제는이 구성 단계는 jetty.xml의에 선언 된 서버 블록에 있다는 것이다 :

<Configure id="Server" class="org.eclipse.jetty.server.Server">....</Configure> 
WebAppContext이 부두-web.xml을 구성하는 동안

<Configure id="WebAppContext" class="org.eclipse.jetty.webapp.WebAppContext"> 

난을 참조하는 방법을 모른다 이 파일의 기존 WebAppContext ID. 이 같은 Configuring a Specific WebApp Deployment에 설명 된 것과 XML 파일을 통해 WebAppContext을 만들 때

  <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>${jetty-version}</version> 
      <configuration> 
       <stopPort>8888</stopPort> 
       <stopKey>quit</stopKey> 
       <jvmArgs> 
        -Xbootclasspath/p:${settings.localRepository}/org/mortbay/jetty/npn/npn-boot/${npn-version}/npn-boot-${npn-version}.jar 
       </jvmArgs> 
       <webAppConfig> 
        <jettyEnvXml>${basedir}/src/main/config/jetty-web.xml</jettyEnvXml> 
       </webAppConfig> 
       <jettyXml>${basedir}/src/main/config/jetty.xml</jettyXml> 
       <contextPath>/</contextPath> 
      </configuration> 

답변

1

:

여기 내 받는다는 플러그인 설정입니다.

해당 웹 응용 프로그램의 <Configure> 요소에 id 특성을 구성 할 수 있습니다.

예 :

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" 
     "http://www.eclipse.org/jetty/configure_9_0.dtd"> 

<Configure id="myapp1" class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="contextPath">/wiki</Set> 
    <Set name="war">/opt/myapp/myapp.war</Set> 
</Configure> 

그런 다음 당신은 특정 웹 애플리케이션을 참조하도록 설명 된 부두의 XML 표기법을 사용할 수 있습니다.

<New id="pushStrategy" class="spdy.MyPushStrategy"> 
    <Set name="webAppContext"> 
    <Ref id="myapp1" /> 
    </Set> 
</New> 

이제 다시 좀 더 구체적인 문제는 PushStrategy 구현에서 ServletContext에 액세스 할 수 있습니다.

TLS -> SPDY (PushStrategy 사용) -> 커넥터 -> 연결 -> HTTP -> 요청 -> 핸들러 -> 계층화 수준이 너무 높기 때문에 PushStrategy 구현에서는이 작업을 수행 할 수 없습니다. WebAppContext -> ServletContext -> Servlet.

그래도 동작을 나눌 수 있습니다.

서블릿 컨텍스트가 가지고있는 CustomPushFilter을 생성하면 사용자 지정 응답 헤더를 통해 푸시에 연결할 논리에 대한 논리가 있습니다. 그런 다음 CustomPushStrategy은 이러한 추가 리소스를 연결하는 방법을 알기 위해 해당 응답 헤더를 찾을 수 있습니다. 이 접근 방식의 보너스는 서블릿이 서블릿 관련 지식에 기반한 푸시 용 리소스를 자동으로 추가 할 수도 있다는 것입니다.

+0

이것은 작동하지 않습니다. 내 개체는 jetty.xml에서 만들어지고 jetty-web.xml에 구성된 webapp를 참조합니다! 업데이트 된 내용보기 –

+0

spdy.MyPushStrategy 인스턴스의 setter가 호출되었지만 null 값이 매개 변수로 지정되었습니다. –

+0

마지막으로 원하는 헤더를 추가하는 필터와 함께 작동합니다. –