我尝试实现自定义PushStrategy,这是一个与Jetty中SPDY协议的服务器推送支持相关的API。
我实现了以下方法:
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中声明的Server块中:
<Configure id="Server" class="org.eclipse.jetty.server.Server">....</Configure>
在jetty-web.xml中配置WebAppContext
<Configure id="WebAppContext" class="org.eclipse.jetty.webapp.WebAppContext">
我不知道如何在此文件中引用任何现有的WebAppContext ID。
这是我的maven插件配置:
<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>
答案 0 :(得分:1)
通过XML文件创建WebAppContext
时,例如Configuring a Specific WebApp Deployment中描述的内容。
您可以为该特定网络应用的id
元素配置<Configure>
属性。
示例:
<?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>
然后,您可以使用您描述的Jetty XML表示法来引用该特定的Web应用程序。
<New id="pushStrategy" class="spdy.MyPushStrategy">
<Set name="webAppContext">
<Ref id="myapp1" />
</Set>
</New>
现在,回到您更具体的问题,访问ServletContext
实施中的PushStrategy
。
这不能通过PushStrategy
实现来完成,因为它在TLS的分层中太高级了 - &gt; SPDY(使用PushStrategy) - &gt;连接器 - &gt;连接 - &gt; HTTP - &gt;请求 - &gt;处理程序 - &gt; WebAppContext - &gt; ServletContext - &gt;的servlet。
你可以分开行为。
创建一个Servlet上下文所具有的CustomPushFilter
,它具有关于推送关联的逻辑,通过自定义响应头完成。然后,您的CustomPushStrategy
可以查找这些响应标头,以了解如何关联这些额外资源。这种方法的好处在于,您的Servlet甚至可以根据servlet特定的知识自动添加推送资源。