我正在尝试开发一个使用websocket端点并将其部署到Jetty服务器上的Java 7 web应用程序。
应用程序具有以下结构:
Game/
src/
main/
java/
game/
WebSocketEndpoint.java
webapp/
index.html
scripts/
variousjavascriptstuff.js
WEB-INF/
beans.xml
web.xml在beans.xml文件中:
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="annotated">
WebSocketEndpoint被正确地注释,并且在Netbeans/Glassfish4 4中工作良好,但是应用程序必须部署在Jetty服务器上。
所以,我的问题-如何将websocket端点映射到web.xml文件中的URL web.xml?我已经找到了许多映射servlet的示例,但我认为这不适用于服务器端点。
或者,是否有方法为Jetty编写web.xml文件,以便自动发现所有带注释的类/方法(类似于上面的beans.xml)
发布于 2013-11-21 17:34:52
假设您已经使用JSR-356技术注释了game.WebSocketEndpoint .
示例:
package game;
import javax.websocket.server.ServerEndpoint
@ServerEndpoint("/game")
public class WebSocketEndpoint {
}那你得做下面的事..。
--module=websocket添加到start.ini或命令行)这将启用websocket服务器类+ websocket端点的注释扫描。
注意: JSR-356不是通过部署描述符(web.xml)映射的。
但是,您可以使用以下技术之一以编程方式映射您的端点:
javax.servlet.ServletContextListener手动添加端点的javax.websocket.server.ServerContainer (参见下面的方法)javax.servlet.ServerContainerInitializer手动添加端点的javax.websocket.server.ServerContainer (参见下面的方法)javax.websocket.server.ServerAppliationConfig。注意:技术#2和#3都需要对注释进行类扫描(缓慢启动)。技术1是快速启动。
如何手动添加终结点
// Get a reference to the ServerContainer
javax.websocket.server.ServerContainer ServerContainer =
(javax.websocket.server.ServerContainer)
servletContext.getAttribute("javax.websocket.server.ServerContainer");
// Add endpoint manually to server container
serverContainer.addEndpoint(game.WebSocketEndpoint.class);https://stackoverflow.com/questions/20127800
复制相似问题