Java 在web.xml文件中映射WebSocketEndpoints
我正在尝试开发一个使用websocket端点的JavaEE7Web应用程序,并将其部署在Jetty服务器上 该应用程序具有以下结构:Java 在web.xml文件中映射WebSocketEndpoints,java,jakarta-ee,web-applications,jetty,java-ee-7,Java,Jakarta Ee,Web Applications,Jetty,Java Ee 7,我正在尝试开发一个使用websocket端点的JavaEE7Web应用程序,并将其部署在Jetty服务器上 该应用程序具有以下结构: Game/ src/ main/ java/ game/ WebSocketEndpoint.java webapp/ index.html scripts/ variousjavascriptstuff.js WEB-INF
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配合使用,但是,应用程序必须部署在Jetty服务器上
那么,我的问题是——如何将websocket端点映射到web.xml文件中的URL/game?我已经找到了许多映射servlet的示例,但我认为这对服务器端点不起作用
或者,有没有一种方法可以为Jetty编写一个web.xml文件,以便它自动发现所有带注释的类/方法(类似于上面的beans.xml)假设您已经使用JSR-356技术注释了
game.WebSocketEndpoint
例如:
打包游戏;
导入javax.websocket.server.ServerEndpoint
@ServerEndpoint(“/game”)
公共类WebSocketEndpoint{
}
然后你必须做以下事情
--module=websocket
添加到start.ini
或命令行)web.xml
)进行映射
但是,可以使用以下技术之一以编程方式映射端点:
javax.servlet.ServletContextListener
,它通过javax.websocket.server.ServerContainer
手动添加端点(方法见下文)javax.servlet.ServerContainerInitializer
,它通过javax.websocket.server.ServerContainer
手动添加端点(方法见下文)javax.websocket.server.ServerAppliationConfig
,返回要添加的端点//获取对ServerContainer的引用
javax.websocket.server.ServerContainer服务器容器=
(javax.websocket.server.ServerContainer)
getAttribute(“javax.websocket.server.ServerContainer”);
//将端点手动添加到服务器容器
addEndpoint(game.WebSocketEndpoint.class);
其他集装箱的情况如何?我喜欢手动配置,但我发现令人难以置信的是,没有人在互联网上提到如何让你的控制器(tomcat 8)检测服务器端点。难道没有通用的方法吗?我不喜欢特定于容器的解决方案。上面的代码片段也适用于Tomcat8.5(可能也适用于其他Tomcats)。在javax.websocket.server.ServerContainer
的javadoc中提到,这是访问“启用websocket的web容器”的ServerContainer
的标准过程(例如,请参见此处:)