我知道我们可以在servlet api 3.0之后在运行时映射一个servlet,可以通过以下方式实现:
@Override
public void contextInitialized( ServletContextEvent sce ) {
ServletContext sc = sce.getServletContext();
String servletMapping = "/yourURL";
ServletRegistration sr = sc.addServlet( servletMapping, "org.yourdomain.yourclass" );
sr.setInitParameter( "key", "value" );
sr.addMapping( servletMapping );
}
使用websockets(使用javax.websockets.api)是否有类似的方法?
答案 0 :(得分:0)
相当于ServletContainerInitializer
的Websocket是ServerApplicationConfig
。它只需要一个服务文件,Websocket API将主动扫描WAR中的WAR和JAR,以用于任何实现ServerApplicationConfig
接口的类并使用它们。您可以在getEndpointConfigs()
中使用ServerEndpointConfig.Builder
以编程方式构建Websocket端点并将其返回。
这是一个启动示例,假设YourEndpoint.class
代表您想以编程方式添加的Websocket端点,并且您想忽略任何已扫描的类。
public class YourServerApplicationConfig implements ServerApplicationConfig {
@Override
public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> scannedClasses) {
Set<ServerEndpointConfig> configs = new HashSet<>();
configs.add(ServerEndpointConfig.Builder.create(YourEndpoint.class, "/yourPath").build());
return configs;
}
@Override
public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scannedClasses) {
return Collections.emptySet();
}
}