我正在尝试使用Jetty实现Spring的websockets集成。在Spring文档中,它说如果我们使用Jetty,我们需要
"提供预配置的Jetty WebSocketServerFactory并插入它 进入Spring的DefaultHandshakeHandler"
这是他们在Spring文档(XML配置)中提供的示例
<bean id="handshakeHandler" class="org.springframework...DefaultHandshakeHandler">
<constructor-arg ref="upgradeStrategy"/>
</bean>
<bean id="upgradeStrategy" class="org.springframework...JettyRequestUpgradeStrategy">
<constructor-arg ref="serverFactory"/>
</bean>
<bean id="serverFactory" class="org.eclipse.jetty...WebSocketServerFactory">
<constructor-arg>
<bean class="org.eclipse.jetty...WebSocketPolicy">
<constructor-arg value="SERVER"/>
<property name="inputBufferSize" value="8092"/>
<property name="idleTimeout" value="600000"/>
</bean>
</constructor-arg>
</bean>
如您所见,他们正在创建一个WEbSocketServerFactory并传入一个WebSocketPolicy。但是,最新的Jetty版本9.4.8具有不同的方法签名。
WebSocketServerFactory(javax.servlet.ServletContext context, WebSocketPolicy policy)
除了WebSocketPolicy之外,它还需要一个ServletContext。当我使用Jetty运行我的应用程序时,由于方法签名不匹配,我收到错误。我注意到在旧版本的Jetty中,WebSocketServerFactory只采用了WebSocketPolicy(这会使上面的Spring配置工作),但我不想降级我的Jetty版本。
我想知道是否有人知道如何在XML配置中传递ServletContext。
提前致谢!
答案 0 :(得分:1)
只需添加:
<constructor-arg type="javax.servlet.ServletContext"/>
到您的serverFactory bean定义,然后让Spring自动注入它。